生成器,推导式以及内置函数一

生成器,推导式以及内置函数一

1.生成器

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

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

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

#在函数中将return改写为yield就是一个生成器
#yield 会记录执行位置
#return 和 yield 都是返回
#return 可以写多个,但是只执行一次,yield可以写多个,还可以返回多次
#一个__next__()对应一个 yield
#生成器可以使用for循环获取值
#yield from --将可迭代对象逐个返回
#在函数的内部yield能将for循环和while循环进行临时暂停
#定义一个生成器:1.基于函数 
#             2.函数体中存在yield就是一个生成器
#             3.函数名() 就是产生一个生成器

写一个生成器:
    
def func():
    print(123)
    yield "你好"
func()              # 产生一个生成器

def func():
    if 3 > 2:
        yield "你好"   # 停,并进行记录
    if 4 > 2:
        yield "你好"
    yield "大家好"
g = func()         # 产生一个生成器
print(g.__next__())             # for i in g:
print(g.__next__())             #     print(i)
print(g.__next__())


def foo():
    for i in range(10):
        pass
    	yield i
    count = 1
    while True:
        yield count
        count += 1
g = foo()
print(next(g))           # 推荐使用 next()
print(next(g))       
print(next(g))           # for i in g:
print(next(g))           #     print(i)

坑 --会生成新的生成器
print(foo().__next__())
print(foo().__next__())


#  send()
def func():
    a = yield "send"
    print(a)
g = func()
print(g.send(None))    # 打印出 send
print(g.send(123))     # 报错

# 生成器的应用场景:

def func():
    lst = []
    for i in range(10):
        lst.append(i)
    return lst
print(func())        #[0,1,2,3,4,5,6,7,8,9]

def func():
    for i in range(10):
        yield i
g = func()
for i in range(5):
    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))           # 它

def func():
    lst1 = ["你","我","它"]
    lst2 = ["他","她","昵"]
    yield from lst1          # yield 将可迭代对象逐个返回
    yield from lst2
g = func()
print(next(g))        # 你
print(next(g))        # 我
print(next(g))        # 它

2.推导式

list推导式:
[变量(加工后的变量) for循环]
[变量(加工后的变量) for循环 加工条件]
生成器表达式:
(变量(加工后的变量) for循环)
(变量(加工后的变量) for循环 加工条件)
字典推导式:
{键:值 for循环 加工条件}
集合推导式:
{变量(加工后的变量) for循环 加工条件}


list推导式
print([i for i in range(20)])

循环模式
print([i+1 for in range(10)])
[变量 for i in range(20)]

筛选模式

lst = []
for i in range(20):
	if i % 2 == 0:
		lst.append(i)
print(lst)

print([i for i in range(20) if i % 2 == 0])
[变量(加工后的变量) for循环 加工方式]

生成器表达式:

循环模式:
g = (i for i in range(20))
print(next(g))
print(next(g))
print(next(g))

print(list(i for i in range(20)))

筛选模式
g = (i for i in range(50) if i % 2 == 0 )
for i in g:
	print(i)
	
字典推导式:
print({i:i+1 for i in range(10)})
{键:值 for循环 加工条件}

集合推导式:
print({i for i in range(10)})
print({i for i in range(10) if i % 2 == 0})

3.内置函数一

# eval()   执行字符串类型的代码,并返回最终结果
s = "2+2"
print(eval(s))   #4

# exec()   执行字符串类型的代码
s = '''
for i in [1,2,3]
	print(i)
'''
print(exec(s))  # 1 2 3            #工作中禁止使用

#hash()    获取一个对象(可哈希对象)的哈希值
print(hash(1))

#help()    用于查看函数或模块用途的详细说明
print(help(list))

#callable() 函数用于检查一个对象是否是可调用的,True仍可能调用失败
#             False也不一定绝对成功
name = "alex"
def func():
    pass
print(callable(name))     # False
print(callable(func))     # True

#int()    将一个字符串或数字转换成整型  
print(int('12'))  # 12

#float()  用于将整数和字符串转换成浮点数
print(float(2))  # 2.0

#complex()   用于转换一个字符串或数为复数
print(complex(1,2))    # (1+2j)

#bin()  将十进制转换成二进制字符串并返回
print(bin(10))    # 0b1010

#oct()  将十进制转换成八进制字符串并返回
print(oct(10))   # 0o12

#hex() 将十进制转换成十六进制字符串并返回
print(hex(10))   # 0xa

#divmod() 获取商和余
print(divmod(7,2)) # (3,1)

#round() 保留浮点数的小数位数,默认保留整数
print(round(7/3,2))  #2.33

#pow()    求幂
print(pow(2,3))  # 两个参数为2**3次幂
print(pow(2,3,3))  # 三个参数为2**3次幂,对3取余。

#bytes()  用于不同编码之间的转化
s = '你好'
bs = s.encode('utf-8')
print(bs)

#ord() 输入字符找当前字符编码的位置
print(ord('a'))  # 97

#chr() 输入当前编码的位置数字找出其对应的字符
print(chr(20013))  # 中

#repr() 返回一个对象的string形式(原形)
s = "C:\u3000"
print(repr(s))     # 'C:\u3000'

#all() 可迭代对象中,全都是True才是True
print(all([1,2,True,0]))   #False

#any() 可迭代对象中,有一个True就是True
print(any([1,'',0]))    # True

#global() 查看全局空间中的变量
#locals() 查看当前空间的变量
name = 1
def func():
    a = 123
    print(locals())    # {'a':123}
    print(globals())   #全局空间中的变量
func()
posted @ 2019-07-19 17:35  Bugbiss  阅读(185)  评论(0编辑  收藏  举报