生成器与常见内置函数

 

一、生成器对象

    如果函数体代码里含有yield关键字,在调用函数,函数体代码不会执行,而是将函数变成了生成器,得到的值就称为生成器对象。

def index():
    print('hello')
    yield 123

res = index()
print(res.__next__())

 

 

二、自定义range功能

    利用yield可以实现自定义迭代器,我们可以尝试实现一下基本的range的功能

def my_range(start, stop=None, step=1):
    if not stop:
        stop = start
        start = 0
    while start < stop:
        yield start
        start += step

res = my_range(10)
for i in res:
    print(i)

 

 

三、yield传值

def my_func(name):
    print('%s' % name)
    res = yield
    print('%s正在%s' % (name, res))
    yield



res1 = my_func('mike')
res1.__next__()
res1.send('哈哈')

 

 

 四、yield与return对比

      yield

         1.yield可以返回值(支持多个并组织成元组)

         2.遇到yield函数体代码不会结束而是会阻塞

         3.yield还可以是传值的一种方式

      return

         1.return可以返回值(支持多个并组织成元组)

         2.遇到return函数体代码直接结束

五、生成器表达式

    

l = [1, 2, 3, 4, 5]
res = (i+1 for i in l)
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())
print(res.__next__())

  生成器内部的代码只有在迭代取值的时候才会执行

  迭代器对象,生成器对象都是为了节省空间,类似于一个工厂,在我们需要的时候可以随时加工出“数据”

 

 

 

六、常见内置函数

# 1.abs()  求绝对值
print(abs(-1))  # 1
print(abs(1))  # 1

# 2.all()  any()
l = [1,2,'hello',None]
print(all(l))  # 所有元素的的布尔值为True则结果为True
print(any(l))  # 所有元素的布尔值为有一个为True则结果为True

# 3.bin() oct() hex() 
print(bin(10))  # 0b1010 将括号内的数字转换为二进制数
print(oct(10))  # 0o12 将括号内的数字转换为八进制
print(hex(10))  # 0xa  将括号捏的数字转换为十六进制

# 4.bytes() str()
print(bytes('哈哈哈', 'utf8'))  #将元素转为二进制
print(str(b'\xe5\x93\x88\xe5\x93\x88\xe5\x93\x88', 'utf8'))  #将元素转为字符串  
# 5.callable()  
def index():
    pass

print(callable(index))  # 判断对象是否可调用,可以返回True 反之返回False
# 6.chr()  ord()
print(ord('h'))  # 104 根据字符串寻找对应的ASCII码
print(chr(100))  # d 根据ASCII码寻找对应的字符
# 7.complex()  
print(complex(10))  # 复数 (10+0j)
# 8.dir()  
def index():
    pass

print(dir(index))  # 查看当前对象可以调用的名字
# 9.divmod()
print(divmod(101, 10))  # (10, 1) 返回前面的值除于后面的值得到的数和余数
# 10.eval() exec()
# eval()只能识别简单的语法  exec()可以识别复杂语法  都是将字符串中的数据内容加载并执行

 # 11.isinstance() 
    print(isinstance(1, int))  # True
print(isinstance(1, float))  # False 判断第一个值是不是属于第二个的数据类型
    # 12.pow()
    print(pow(3, 3))  # 27 括号中第一个参数的使用第二个参数来当幂
    # 13.round()
    print(round(4.4))  # 4
print(round(4.5))  # 4
print(round(4.6))  # 5 括号内的参数五舍六入

    # 14.sum()
    l = [1, 2, 3, 5]
print(sum(l))  # 11 求传入列表中的元素的和

 

posted @ 2021-11-22 18:31  椰子皮0oo0  阅读(36)  评论(0)    收藏  举报
1