欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2022-06-17 08:50:37
生成器,推导式以及内置函数一 1.生成器 迭代器:python中内置的一种节省空间的工具. 生成器的本质就是一个迭代器. 迭代器和生成器的区别:一个是python自带的,一个是程序员自己写的. 2.推导式 3.内置函数一 ......

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

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()