1.Generator
(1)什么是Generator:是一个生成器,可以生成1个东西,通过next(),是一个iterable
nums = [1,2,3,4,5]
#生成器的方式加快运行速度
squre_nums = ( n*n for n in nums)
print(squre_nums)
for a in squre_nums:
print(a)
(2)为什么要用Generator?列表很大的时候,Generator按需给你产生,不会一次性生成,按需要产生
可以看到不使用推导式会占用一定内存,影响运行时间
print('---------------------不使用推导式后----------------')
#大数量
yi = 100000000
nums = list(range(10000000))
#不适用推导式
print(f'内存前:{mem.memory_usage()}')
squre_nums = [n*n for n in nums]
print(f'内存后:{mem.memory_usage()}')
使用推导式后不适用内存,加快运算
print('---------------------使用推导式后----------------')
#大数量
yi = 100000000
nums = list(range(10000000))
#使用推导式
print(f'内前后:{mem.memory_usage()}')
squre_nums2 = (n*n for n in nums)
print(f'内存后:{mem.memory_usage()}')
2.yield
(1)是一个生成器,可以生成1个东西,通过next(),是一个iterable
(2)他跟return一样返回值给你,不一样的的是他会继续
(3)return返回后后面不能有代码继续执行,而yield返回值后后面可以有代码继续执行
nums = [1,2,3,4,5]
yi = 10000
def gen_nums(nums):
for n in nums:
if(n%3==0):
yield 3*yi
elif(n%5==0):
yield 5*yi
else:
yield n*yi
gnums = gen_nums(nums)
print(gnums)
for n in gnums:
print(n)
这里的if yield返回一个值以后,不会停止,会继续从原来的地方执行,继续返回elif yield的值知道整个条件判断语句执行完为止
2.*args,**kwargs
*args 和 **kwargs主要用于函数定义,你可以将不定数量的参数传递给某个函数。
*args
*args 不定参数(不定的意思是指,预先并不知道,函数使用者会传递多少个参数给你)
*args是用来发送一个非键值对的可变数量的参数列表给一个函数。
*args的用法:当传入的参数个数未知,且不需要知道参数名称时。
代码如下:
#arg karg
print('**************不遍历传入一个参数******************************')
'''
因为*args是用来接收多个参数,不进行遍历的话传入一个就只给一个内存地址
'''
def arg(*args):
print("传入的参数:",arg)
arg(1)
print('*****************遍历后传入***************************')
'''
遍历后传入可以将每次输入的参数都打印出来
'''
def arg(*args):
for i in args:
print("传入的参数:",i)
arg(1,2,2,'a','b')
print('**************综合使用******************************')
'''
可以综合使用,用一个参数接受第一个传参,后面用不定参数接受不定传参
'''
def func_arg(farg, *args):
print("传入的第一个参数:", farg)
for arg in args:
print("传入的其他参数:", arg)
func_arg(1,"youzan",'dba','hello')
**kwargs
**kwargs 传入键值对(例如:num1=11,num2=22)
**kwargs 允许将不定长度的键值对作为参数传递给一个函数。如果想要在一个函数里处理带名字的参数,应该使用 **kwargs。
代码如下:
#利用它转换参数为字典
'''**kwargs是用来接受不定数量的键值对'''
def kw_dict1(**kwargs):
return kwargs
print(kw_dict1(a=1))
def kw_dict(**kwargs):
return kwargs
print(kw_dict(a=1,b=2,c=3))