python 随笔
业余 python 爱好者又上线了,离上次发博过去几个月了,真的是懒!
期间完成了一段目前为止最完整、效果良好、800 多行的小游戏代码,由于运维工作忙,抽时间再将其详尽的分享出来。
此次更博,是想把之前的笔记在此做一个简略的记录,还是因为懒。
笔记内容
- 不是想象中的赋值
- 生成器 与 列表生成式
- 不是想象中的赋值
废话少说,先看代码
# 请看第一段代码
def fibs(n=10):
a, b = 0, 1
result = []
for i in range(n):
a, b = b, a+b
result.append(a)
return result
# 直接调用,验看结果
fibs()
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55] # 结果
# 再看第二段代码
def fibs(n=10):
a, b = 0, 1
result = []
for i in range(n):
a = b
b = a + b
result.append(a)
return result
# 直接调用,验看结果
fibs()
[1, 2, 4, 8, 16, 32, 64, 128, 256, 512] # 结果
原来我以为 python 迭代的那种赋值方式是为了便捷、美观,看来是和惯性思维是有出入的。
a, b = b, a+b
这种方式是先计算完 “=” 右边的值,再赋给左边的参数,比如这里 a = 0 b = 1 a+b=1 ,赋值后 a = 1 b = 1,所以第一段函数出现正确的斐波那契数列。
a = b
b = a + b
这更简单,其实就是 b 反复和自己相加,最后赋值给 a .不明白自己原来为什么以为这两种赋值方式是一样的,傻~
2 生成器 generator 与 列表生成式
列表生成式对于 Python 患者应该很熟悉了,简约大方又聪明。
[demo ** 2 for demo in range(1, 10) if demo % 2 == 0]
求 10 以内的偶数的平方
[4, 16, 36, 64]
生成器 (generator),引自廖雪峰 Python 生成器 的描述,它可以和列表生成式一样,用一个简单的带 “()” 的式子生成,然后用 next() 来取值,直到超出索引范围,抛出一个停止迭代的报错 StopIteration。
temp = (x ** x for x in range(1, 5))
temp 保存的是个算法,如下:
temp
<generator object <genexpr> at 0x0000000005616AF0>
next(temp)
1
4
27
256
Boom……(此时炸了,不复制了)
另一个重要的语句 yield,常会用这个工具制作生成器。yield 的作用就是把一个函数变成一个 generator,调用函数时返回的是一个可迭代的对象。生成器用 for 循环进行遍历,不会抛出异常。
小记
断断续续学了这么久,还是能看到好多新鲜的知识点,应该保持一个学习并记录的习惯!