【Python全栈05】函数与参数

    前面忘了说了,由于我是在网易云课堂图灵学院上学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,具体原因我还不太清楚,等到学了字典在另行解答。下面贴出正确结果(字典解包需要**):



发布了30 篇原创文章 · 获赞 21 · 访问量 1万+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章