十年网站开发经验 + 多家企业客户 + 靠谱的建站团队
量身定制 + 运营维护+专业推广+无忧售后,网站问题一站解决
python生成器是用来代替"不一定能够使用全部元素的数组",等到使用某一元素时,才生成该元素,用来节省空间.
创新互联-专业网站定制、快速模板网站建设、高性价比宛城网站开发、企业建站全套包干低至880元,成熟完善的模板库,直接使用。一站式宛城网站制作公司更省心,省钱,快速模板网站建设找我们,业务覆盖宛城地区。费用合理售后完善,十多年实体公司更值得信赖。
python生成器写法有两种
第一种:(数组生成式的中括号变成小括号)
# 生成器
arr = (x for x in range(1,6))
# 生成器下一个元素用next()来取得
print("--next1--")
print(next(arr))
print("--next2--")
print(next(arr))
print("--next3--")
print(next(arr))
输出结果:
--next1--
1
--next2--
2
--next3--
3
第二种方式: 使用关键字 yield 关键字
# 斐波那契数列生成器
def creatNum():
print("---开始执行生成器方法---")
a,b = 0,1
for i in range(0,5):
print("--step1--")
yield b
print("--step2--")
a,b = b,a+b
print("--step3--")
print("--..stop..--")
print("直接调用方法...")
print(creatNum())
#这里用一个标识符来指向生成器(不要把creatNum()当做函数)
func = creatNum()
#一次生成
print("使用next调用")
x = next(func)
print(x)
#又一次生成
print("使用next调用")
x = next(func)
print(x)
print("使用next调用")
x = next(func)
print(x)
输出结果:
直接调用方法...
使用next调用
---开始执行生成器方法---
--step1--
1
使用next调用
--step2--
--step3--
--step1--
1
使用next调用
--step2--
--step3--
--step1--
2
生成器还可以用 生成器.next 来调用,等价于 next(生成器)
如果使用next来调用,调用到生成器执行完毕,就会崩掉. 我们基本不会使用next来执行生成器
一般来说会用for循环来执行生成器:
# 斐波那契数列生成器
def creatNum():
print("---开始执行生成器方法---")
a,b = 0,1
for i in range(0,5):
print("--step1--")
yield b
print("--step2--")
a,b = b,a+b
print("--step3--")
print("--..stop..--")
print("直接调用方法...")
print(creatNum())
#这里用一个标识符来指向生成器(不要把creatNum()当做函数)
func = creatNum()
#使用for循环来执行生成器
for i in func:
print(i)
输出结果: (执行完毕不会崩溃)
直接调用方法...
---开始执行生成器方法---
--step1--
1
--step2--
--step3--
--step1--
1
--step2--
--step3--
--step1--
2
--step2--
--step3--
--step1--
3
--step2--
--step3--
--step1--
5
--step2--
--step3--
--..stop..--
在执行生成器时,可以使用 生成器.send(param) 方法
send方法不光是执行一步next操作,还会把send里面的参数传到生成器中充当yield表达式的返回值
**(注意:第一次执行,send里面的参数应该为None,或者使用next方法)
def test():
i = 0
while i 5:
temp = yield i
print(temp)
i += 1
t = test()
#先使用next执行,看能出来什么结果
t.__next__()
t.__next__()
print(t.__next__())
#使用send执行
t.send("1231231231223123")
print(t.send("hahahahhahaha"))
输出结果: (可见next输出temp为none , 而send 则把值传递进了生成器)
None
None
2
1231231231223123
hahahahhahaha
4
1. print(L.values()) or type() L是个字典,values keys 那几个是字典的几个方法
2. print or type(g) g是生成器
3. 错误信息已经写的很清楚了 你问题说反了,fib(8)是生成器
其实是类型不同
existKill函数会返回一个可迭代对象,后面的带数字中括号是对其内部元素的引用
用Python的replace函数就可以去除字符串中的所有中括号
完整的Python程序如下
#!/usr/bin/python
str = ' [[[[239, 267]], [[238, 268]], [[237, 268]], [[236, 269]], [[235, 269]], [[234, 270]], [[233, 270]], [[232, 271]], [[232, 281]],[[240, 289]], [[241, 289]], [[241, 287]], [[242, 286]], [[242, 284]], [[243, 283]], [[243, 279]], [[244, 278]], [[244, 273]], [[243,272]], [[243, 271]], [[242, 270]], [[242, 269]], [[240, 267]]]]'
out=str.replace('[','').replace(']','')
print(out)
运行结果
239, 267, 238, 268, 237, 268, 236, 269, 235, 269, 234, 270, 233, 270, 232, 271, 232, 281, 240, 289, 241, 289, 241, 287, 242, 286, 242, 284, 243, 283, 243, 279, 244, 278, 244, 273, 243, 272, 243, 271, 242, 270, 242, 269, 240, 267
直接输入即可。python在括号里直接输入数字即可,运用print函数的功能为将函数括号里的内容输出到屏幕上,括号里是数字就直接打数字,如print(1234),括号里是字符要加单引号或双引号,
这样写你看下:这是这种写法无法将x传到b里面去
def b(y):
return x+y
def a(x):
return b
其实你调用a--打印的是a的内存地址,a(x)就是调用的a方法,返回的是b相当于你直接打印b的内存地址一样,
所以
a--函数a的内存地址
a(x) --调用a方法,返回b函数对象相当于--b
a(x)(y)--b(y)调用b方法返回x和y的值,这里x取的是a方法的参数值,y是b方法的参数值,这点可以理解下参数的作用域