生成器

匿名 (未验证) 提交于 2019-12-02 23:49:02

词法分析 和 语法分析

迭代器:python内置的一种节省空间的工具

生成器的本质就是一个迭代器

迭代器和生成器的区别:迭代器python自带的,生成器程序员自己写的

写一个生成器---函数中将return 改成yield就是生成器

def func()     print(123)     yield "你好啊"# 返回 跟return的作用相同 print(func())产生一个生成器 print(func().__next__()) 结果: <generator object func at 0x000001F35A653C50> 123 你好啊

return 可以返回值 可以写多个但是只执行一次

yield 可以 返回值 可以写多个 可以返回多次 会记录执行位置 在函数内部yield可以暂时阻塞 while for循环

![QQ图片20190719102807](D:\python听课记录\day1\QQ图片20190719102807.pngdef func():     if 3>2:         yield "你好"     if 4>2:         yield "我好"     yield "大家好" g = func() print(g.__next__()) print(g.__next__()) print(g.__next__()) 结果: 你好 我好 大家好

def foo():     for  i in range(10):         pass     yield i     count = 1     while True:         yield count         count += 1  print(foo().__next__()) print(foo().__next__())#会产生新的生成器 print(foo().__next__())

iter() == __iter__()

next() == __next__()

send()----了解

def func():        a = yield "俺是send"         print(a) g = func() print(g.send(None))#第一次传参只能传None         
def func():     lst = []     for i in range(100000):         lst.append(i)     return lst print(func())  #改成生成器: def func():     lst = []     for i in range(100000):         yield i g = func() for i in range(50):     print(next(g))
def func():     lst = ["牛羊配","老奶奶花生米","卫龙","虾扯淡","米老头儿","老干妈"]     for i in lst         yield i g = func() print(next(g)) print(next(g)) print(next(g)) print(next(g)) 结果: 

yield from 将可迭代对象逐个返回 ,相当于for循环

def func():     lst = ["牛羊配","老奶奶花生米","卫龙","虾扯淡","米老头儿","老干妈"]     yield from lst#先走完所有的列表才会执行下一个yield#这个地方有坑 g = func() for i in g:     print(i)

列表推导式

循环模式

[变量名 for 变量名 in range(10) ]

lst = [i for i in range(20)]
print([i+1 for i in range(10)])

ɸѡģʽ:

[变量(加工后的变量) for循环 加工方式 ]

print([i for i in range(20) if i %2 ==0])

生成器表达式

循环模式:

g = (i  for i in range(10) ) print(next(g)) print(next(g)) print(next(g)) print( list((i  for i in range(10) )))  print( (i  for i in range(10) )) 结果:     0 1 2 [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] <generator object <genexpr> at 0x0000019B5C5E3BF8> 

ɸѡģʽ:

g = (i for i in range(20) if i%2 ==0) for i in g:     print(i)

字典推导式

{i:i+1 for i in range(10)}
{i:i+1 for i in range(10) if i%2 ==0}

{键:值 for循环 加工}

集合推导式

{i for i in range(10)}
{i for i in range(10)} if i%2 ==0 }
  1. eval---执行字符串类型的代码(但是只能执行一行,多行会报错),并返回最终结果。工作中禁用

    eval('2 + 2')  # 4 n=81 eval("n + 4")  # 85 eval('print(666)')  # 666 
  2. exec()---仅执行字符串类型的代码。但是不返回值工作中禁用

    s = """ for i in range(10):     print(i) """  s1 = """ print(2) def func():     print(123) func() """ print(exec(s)) print(exec(s1))
  3. hash()---获取一个对象(可哈希对象:int,str,Bool,tuple)的哈希值。

    print(hash(12322)) print(hash('123')) print(hash('arg')) print(hash('alex')) print(hash(True)) print(hash(False)) print(hash((1,2,3)))  ''' -2996001552409009098 -4637515981888139739 1 2528502973977326415 '''
  4. help()--函数用于查看函数或模块用途的详细说明。

    print(help(list)) print(help(str.split))
  5. callable()---函数用于检查一个对象是否是可调用的。如果返回True,仍然可能调用失败;但如果返回False,调用对象ojbect绝对不会成功。

    def func():     pass print(callable(func))  # 查看是否可调用 True
  6. int:函数用于将一个字符串或数字转换为整型。

    print(int())  # 0 print(int('12'))  # 12 print(int(3.6))  # 3 print(int('0100',base=2))  # 将2进制的 0100 转化成十进制。结果为 4 
  7. float()---函数用于将整数和字符串转换成浮点数。

    print(float(2)) 2.0
  8. complex()---函数用于创建一个值为 real + imag * j 的复数或者转化一个字符串或数为复数。如果第一个参数为字符串,则不需要指定第二个参数

    print(complex(56))  # 复数 print(complex(56,2))  print(complex("56+6j")) 结果: (56+0j) (56+2j) (56+6j)
  9. bin() ---将十进制转换成二进制并返回。

  10. oct()---将十进制转化成八进制字符串并返回。

  11. hex()---将十进制转化成十六进制字符串并返回。

    print(bin(10),type(bin(10)))  # 0b1010 <class 'str'> print(oct(10),type(oct(10)))  # 0o12 <class 'str'> print(hex(10),type(hex(10)))  # 0xa <class 'str'> 
  12. divmod():计算除数与被除数的结果,返回一个包含商和余数的元组(a // b, a % b)。

    print(divmod(5,2))# 2商 1余数
  13. round()---保留浮点数的小数位数,默认保留整数。

    print(round(3.5)) print(round(4.5)) print(round(4.6)) print(round(5.3234, 2))      print(round(5.545, 2))      print(round(5.535, 2) 结果: 4 4 5 5.32 5.54 5.54
  14. pow()--求x**y次幂。(三个参数为x**y的结果对z取余)

    print(pow(2,3))  # 两个参数为2**3次幂 print(pow(2,3,3))  # 三个参数为2**3次幂,对3取余。 
  15. bytes()---用于不同编码之间的转化。

    # s = "alex" # print(bytes(s,encoding="utf-8"))
  16. ord()--输入字符找当前字符编码的位置

    # ord 输入字符找该字符编码的位置  print(ord('a'))  print(ord('中'))
  17. chr()--输入当前编码的位置数字找出其对应的字符

    # chr 输入位置数字找出其对应的字符  print(chr(97))  print(chr(20013))
  18. repr()---返回一个对象的string形式(原形毕露)。

    # %r  原封不动的写出来 # name = 'taibai' # print('我叫%r'%name) # repr 原形毕露 print(repr('{"name":"alex"}')) print('{"name":"alex"}')
  19. "\u3000"---空格

  20. all()---可迭代对象中,全都是True才是True

    print(all([1,2,True,0]))#False
  21. any()---可迭代对象中,有一个True 就是True

    print(any([1,'',0]))#True
  22. gloabals()---获取全局空间中的变量

  23. locals()--获取当前空间中的变量

name = 1 def func():     a = 123     print(locals())     print(globals()) func() print(locals())
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!