python的一些散点知识

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

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值