前言时刻:
继续码字,今天学习了生成器的概念以及内置函数,概念性很强,多理解多练习。
总结一波:
生成器、列表推导式、内置函数:ord,chr,len,help,hash等
1、生成器
一般都会把生成器和迭代器进行对比,很多人都认为生成器和迭代器是一样的。但是还是有点区别,生成器本质上就是迭代器,不同是生成器是用户自行构造的一个迭代器,而迭代器是 Python 内部预先设定好的如:文件句柄fp。
至于生成器的优点和迭代器是一样的,都是省内存,速度快等。
创建生成器的三种方式:生成函数、
1.1 生成函数:
return
和 yield
的区别,只要函数中有 yield
,那么这个函数就被称为生成器函数。而 return 是作为函数中的中断和返回作用。
# 1.1 生成函数
def func():
yield (1)
yield (2)
yield (3)
return 6
f = func()
print(f) # <generator object func at 0x7fc6e9941ba0>
print(next(f)) # 1
print(next(f)) # 2
print(next(f)) # 3
1.2 使用列表
使用列表元素作为生成的数据:yield from list
。
# 1.2 使用列表
def func():
yield from [1, 2, 3]
print(666)
return 7
f = func()
print(f) # <generator object func at 0x7fc6e9941ba0>
print(next(f)) # 1
print(next(f)) # 2
print(next(f)) # 3
2、推导式
2.1 列表推导式
这个列表推导式很简洁很高大上,用来装逼不错,但是复杂情况下不推荐用,因为不容易排查错误。
列表推导式语法:
[加工数据x for x in iterator if 条件]
直接上手写例子:
- 求1到10中所有偶数的平方添加到列表中?
lis = [x**2 for x in range(1, 10) if x&1==0]
# lis = [x**2 for x in range(2, 10, 2)] # 或者使用range中的步长或者切片步长也可
print(lis) # [4, 16, 36, 64]
2.2 字典推导式
和列表推导式语法几乎一样,就是符号不一样。
{加工数据x: 加工数据y for x, y in iterator if 条件}
例子:
# 字典推导式
dic = {x.upper(): y for x, y in [('name', 'python'), ('age', '18')]}
print(dic) # {'NAME': 'python', 'AGE': '18'}
2.3 集合推导式
不常见,看一下有印象就好
{加工数据x for x in iterator if 条件}
# 集合推导式
se = {i for i in range(6)}
print(se) # {0, 1, 2, 3, 4, 5}
小结:
列表推导式和生成器的区别?
列表推导式是一个可迭代对象,而生成器是一个迭代器。推荐使用列表推导式吗?
简单的语法推荐,复杂的不要使用,否则以后读代码真的很痛苦。
3、内置函数
常见的内置函数需要熟悉,一些不重要的的看一遍有个印象就好。
1、了解一般重要:
- eval(str):去掉字符串,运行里面的代码。但是不建议在项目用,容易被黑客注入脚本,破坏系统。
- exec(str):运行流代码,有点热加载的感觉。
- hash(str):求数据的唯一哈希值。可用于验证文件是否被修改。
- help():打印源代码和用法,如:help(list)
- callable():判断元素是否可被调用。
# 例子
# 1.eval函数
eval("print('python')") # python
eval("{'name': 'python'}") # {'name': 'python'}
# 2.exec函数
func_str = """
for i in range(1, 3):
print(i)
"""
exec(func_str) # 1 2
# 3.help
help(str.upper)
"""
Help on method_descriptor:
upper(self, /)
Return a copy of the string converted to uppercase.
"""
# 4.hash
hash("123456") # -485472484214653308
# 5.callable
def func():
return 666
print(callable(func)) # True
print(callable("func")) # False
2、超级重要:
bin(binary):十进制转二进制、oct(octonary):转8进制、hex(hexadecimal):转16进制。
chr:ASCII码转字母,ord:字母转ASCII码 ```python a = 18 print(bin(a)) # 0b10010 0b print(oct(a)) # 0o22 0o print(hex(a)) # 0x12 0x
ord chr
b = ‘a’ print(ord(b)) # 97 print(chr(97)) # a ```
搞懂了生成器与迭代器之间的联系和区别,一些内置函数也有印象了。希望到时用到的时候,能想起来有这么个函数实现了某个功能就好。