【Python全栈05】函数与参数

本文主要探讨Python中的函数参数,包括普通参数、关键字参数、收集参数(args)、关键字收集参数(kwargs)、收集参数混合调用及解包问题。示例展示了不同参数类型的使用,并指出在处理关键字收集参数时遇到的问题及其解决方案。
摘要由CSDN通过智能技术生成

    前面忘了说了,由于我是在网易云课堂图灵学院上学Python的,很多内容都是借鉴上面讲义的,也借此帮图灵学院宣传一波,课程免费,学的又很系统,老师讲的很好!

    广告结束,开始正文。函数和参数两个我合起来写,以例子为主,Python的函数参数设置感觉比C++和Java好用多了。

普通参数

def func(name,age):
    print("我的名字是{0}\n我今年{1}岁了".format(name,age))
func("Salvation",21)

    结果如下:


关键字参数

def func(name="no name",age=0):
    print("我的名字是{0}\n我今年{1}岁了".format(name,age))
func(age=21,name="Salvation")

    结果同上。*关键字参数的好处是可以调换参数顺序

收集参数

def func(*args):
     for i in args:
            print(i,end=" ")
func("Salvation",21)

    结果如下:

    其中,args可以看成是列表或者元组。但其实这种方法并不能很好的达到刚才的效果。

关键字收集参数

def func( **kwargs):
     for k,v in kwargs.items():
            print(k,"...",v)
func(name="Salvation",age=18)

    结果如下:

    实际上,这个结果并不是我想要的,原本预期的结果是和第一个程序类似的效果,但是在函数里访问**kwargs的时候一直出现问题,希望以后能够解决。

收集参数混合调用

    在尝试的过程中,我遇到了一个非常经典的问题,贴出来分享一下。


    这里报错是在说:位置参数跟在关键字参数的后面了。*在Python中,必须先解析位置参数。也就是说,在定义函数的时候,我们需把*args放在hobby前面。

    修改后结果如下:

def func(name,age,*args,hobby="没有爱好",**kwargs):
    print("Hello,大家好")
    print("我叫{0},我今年{1}岁了".format(name,age))
    if(hobby=="没有爱好"):
        print("我没有爱好")
    else:
        print("我的爱好是{}".format(hobby))
    print("*"*20)
    for i in args:
        print(i)
    print("*"*20)
    for k,v in kwargs.items():
            print(k,"...",v)

func1 = func("Salvation",18,"我还喜欢看书",hobby="篮球",hobby2="我还喜欢游泳")

收集参数的解包问题

    这里的解包问题解决了我上面关键字收集参数的疑惑。

    对于普通收集参数,若想打印出参数列表的所有元素,我的第一次尝试是这样的:

 

    显然,结果中直接将整个列表打印出来,这就涉及到了列表的解包:


    这里就跟c++的指针类似的作用。同理,字典也是一样的。

    错误结果:


    我惊奇地发现,这里竟然出现了TypeError,具体原因我还不太清楚,等到学了字典在另行解答。下面贴出正确结果(字典解包需要**):



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值