迭代取值与索引取值的对比
迭代取值不能重复取值,但是索引取值可以重复取值,但是索引取值必须是一个容器类型,但迭代取值不一样,只要是个迭代器就可以。
生成器(就是自定义的迭代器)
在函数中,有yield的就是一个生成器,一个函数在遇到yield时会停住,不是停止,知道下一个__next__时才会接着往下走,直到遇到下一个yield。这样做的好处就是省内存。
生成器实现range功能
def age(strat, end=None, add=1): if not end: end = strat strat = 0 while True: if strat < end: print(strat) strat += add
yield传值
def age(name): while True: print("111") food = yield print('我的名字是%s,喜欢吃%s' % (name, food)) res = age('bxf') res.__next__() res.send('apple') res.send('banana')
yield与return的对比
函数遇到yield不会停止,而是会停住,但是函数遇到return会立马停止,下面的代码都不会运行,yield可以传值,yield后也可以传值,不过可以传多个值,以元组的形式。
生成表达式
def add(n, i): return n + i def test(): for i in range(4): yield i g = test() for n in [1, 10]: g = (add(n, i) for i in g) res = list(g) print(res)
常见的内置函数
# print(abs(123)) # print(abs(-123)) # 求绝对值 # l = [1, 2, 3, 4,5,6,7] # print(all(l)) # print(any(l)) # print(sum(l)) # 求和 # print(divmod(100,10)) # print(divmod(101,10)) # print(divmod(99,10)) ''' 100条数据,10条 10 101条数据,10条 11 99条数据 10条 10 ''' # num,mod = divmod(100, 10) # if not mod: # page = num+1 string = """ # hahahahh print('hello world') """ # eval(string) # exec(string) # a = 123 # s = 'aaaa' # print(type(a) is int) # print(type(s) is str) # print(isinstance(s, int)) # 判断某个数据是不是某个实例 # print(chr(68)) # print(ord('A')) # print(pow(2,3)) # 2 # print(pow(3,3)) # 2 # print(round(4.3)) # print(round(4.5)) # print(round(4.8)) # bytes() s = 'aaa' print(s.encode('utf8')) res=bytes(s, 'utf8') print(res) print(res.decode('utf8')) print(str(res,'utf8'))