zoukankan      html  css  js  c++  java
  • python函数中的参数(关键字参数,默认参数,位置参数,不定长参数)

    默认参数:定义函数的时候给定变量一个默认值。  def num(age=1):

    位置参数:调用函数的时候根据定义函数时的形参位置和实参位置进行引用。

    关键字参数:如果定义的函数中含有关键字参数,调用函数时必须要传如该关键字对应的实参。

    不定长参数:在定义函数的时候不确定传入的参数的数量(可能是0个或多个)  def num(*args,**args):  (不定长参数的标志符号是*和**,args和kwargs只是变量的名字,可以改为任意的变量如(*num,**kwnum))

      *+变量名1,可以接受被其他参数接受后剩下的任意的形参(不包括赋值语句),放进一个元组里,这个元组的名字是前面的变量名1(所以位置参数必须在此参数之前)

      **+变量名2,可以接受被其他参数接受后剩下的任意赋值语句,放进一个字典中,这个字典的名字是前面的变量名2(所以关键字参数和默认参数必须在此参数之前,*+变量名也要在此参数之前)

    测试上面的总结是否正确

    def num_0(a,b,c,*args,city='beijing',name,**kwnum):
        print(a,b,c,name,city,args,kwnum)  # 输出的时候直接用*或者** 的变量名
    num_0(1,2,3,4,5,6,7,city='hangzhou',name='jack',age=18,country='haidian')
    
    #结果
    D:pycharm_project装饰器venvScriptspython.exe D:/pycharm_project/装饰器/venv/text.py 1 2 3 jack hangzhou (4, 5, 6, 7) {'age': 18, 'country': 'haidian'} Process finished with exit code 0

     最后总结

    调用函数传递实参的时候,先传变量/定量,再传赋值语句(num_0(1,2,3,4,5,6,7,city='hangzhou',name='jack',age=18,country='haidian'))

    定义函数的时候直接按此顺序定义形参(def num_0(a,b,c,*args,city='beijing',name,**kwnum):)(位置参数,*变量名,默认参数,关键字参数,**变量名

    接下来讨论一下不定长参数中的 * 和 ** 还有什么用处

    1,当在函数的形参中使用时(和上面的例子相同)
    *t:将所有的其他位置的实参(变量/定量)获取,并将它们打包到元祖中,并赋值给此形参

    def foo(*t):
        print(t)
    foo(1,2,3)
    (1,2,3)

    **t:将所有的其他位置的实参(赋值语句)获取,并将它们打包到字典中,并赋值给此参数

    def foo(**t):
        print(t)
    foo(a=1,b=2)
    {'x': 1, 'y': 2}

    2,当在调用函数的时候使用(实参中)
    *tuple_a:将此元祖的元素,当做函数调用的位置参数

    def foo(a,b):
        print(a,b)
    tuple_a = (1,2)
    foo(*tuple_a)
    1,2

    **dict_a:将字典中的键值对,当做函数调用的关键字参数

    def foo(x, y):
        print(x, y)
    dict_a = {'x':1, 'y':2}
    foo(**dict_a)
    1,2

    3,在匹配和for循环中
    *x意味着‘匹配多余的元素’,x是一个列表

    >>>x, *xs = (1, 2, 3, 4)
    >>>xs
    [2, 3, 4]
    >>>x,
    *xs = [1, 2, 3, 4] >>>xs [2, 3, 4]

    >>> *xs, x = (1, 2, 3, 4)
    >>> xs
    [1, 2, 3]
    >>> x
    4

    >>> x, *xs, y = (1, 2, 3, 4)
    >>> x
    1
    >>> xs
    [2, 3]
    >>> y
    4
    for (x, *y, z) in [ (1, 2, 3, 4) ]: print(x, y, z)
    1 [2, 3] 4

    4,可以用于合并字典

    dict_a = {'a':1,'b':2}
    dict_b = {'b':3,'c':4}
    
    dict_c = {**dict_a,**dict_b}
    print(dict_c)
    {'a': 1, 'b': 3, 'c': 4}



    *t 表示获取此函数的所有其他位置参数,并将它们作为元组打包到此参数中
  • 相关阅读:
    FZU 2098 刻苦的小芳(卡特兰数,动态规划)
    卡特兰数总结
    FZU 1064 教授的测试(卡特兰数,递归)
    HDU 4745 Two Rabbits(区间DP,最长非连续回文子串)
    Java 第十一届 蓝桥杯 省模拟赛 正整数的摆动序列
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 反倍数
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
    Java 第十一届 蓝桥杯 省模拟赛 凯撒密码加密
  • 原文地址:https://www.cnblogs.com/serpent/p/9444355.html
Copyright © 2011-2022 走看看