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 表示获取此函数的所有其他位置参数,并将它们作为元组打包到此参数中
  • 相关阅读:
    水浒卡
    百家姓
    祖宗十八代
    《三国演义》里到底描写了多少个人物,你知道吗?
    通用路由封装简介和基本配置方法
    DHCP Snooping的实现
    结构化的网络故障检测与排除方法
    结构化网络维护
    4000汉字无一重字
    (1)centos7 安装与分区
  • 原文地址:https://www.cnblogs.com/serpent/p/9444355.html
Copyright © 2011-2022 走看看