Python之路day12-生成器_列表推导式_内置函数

1,284次阅读
没有评论

前言时刻:

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

总结一波:

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

1、生成器

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

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

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

1.1 生成函数:

returnyield 的区别,只要函数中有 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. 求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}

小结:

  1. 列表推导式和生成器的区别?

    列表推导式是一个可迭代对象,而生成器是一个迭代器。

  2. 推荐使用列表推导式吗?

    简单的语法推荐,复杂的不要使用,否则以后读代码真的很痛苦。

3、内置函数

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

1、了解一般重要:

  1. eval(str):去掉字符串,运行里面的代码。但是不建议在项目用,容易被黑客注入脚本,破坏系统。
  2. exec(str):运行流代码,有点热加载的感觉。
  3. hash(str):求数据的唯一哈希值。可用于验证文件是否被修改。
  4. help():打印源代码和用法,如:help(list)
  5. 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、超级重要:

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

  2. chr:ASCII码转字母,ord:字母转ASCII码

    a = 18print(bin(a))   # 0b10010   0bprint(oct(a))   # 0o22      0oprint(hex(a))   # 0x12      0x# ord chrb = 'a'print(ord(b))   # 97print(chr(97))  # a

总结:

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

西园公子
版权声明:本站原创文章,由西园公子2021-06-10发表,共计2206字。
转载提示:除特殊说明外本站文章皆由CC-4.0协议发布,转载请注明出处。
评论(没有评论)
载入中...