返回顶部
首页 > 资讯 > 后端开发 > Python >一篇文章带你学习Python3的高级特性(2)
  • 142
分享到

一篇文章带你学习Python3的高级特性(2)

2024-04-02 19:04:59 142人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

目录1.生成器2.迭代器总结1.生成器 # 一边循环一边计算的机制,称为生成器:generator; # 创建generator方法: # 1.把一个列表生成式的[]改成() num

1.生成器

# 一边循环一边计算的机制,称为生成器:generator;
# 创建generator方法:
# 1.把一个列表生成式的[]改成()
numsList = [num * num for num in range(10)]
print("列表生成式生成numsList:",numsList)
numsGenerator = (num * num for num in range(10))
print("生成器生成numsGenerator:",numsGenerator)
# 使用next()函数获得generator的下一个返回值
print("打印numsGenerator第一个元素:",next(numsGenerator))
print("打印numsGenerator第二个元素:",next(numsGenerator))
print("--------------------------------------------------------")
# 使用for循环打印generator元素
print("使用循环打印生成器中的元素!")
for num in numsGenerator:
    print(num,end = " ")
print("\n")
print("--------------------------------------------------------")
# 斐波拉契数列(Fibonacci):除第一个和第二个数外,任意一个数均可由前两个数相加得到
# 1,1,2,3,5,8,13,21,34
def fibonacci(num):
    n, a, b = 0, 0, 1
    while n < num:
        print(b,end = "  ")
        a, b = b, a + b
        n = n + 1
    return "Done"

print("Fibonacci前10项为:")
fibonacci(10)
print("\n")
print("--------------------------------------------------------")
# 2.把fibonacci()函数变成generator函数
def fibonacci(num):
    n, a, b = 0, 0, 1
    while n < num:
        yield b
        a, b = b, a + b
        n = n + 1
    return "Done"

# Tips:
# 1.如果一个函数定义中包含yield关键字,则这个函数是一个generator函数;
# 2.调用一个generator函数将返回一个generator;
fib = fibonacci(10)
print("fib的值:",fib)

# 结果输出:
列表生成式生成numsList: [0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
生成器生成numsGenerator: <generator object <genexpr> at 0x0000028F0E6ACB88>
打印numsGenerator第一个元素: 0
打印numsGenerator第二个元素: 1
--------------------------------------------------------
使用循环打印生成器中的元素!
4 9 16 25 36 49 64 81 

--------------------------------------------------------
Fibonacci前10项为:
1  1  2  3  5  8  13  21  34  55  

--------------------------------------------------------
fib的值: <generator object fibonacci at 0x0000028F0E7839A8>
 

# 普通函数和generator函数的执行流程:
# 1.普通函数:顺序执行,遇到return语句或最后一行函数语句就返回;
# 2.generator函数:在每次调用next()的时候执行,遇到yield语句返回;
# 3.再次执行时从上次返回的yield语句处继续执行;
# 实例:定义一个generator函数,依次返回"Willard",18,"Engineer"
def willardInfo():
    print("STEP1")
    yield "Willard"
    print("--------")
    print("STEP2")
    yield 18
    print("--------")
    print("STEP3")
    yield "Engineer"

# 调用willardInfo()这个generator函数,先生成一个generator对象
# 然后用next()函数不断获得下一个返回值,即可用循环直接打印
willardInfoObject = willardInfo()
for willard in willardInfoObject:
    print(willard)

# 结果输出:
STEP1
Willard
--------
STEP2
18
--------
STEP3
Engineer
 

2.迭代器

# 可直接用于for循环的数据类型:
# 1.list、tuple、dict、set、str等;
# 2.generator,包括:生成器和带yield的generator function;
# 3.可以直接作用于for循环的对象称为可迭代对象:Iterable;
# 4.使用isinstance()判断一个对象是否为Iterable对象;
from collections.abc import Iterable
print("判断list是否为可迭代对象!",isinstance([],Iterable))
print("判断dict是否为可迭代对象!",isinstance({},Iterable))
print("判断str是否为可迭代对象!",isinstance("Willard",Iterable))
print("判断生成式是否为可迭代对象!",isinstance((num for num in range(10)),Iterable))
print("判断number是否为可迭代对象!",isinstance(99,Iterable))

# 结果输出:
判断list是否为可迭代对象! True
判断dict是否为可迭代对象! True
判断str是否为可迭代对象! True
判断生成式是否为可迭代对象! True
判断number是否为可迭代对象! False
 

# 可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
# 使用isinstance()判断一个对象是否为Iterator对象;
from collections.abc import Iterator
print("判断生成器是否为迭代器!",isinstance((num for num in range(10)),Iterator))
print("判断list是否为迭代器!",isinstance([],Iterator))
print("判断dict是否为迭代器!",isinstance({},Iterator))
print("判断str是否为迭代器!",isinstance("Willard",Iterator))
print("----------------------------------------------------------")
# Tips:
# 1.生成器都是Iterator对象,但list、dict、str是Iterable但不是Iterator;
# 2.Iterator对象表示数据流,Iterator对象可以被next()函数调用并不断返回下一个数据,
# 直到没有数据时抛出StopIteration错误;这个数据流可以看作一个有序序列,
# 但不能提前知道序列的长度,只能不断通过next()函数实现按需计算下一个数据,
# Iterator的计算是惰性的,只有在需要返回下一个数据时才计算;
# 3.使用iter()函数把list、dict、str变成Iterator;
print("使用iter()函数把list、dict、str变成Iterator.")
print("判断list是否为迭代器!",isinstance(iter([]),Iterator))
print("判断dict是否为迭代器!",isinstance(iter({}),Iterator))
print("判断str是否为迭代器!",isinstance(iter("Willard"),Iterator))

# 结果输出:
判断生成器是否为迭代器! True
判断list是否为迭代器! False
判断dict是否为迭代器! False
判断str是否为迭代器! False
----------------------------------------------------------
使用iter()函数把list、dict、str变成Iterator.
判断list是否为迭代器! True
判断dict是否为迭代器! True
判断str是否为迭代器! True
 

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注编程网的更多内容! 

--结束END--

本文标题: 一篇文章带你学习Python3的高级特性(2)

本文链接: https://lsjlt.com/news/163702.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 一篇文章带你学习Python3的高级特性(2)
    目录1.生成器2.迭代器总结1.生成器 # 一边循环一边计算的机制,称为生成器:generator; # 创建generator方法: # 1.把一个列表生成式的[]改成() num...
    99+
    2024-04-02
  • 一篇文章带你学习Python3的高级特性(1)
    目录1.切片2.迭代3.列表生成式总结1.切片 # 切片:取list或tuple的部分元素 nameList = ["Willard","ChenJD","ChenBao","Che...
    99+
    2024-04-02
  • 一篇文章带你学习Python3的高阶函数
    目录1.高阶函数2.map/reduce3.filter4.sorted总结1.高阶函数 # 1.变量指向函数 # 调用函数和函数本身 print("-10的绝对值为:",abs(-...
    99+
    2024-04-02
  • 一篇文章搞懂K8S高级特性
    目录K8S高级特性高级特性总结kubectl排查服务问题K8S真的放弃Docker了吗?K8S高级特性 K8S中还有一些高级特性有必要了解下,比如弹性扩缩应用(见上文)、滚动更新(见...
    99+
    2024-04-02
  • 一篇文章带你深入学习Python函数
    目录函数的特性:函数是对象:函数可以删除:总结函数的特性: 函数是对象函数可以删除函数名字和函数本身完全是分开的函数因为是对象,可以结合数据结构使用函数因为是对象,可以作为函数参数函...
    99+
    2024-04-02
  • 一篇文章带你学习python的函数与类
    目录函数模块类根据类创建实例继承总结现在做的一个小项目需要用到python的相关知识,但是因为太久没用一些东西都忘掉了,因此在本篇博客中记录一下python的函数和类的基础知识,下次...
    99+
    2024-04-02
  • 一篇文章带你学习Mybatis-Plus(新手入门)
    目录Mybatis-Plus1.快速入门地址:安装 | MyBatis-Plus (baomidou.com)2.创建数据库mybatis-plus3.创建springboot项目,...
    99+
    2024-04-02
  • 一篇文章带你学习JAVA MyBatis底层原理
    目录一、传统JDBC的弊端二、mybatis介绍三、MyBatis架构图核心类解释工作流程四、自己通过加载xml配置走mybais流程实现例子总结一、传统JDBC的弊端 j...
    99+
    2024-04-02
  • 一篇文章带你自学python Django
    目录1. Django简介Django是什么?Django前景Django框架核心2. 设计模式MVT模式3. 开发环境简介4.创建虚拟环境4.1.首先安装管理环境的包以及虚拟环境包...
    99+
    2024-04-02
  • 一篇文章带你了解一些Java反射的学习记录
    目录一、反射概述二、入门案例三、反射原理图四、反射性能测试五、Class类六、类加载总结一、反射概述 反射允许程序在运行中获取类的内部信息,例如构造器、成员变量、成员方法等...
    99+
    2024-04-02
  • 一篇文章带你复习java知识点
    目录JDK JRE JVMJDK:JRE:JVM基本语法程序结构命名规范标识符关键字变量和常量常量变量数据类型数组输入输出运算符与语句运算符语句修饰符访问控制修饰符非访问修饰符类与对...
    99+
    2024-04-02
  • 一篇文章带你深入了解Java基础(2)
    目录1、Java主要特点2、计算机的高级汇编语言类型:3、JVM(Java Visual Machine)4、编写第一个Java程序并运行5、CLASSPATH指的是类加载路径6、程...
    99+
    2024-04-02
  • 一篇文章带你学会JavaScript计时事件
    目录JavaScript 计时事件setInterval() 方法clearInterval() 方法setTimeout() 方法clearTimeout() 方法总结 ...
    99+
    2022-11-16
    javascript计时事件 js 计时 js常用事件
  • 一篇文章带你了解C++特殊类的设计
    目录设计一个类,只能在堆上创建对象设计一个类,只能在栈上创建对象设计一个类,不能被拷贝设计一个类,不能继承设计一个类,只能创建一个对象(单例模式)单例模式的概念单例模式的实现饿汉模式...
    99+
    2024-04-02
  • 一篇文章带你了解C++Primer学习日记--处理数据
    目录1.简单变量1.1变量名1.2整型short,int,long和long long1.3无符号类型1.4选择整型类型1.5char类型2.const限定符3.浮点类型4.类型转换...
    99+
    2024-04-02
  • 一篇文章带你了解C语言:入门基础(2)
    目录操作符算术操作符移位操作符位操作符单目操作符逻辑反操作!操作符++,--逻辑操作符条件操作符逗号表达式常见关键字typedefexternstatic修饰局部变量修饰全局变量和函...
    99+
    2024-04-02
  • 一篇文章带你学会Spring MVC表单标签
    目录form 标签input 标签password 标签checkbox 标签checkboxes 标签radiobutton 与 radiobuttons 标签select 与 o...
    99+
    2023-03-24
    springmvc表单标签用法示例 springmvc表单标签 springmvc接收表单参数
  • 蚂蚁技术专家:一篇文章带你学习分布式事务
    小蚂蚁说:分布式事务是企业集成中的一个技术难点,也是每一个分布式系统架构中都会涉及到的一个东西,特别是在这几年越来越火的微服务架构中,几乎可以说是无法避免,本文就围绕分布式事务各方面与大家进行介绍。一. 事务1 什么是事务数据库事务(简称:...
    99+
    2023-06-02
  • 一篇文章带你详解Spring的AOP
    目录1、AOP 什么?2、需求3、解决办法1:使用静态代理第一步:创建 UserService 接口第二步:创建 UserService的实现类第三步:创建事务类 MyTransac...
    99+
    2024-04-02
  • 一篇文章带你了解Python中的类
    目录1、类的定义2、创建对象3、继承总结1、类的定义 创建一个rectangle.py文件,并在该文件中定义一个Rectangle类。在该类中,__init__表示构造方法。其中,s...
    99+
    2024-04-02
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作