前言时刻:

继续码字,今天学习了生成器的概念以及内置函数,概念性很强,多理解多练习。

总结一波:

生成器、列表推导式、内置函数:ord,chr,len,help,hash等

1、生成器

一般都会把生成器和迭代器进行对比,很多人都认为生成器和迭代器是一样的。但是还是有点区别,生成器本质上就是迭代器,不同是生成器是用户自行构造的一个迭代器,而迭代器是 Python 内部预先设定好的如:文件句柄fp。

至于生成器的优点和迭代器是一样的,都是省内存,速度快等。

创建生成器的三种方式:生成函数、

1.1 生成函数:

returnyield 的区别,只要函数中有 yield ,那么这个函数就被称为生成器函数。而 return 是作为函数中的中断和返回作用。

  1. # 1.1 生成函数
  2. def func():
  3. yield (1)
  4. yield (2)
  5. yield (3)
  6. return 6
  7. f = func()
  8. print(f) # <generator object func at 0x7fc6e9941ba0>
  9. print(next(f)) # 1
  10. print(next(f)) # 2
  11. print(next(f)) # 3

1.2 使用列表

使用列表元素作为生成的数据:yield from list

  1. # 1.2 使用列表
  2. def func():
  3. yield from [1, 2, 3]
  4. print(666)
  5. return 7
  6. f = func()
  7. print(f) # <generator object func at 0x7fc6e9941ba0>
  8. print(next(f)) # 1
  9. print(next(f)) # 2
  10. print(next(f)) # 3

2、推导式

2.1 列表推导式

这个列表推导式很简洁很高大上,用来装逼不错,但是复杂情况下不推荐用,因为不容易排查错误。

列表推导式语法:

  1. [加工数据x for x in iterator if 条件]

直接上手写例子:

  1. 求1到10中所有偶数的平方添加到列表中?
  1. lis = [x**2 for x in range(1, 10) if x&1==0]
  2. # lis = [x**2 for x in range(2, 10, 2)] # 或者使用range中的步长或者切片步长也可
  3. print(lis) # [4, 16, 36, 64]

2.2 字典推导式

和列表推导式语法几乎一样,就是符号不一样。

  1. {加工数据x: 加工数据y for x, y in iterator if 条件}

例子:

  1. # 字典推导式
  2. dic = {x.upper(): y for x, y in [('name', 'python'), ('age', '18')]}
  3. print(dic) # {'NAME': 'python', 'AGE': '18'}

2.3 集合推导式

不常见,看一下有印象就好

  1. {加工数据x for x in iterator if 条件}
  2. # 集合推导式
  3. se = {i for i in range(6)}
  4. print(se) # {0, 1, 2, 3, 4, 5}

小结:

  1. 列表推导式和生成器的区别?
    列表推导式是一个可迭代对象,而生成器是一个迭代器。

  2. 推荐使用列表推导式吗?
    简单的语法推荐,复杂的不要使用,否则以后读代码真的很痛苦。

3、内置函数

常见的内置函数需要熟悉,一些不重要的的看一遍有个印象就好。

1、了解一般重要:

  1. eval(str):去掉字符串,运行里面的代码。但是不建议在项目用,容易被黑客注入脚本,破坏系统。
  2. exec(str):运行流代码,有点热加载的感觉。
  3. hash(str):求数据的唯一哈希值。可用于验证文件是否被修改。
  4. help():打印源代码和用法,如:help(list)
  5. callable():判断元素是否可被调用。
  1. # 例子
  2. # 1.eval函数
  3. eval("print('python')") # python
  4. eval("{'name': 'python'}") # {'name': 'python'}
  5. # 2.exec函数
  6. func_str = """
  7. for i in range(1, 3):
  8. print(i)
  9. """
  10. exec(func_str) # 1 2
  11. # 3.help
  12. help(str.upper)
  13. """
  14. Help on method_descriptor:
  15. upper(self, /)
  16. Return a copy of the string converted to uppercase.
  17. """
  18. # 4.hash
  19. hash("123456") # -485472484214653308
  20. # 5.callable
  21. def func():
  22. return 666
  23. print(callable(func)) # True
  24. print(callable("func")) # False

2、超级重要:

  1. bin(binary):十进制转二进制、oct(octonary):转8进制、hex(hexadecimal):转16进制。

  2. 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 ```

  1. 总结:

搞懂了生成器与迭代器之间的联系和区别,一些内置函数也有印象了。希望到时用到的时候,能想起来有这么个函数实现了某个功能就好。