标签:外衣 使用 app rabl 输入 字符 偶数 调用 社区
唯一的区别:生成器是我们自己用Python代码构建的数据结构。迭代器都是提供的,或者转化得来的。
# 生成器函数
def func():
print(111)
print(222)
yield 3
print(333)
print(444)
yield 4
ret = func()
print(ret) # <generator object func at 0x0BDF15B0>
print(next(ret)) # 111 222 3
print(next(ret)) # 333 444 4
# 一个next 对应一个yield
# return yield 区别
# return:函数中只存在一个return结束函数,并且给函数的执行者返回值。
# yield:只要函数中有yield那么他就是生成器函数而不是函数了
# 生成器函数中可以存在多个yield,yield不会结束生成器函数,一个yield对应一个next。
# def func():
# l1 = []
# for i in range(1,5001):
# l1.append(f‘{i}号包子‘)
# return l1
# ret = func()
# print(ret)
def gen_func():
for i in range(1,5001):
yield f‘{i}号包子‘
ret = gen_func()
for i in range(200):
print(next(ret)) # 1~200
for i in range(200):
print(next(ret)) # 201~400
# yield from
# def func():
# l1 = [1,2,3,4,5]
# yield l1
# # 将l1 这个列表变成了迭代器返回
# ret = func()
# print(next(ret)) # [1, 2, 3, 4, 5]
#
def func():
l1 = [1,2,3,4,5]
yield from l1
# 将l1 这个列表变成了迭代器返回
ret = func()
print(next(ret)) # 1
print(next(ret)) # 2
print(next(ret)) # 3
print(next(ret)) # 4
print(next(ret)) # 5
def func():
lst1 = [‘卫龙‘, ‘老冰棍‘, ‘北冰洋‘, ‘牛羊配‘]
lst2 = [‘馒头‘, ‘花卷‘, ‘豆包‘, ‘大饼‘]
yield from lst1
yield from lst2
g = func()
for i in g:
print(i)
# 卫龙
# 老冰棍
# 北冰洋
# 牛羊配
# 馒头
# 花卷
# 豆包
# 大饼
用一行代码构建一个比较复杂有规律的列表。
列表推导式
循环模式:[标量(加工后的变量) for 变量 in iterable]
筛选模式:[标量(加工后的变量) for 变量 in iterable if 条件]
循环模式:
# 循环模式
# 将10以内所有整数的平方写入列表。
l1 = [i*i for i in range(1,11)]
print(l1)
# 100以内所有的偶数写入列表.
l2 = [i for i in range(2,101,2)]
print(l2)
# 从python1期到python100期写入列表lst
l3 = [‘python‘+str(i)+‘期‘ for i in range(1,101)]
l3 = [f‘python{i}期‘for i in range(1,101)]
print(l3)
筛选模式
# 30以内能被三整除的数
l1 = [i for i in range(1,31) if i%3 == 0]
print(l1)
# 过滤掉长度小于3的字符串列表,并将剩下的转换成大写字母
l2 = [‘aaaaa‘,‘bb‘,‘cccc‘,‘ddddd‘,‘kk‘]
print([i.upper() for i in l2 if len(i) >= 3])
# 找到嵌套列表中名字含有两个‘e’的所有名字(有难度)
names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘],
[‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]]
print([name for lis in names for name in lis if name.count(‘e‘) == 2])
# 生成器表达式:
# 与列表推导式的写法几乎一模一样。把[]换成() 也有筛选模式,循环模式,多层循环构建
print([i for i in range(1,11)]) # [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
print((i for i in range(1,11))) # <generator object <genexpr> at 0x0C6015B0>
obj = (i for i in range(1,11))
for i in obj:
print(i)
# 了解
# eval 剥去字符串的外衣运算里边的代码。有返回值
# s1 = ‘1 + 3‘
# print(s1)
# print(eval(s1)) # 4
# s = ‘{"name":"kkk"}‘
# print(eval(s),type(eval(s))) # {‘name‘: ‘kkk‘} <class ‘dict‘>
# 网络传输的str input 输入的时候,sql注入等等绝对不能使用eval。
# exec 与eval几乎一样, 代码流
# msg = ‘‘‘
# for i in range(10):
# print(i)
# ‘‘‘
# print(msg)
# exec(msg)
# hash 哈希值
# help 帮助
# print(help(str))
# callable 判断能否调用
# s1 = ‘asdfg‘
# print(callable(s1)) # False
# def func():
# pass
# print(callable(func)) # True
# bin:将十进制转换成二进制并返回。
# oct:将十进制转化成八进制字符串并返回。
# 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‘>
Python之第十五天的努力--生成器,列表推导式,生成器表达式,内置函数1(了解)
标签:外衣 使用 app rabl 输入 字符 偶数 调用 社区
原文地址:https://www.cnblogs.com/szheng/p/13137532.html