我来自北方 跨过山与海 驻足你门外

python语法基础(6)_生成器

生成器

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

生成器与迭代器区别
迭代器是python自带的
生成器是程序猿自己写的

yield 会记录执行位置
在函数中将return改写成yield就是一个生成器
return和yield都是返回的值
return可以写多个,但是执行一次,yield可以写多个,也可以返回多个
一个__next__()对应一个yield
生成器可以使用for循环遍历
yield from__可以将迭代元素逐个返回
yield可以将for循环和while 循环进行临时暂停(函数内部)

生成器应用场景

#例子如下
def func():
    for i in range(10):
        yield i
A=func()
for i in range(2,6):
    print(next(A))

生成器表达式与推导式

列表推导式分为两种模式:
​1.循环模式:[变量(加工的变量) for 变量 in iterable]
​2.筛选模式: [变量(加工的变量) for 变量 in iterable if 条件]

#例子如下将这个列表中大于3的元素留下来。
l1 = [4, 3, 2, 6, 5, 5, 7, 8] 
print([i for i in l1 if i > 3])
#结果如下
[4, 6, 5, 5, 7, 8]

生成器表达式
生成器表达式和列表推导式的语法上一模一样,
只是把[]换成()就行了。
比如将十以内所有数的平方放到一个生成器表达式中
生成器表达式也可以进行筛选

生成器

gen = (i**2 for i in range(10))
print(gen)
# 结果: <generator object <genexpr> at 0x0000026046CAEBF8>

生成器表达式和列表推导式的区别:

列表推导式比较耗内存,所有数据一次性加载到内存。
而生成器表达式遵循迭代器协议,逐个产生元素。
得到的值不一样,列表推导式得到的是一个列表.生成器表达式获取的是一个生成器
列表推导式一目了然,生成器表达式只是一个内存地址。

列表推导式

l1 = [4, 3, 2, 6, 5, 5, 7, 8] 
print([i for i in l1 if i > 3])
#结果如下
[4, 6, 5, 5, 7, 8]

字典推导式

lst1 = ['jay','jj','meet']
lst2 = ['周杰伦','林俊杰','郭宝元']
dic = {lst1[i]:lst2[i] for i in range(len(lst1))}
print(dic)

集合推导式

lst = [1,2,3,-1,-3,-7,9]
s = {abs(i) for i in lst}
print(s)

内置函数

all()
判断可迭代参数是否含有 0、空、None、False 的参数
如果不含有以上条件返回True

注意:空元组、空列表返回值为True,这里要特别注意。

例子如下

A=(1,2,3,())
print(all(A))
#结果元祖还有空元素
False

any()
any() 函数用于判断给定的可迭代参数
是否全部为 False,则返回 False,
如果有一个为 True,则返回 True。
元素除了是 0、空、FALSE 外都算 TRUE。
例子如下

print(any((0, '', False)))
#结果 都是空的不可迭代
False

bytes()
bytes 函数返回一个新的 bytes 对象,
该对象是一个 0 <= x < 256 区间内的整数不可变序列
它是 bytearray 的不可变版本
用于字符编码
例子如下

A="SkyRabbit"
b=bytes(A.encode('gbk'))
print(b)
#结果
b'SkyRabbit'

callable()
检查一个对象是否是可调用的
例子如下

def add(a, b):
    return a + b
print(callable(add))
#结果如下
True

chr()
chr() 用一个整数作参数,返回一个对应的字符
例子如下

A=chr(97)
print(A)
#结果如下
a

complex()
函数用于创建一个值为
real + imag * j 的复数或者转化一个字符串或数为复数。
如果第一个参数为字符串,则不需要指定第二个参数。
例子如下

A=complex(1, 2)
print(A)
#结果如下
(1+2j)

divmod()
返回一个包含商和余数的元组(a // b, a % b)。
例子如下

A=divmod(6, 2)
print(A)
#结果如下
(3, 0)

eval()
函数用来执行一个字符串表达式,并返回表达式的值
例子如下

A=2
A=eval("6*A")
print(A)
#结果如下
12

exec()
exec 执行储存在字符串或文件中的 Python 语句
例子如下

A=exec('print("Hello World")')
#结果如下
Hello World

format()
格式占位符
例子如下

A="{} {}".format("hello", "world")
print(A)
#结果如下
Hello World

frozenset()
返回一个冻结的集合,
冻结后集合不能再添加或删除任何元素。

a = frozenset(range(10))
print(a)
#不可以被删除的

globals()
全局定义

hash()
用于获取取一个对象(字符串或者数值等)的哈希值。

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

id()
函数用于获取对象的内存地址。

input()
获取用户输入

int()
函数用于将一个字符串或数字转换为整型。

iter()
函数用来生成迭代器。

#例子如下
lst = [1, 2, 3]
for i in iter(lst):
    print(i)
#结果如下
1
2
3

locals()
函数会以字典类型返回当前位置的全部局部变量。
例子如下

def runoob(arg):    # 两个局部变量:arg、z
    z = 1
    print (locals())
runoob(5)
#结果如下
{'z': 1, 'arg': 5}

next()
next() 返回迭代器的下一个项目。

oct()
函数将一个整数转换成8进制字符串。
例子如下

A=20
B=oct(A)
print(B)
#结果如下
0o24

ord()
ord() 函数是 chr() 函数ASCII 字符串的配对函数
例子如下

A='A'
B=ord(A)
print(B)
#结果如下
65#意思就是ASCL码表的65位

pow()
方法返回 xy(x的y次方) 的值。
例子如下

B=pow(2,3)
print(B)
#结果如下
8

repr()
函数将对象转化为供解释器读取的形式
例子如下

dict = {'runoob': 'runoob.com', 'google': 'google.com'};
B=repr(dict)
print(B)
#结果如下
{'runoob': 'runoob.com', 'google': 'google.com'}

round()
方法返回浮点数x的四舍五入值。
例子如下

B=round(70.23456)
print(B)
#结果如下
70

print(abs())#绝对值 返回都是正数
例子如下

lst =[1,2,3,-5]
print([abs(i)for i in lst])

enumerate(" 可迭代对象","序号的启始值")#_枚举 默认开始值是0
例子如下

lst =[5,2,8,-5]new_list=[]for i in  enumerate(lst):    new_list.append(i)print(new_list)

max()#求最大值
例子如下

print(max([5,8,9,11]))

min()#求最小值
例子如下

print(min([5,8,9,11]))

sum()#求总和

print(sum({2,6,4}))

python3
可迭代对象

 g=range(0,10)
g = range(0, 10)
g.__iter__()

python2
是个列表
可迭代对象

 g=range(0,10)
g = range(0, 10)
g.__iter__()

sep=""
多个元素链接符号
例子如下

print(1,5,8,sep=" *")

end=""
结尾的符号
例子如下

 print(1,5,8,end=" *")

list()方法
例子如下

print(list("ABCDEFG"))
结果如下
#['A', 'B', 'C', 'D', 'E', 'F', 'G']

zip()#拉链 按照最少的进行合并
例子如下

lister=[1,3,5,7]
lister2=['a','b','c']
lister3=['alex','ewr','你好']
print(list(zip(lister,lister2,lister3)))
#结果如下
[(1, 'a', 'alex'), (3, 'b', 'ewr'), (5, 'c', '你好')]

dir()#查看当前函数的方法

format 进制类型转换
例子如下

print(format(5,"^20"))
print(format(1,"08b"))
#结果如下
#         5        
#00000001

filter
例子如下

lister=[1,3,5,7]
print(list(filter(lambda x:x>3,lister)))
#结果如下
[5, 7]

map()#对象反射
对可迭代对象每个元素进行加工
例子如下

print(list(map(lambda x:x+1,[1,5,8,9])))
#结果如下
[2, 6, 9, 10]
posted @ 2019-07-19 16:48  SkyRabbit  阅读(158)  评论(0编辑  收藏  举报
您的浏览器不兼容canvas