标签:传输 循环 社区 put 哈希 注入 进制转换 gen 面试题
生成器
生成器:python 社区,生成器与迭代器看成是一种。生成器的本质就是迭代器,唯一的区别:生成器是我们利用python 代码构建 数据结构。迭代器都是提供的,或者转化得来的。
获取生成器的三种方式:
生成器函数获得生成器:
函数
def func():
print(111)
print(222)
return 3
ret = func()
print(ret)
生成器函数:
def func():
print(111)
print(222)
yield 3
a = 1
b = 2
c =a +b
print(c)
yield 4
ret =func()
print(next(ret))
print(next(ret))
print(next(ret))
一个next 对应一个yield
yield return
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))
for i in range(200):
print(next(ret))
yield from
def func():
l1 = [1, 2, 3, 4, 5]
yield l1
ret = func()
print(next(ret))
def func():
l1 = [1,2,3,4]
yield from l1
‘‘‘
yield 1
yield 2
yield 3
yield 4
yield 5
‘‘‘
将l1 这个列表变成了迭代器返回。
ret = func()
print(next(ret))
print(next(ret))
print(next(ret))
print(next(ret))
生成器表达式,列表推导式
用一行代码构建一个比较复杂有规律的列表。
列表推导式:
# l1 = [i**2 for i in range(1,11)]
# print(l1)
# l1 = [i for i in range(2,101) if i %2 == 0]
# print(l1)
# l1 = [f‘python{i}期 ‘ for i in range(1,101)]
# print(l1)
# l1 = [‘barry‘,‘holting‘,‘ab‘,‘xo‘]
# l = [i.upper() for i in l1 if len(i) <3 ]
# print(l)
l1 = [i for i in range(2,11)] + list(‘JQKA‘)
print(l1)
# 含有两个‘e‘的所有的人名全部大写留下来
names = [[‘Tom‘, ‘Billy‘, ‘Jefferson‘, ‘Andrew‘, ‘Wesley‘, ‘Steven‘, ‘Joe‘],
[‘Alice‘, ‘Jill‘, ‘Ana‘, ‘Wendy‘, ‘Jennifer‘, ‘Sherry‘, ‘Eva‘]]
l1 = []
for i in names:
for name in i:
if name.count(‘e‘) == 2:
l1.append(name)
print(l1)
print([name.upper() for i in names for name in i if name.count(‘e‘) == 2])
生成器表达式
# 生成器表达式:
# 与列表推导式的写法几乎一模一样,也有筛选模式,循环模式,多层循环构建。写法上只有一个不同:
# [] 换成 ().
# print([i for i in range(1,11)])
# print((i for i in range(1,11)))
# obj = (i for i in range(1,11))
# print(next(obj))
# print(next(obj))
# print(next(obj))
# print(next(obj))
# print(next(obj))
# for i in obj:
# print(i)
循环模式讲解
练习题:
总结:
列表推导式:
# 缺点:
# 1,有毒。列表推导式只能构建比较复杂并且有规律的列表。 不要太着迷。
# 2,超过三层循环才能构建成功的,就不建议用列表推导式。
# 3,查找错误(debug模式)不行。
# 优点:
# 一行构建,简单。
# 装逼。
# 构建一个列表: [2,3,4,5,6,7,8,9,10,‘j‘,‘Q‘,‘K‘,‘A‘]
# l1 = [i for i in range(2,11)] + list(‘JQKA‘)
# print(l1)
列表推导式与生成器表达式区别。
写法上: [] ( )
iterable iterator
字典推导式:(了解)
lst1 = [‘jay‘, ‘jj‘, ‘meet‘]
lst2 = [‘周杰伦‘,‘林俊杰‘,‘元宝‘]
dic ={lst2[i]:lst1[i] for i in range(len(lst1))}
print(dic)
集合推导式(了解)
print({i for i in range(1,11)})
内置函数 I (此处了解)
# python 提供了68个内置函数。
# 今天讲的这部分大部分了解即可。
# eval 剥去字符串的外衣运算里面的代码,有返回值。
bin:将十进制转换成二进制并返回。
oct:将十进制转化成八进制字符串并返回。
hex:将十进制转化成十六进制字符串并返回。
s1 = ‘1 + 3‘
# print(s1)
# print(eval(s1)) **
# s = ‘{"name": "alex"}‘
# print(s,type(s))
# print(dict(s)) # 不行
# print(eval(s),type(eval(s)))
# 网络传输的str input 输入的时候,sql注入等等绝对不能使用eval。
# exec 与eval几乎一样, 代码流。
msg = """
for i in range(10):
print(i)
"""
# print(msg)
# exec(msg)
# hash 哈希值
# print(hash(‘fsjkdafsda‘))
# help 帮助
# s1 = ‘fjdsls‘
# print(help(str))
# print(help(str.upper))
# s1 = ‘sfsda‘
# s1.upper()
s1 = ‘fdsklfa‘
# s1()
def func():
pass
# func
# # callable 判断一个对象是否可被调用 ***
# print(callable(s1))
# print(callable(func))
16.看代码求结果:(面试题)
def demo():
for i in range(4):
yield i
g=demo()
g1=(i for i in g)
g2=(i for i in g1)
print(list(g1))
print(list(g2))
17.看代码求结果:(面试题)
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)
print(list(g))
标签:传输 循环 社区 put 哈希 注入 进制转换 gen 面试题
原文地址:https://www.cnblogs.com/zhaoxinblog/p/13232925.html