最新公告
  • 欢迎您光临网站无忧模板网,本站秉承服务宗旨 履行“站长”责任,销售只是起点 服务永无止境!立即加入钻石VIP
  • [译]定义 Python 函数时的5种参数

    正文概述 掘金(Zhengjian_L)   2021-02-16   479

    定义 Python 函数时的 5 种参数

    [译]定义 Python 函数时的5种参数

    Python 定义函数的5种参数:

    1. 缺省参数
    2. 关键字参数
    3. 位置参数
    4. 任意位置参数
    5. 任意关键字参数

    Python 函数定义:

    关键字 def 引入一个函数定义。它后面必须跟着函数名称和带括号的形式参数列表。构成函数体的语句从下一行开始,并且必须缩进。

    [译]定义 Python 函数时的5种参数

    在定义的函数中需要提及形式参数实际参数在函数调用时传递。

    我们可以用各种参数来定义函数。

    1. 缺省参数:

    • 缺省参数是在定义函数时提供的值。
    • 赋值符号=用于声明参数的默认值。
    • 在调用函数时,参数默认值是可变更项。
    • 如果在调用函数时提供缺省参数的值,这个值会替代默认值。
    • 一个函数可以有任意数量的缺省参数。
    • 缺省参数要在非缺省参数之后。

    例:

    b,c在下面的例子中,参数b,c指定了默认值。

    def add(a,b=5,c=10):
        return (a+b+c)
    

    这个函数有三种调用方式

    1. 只给出必需参数

    print(add(3))
    #Output:18
    

    2. 给出一个可选的参数 3 赋值给 a, 4 赋值给 b。

    print(add(3,4))
    #Output:14
    

    3.给出所有参数

    print(add(2,3,4))
    #Output:9
    

    注意: 默认值在函数定义处的定义过程中只会计算一次。因此,在把如列表、字典等可变对象作为默认值时会有些许不同。

    2. 关键字参数:

    也可以使用形如kwarg=value的关键字参数来调用函数。

    在调用函数时,参数值并不需要与函数定义中的参数顺序相同。这可以通过关键字参数实现。但所有的关键字参数必须与函数定义中的参数一一对应。

    例:

    def add(a,b=5,c=10):
        return (a+b+c)
    

    调用函数 function add 时提供关键字参数

    1. 所有的参数都是关键字参数,因此不需要固定顺序。
    print (add(b=10,c=15,a=20))
    #Output:45
    
    1. 调用函数时,只给出必要参数作为关键字参数,可选缺省参数就会跳过。
    print (add(a=10))
    #Output:25
    

    3. 位置参数

    调用函数时,参数传递的值的顺序和形式参数的顺序需要对应。这称之为位置参数

    位置参数之后只能是关键字参数。

    例:

    def add(a,b,c):
        return (a+b+c)
    

    上面的函数有两种调用的方式:

    1. 调用函数时,参数均为位置参数。参数传递的值会通过位置传递到对应参数。10 赋值给 a,20赋值给 b30 赋值给 c
    print (add(10,20,30))
    #Output:60
    
    1. 在混合使用位置参数和关键字参数时,关键字参数总是在位置参数之后。
    print (add(10,c=30,b=20))
    #Output:60
    

    缺省参数、位置参数 、关键字参数三者对比:

    [译]定义 Python 函数时的5种参数


    关键要点:

    1. 缺省参数需要在非缺省参数之后

    def add(a=5,b,c):
        return (a+b+c)
    
    #Output:SyntaxError: non-default argument follows default argument
    

    2. 关键字参数需要在位置参数之后

    def add(a,b,c):
        return (a+b+c)
    
    print (add(a=10,3,4))
    #Output:SyntaxError: positional argument follows keyword argument
    

    3. 所有传递的关键字参数必须有对应参数,并且顺序不重要。

    def add(a,b,c):
        return (a+b+c)
    
    print (add(a=10,b1=5,c=12))
    #Output:TypeError: add() got an unexpected keyword argument 'b1'
    

    4. 参数只能赋值一次

    def add(a,b,c):
        return (a+b+c)
    
    print (add(a=10,b=5,b=10,c=12))
    #Output:SyntaxError: keyword argument repeated
    

    5. 缺省参数是可选参数

    例 1: 只给必要参数

    def add(a,b=5,c=10):
        return (a+b+c)
    
    print (add(2))
    #Output:17
    

    例 2: 给出所有参数(必要参数和可选参数)

    def add(a,b=5,c=10):
        return (a+b+c)
    
    print (add(2,3,4))
    #Output:9
    

    可变长度参数

    可变长度参数也称为任意参数。如果我们事先不知道函数的参数数量,可以使用任意参数。

    两种任意参数

    1. 任意位置参数
    2. 任意关键字参数

    4. 任意位置参数:

    对于任意位置参数,函数定义的参数前会有一个星号(*,该参数可以包含非关键字可变长度参数。这些参数将包含在一个元组中。在可变数量的参数之前,可能会出现零个或多个普通参数。

    def add(*b):
        result=0
        for i in b:
             result=result+i
        return result
    
    print (add(1,2,3,4,5))
    #Output:15
    
    print (add(10,20))
    #Output:30
    

    5.任意关键字参数:

    对于任意关键字参数,函数定义的参数前会有双星号(*,该参数可以包含非关键字可变长度参数。

    例:

    def fn(**a):
        for i in a.items():
            print (i)
    fn(numbers=5,colors="blue",fruits="apple")
    '''
    Output:
    ('numbers', 5)
    ('colors', 'blue')
    ('fruits', 'apple')
    '''
    

    特殊参数:

    根据 Python 手册

    函数的定义看起来可以像是这样:

    [译]定义 Python 函数时的5种参数

    在这里 /* 是可选的。 如果使用这些符号则表明可以通过何种形参将参数值传递给函数:仅限位置、位置或关键字,以及仅限关键字。

    1. 位置或关键字参数
    2. 仅限位置参数
    3. 仅限关键字参数

    1. 位置或关键字参数

    如果函数定义中未使用 /*,则参数可以按位置或按关键字传递给函数。

    def add(a,b,c):
        return a+b+c
    
    print (add(3,4,5))
    #Output:12
    
    print (add(3,c=1,b=2))
    #Output:6
    

    2. 仅限位置参数

    在定义的函数中,仅限位置参数要放在/(正斜杠)之前。这个/被用来从逻辑上分隔仅限位置形参和其他形参。在/之后的形参可以为位置或关键字或者仅限关键字

    def add(a,b,/,c,d):
        return a+b+c+d
    
    print (add(3,4,5,6))
    #Output:18
    
    print (add(3,4,c=1,d=2))
    #Output:10
    

    如果将关键字参数规定为仅限位置参数,则会导致TypeError

    def add(a,b,/,c,d):
        return a+b+c+d
    
    print (add(3,b=4,c=1,d=2))
    #Output:TypeError: add() got some positional-only arguments passed as keyword arguments: 'b'
    

    3. 仅限关键字参数

    要将形参标记为仅限关键字,应在参数列表的第一个仅限关键字形参前放置一个 *

    def add(a,b,*,c,d):
        return a+b+c+d
    
    print (add(3,4,c=1,d=2))
    #Output:10
    

    如果将位置参数规定为仅限关键字参数,则会导致TypeError

    def add(a,b,*,c,d):
        return a+b+c+d
    
    print (add(3,4,1,d=2))
    #Output:TypeError: add() takes 2 positional arguments but 3 positional arguments (and 1 keyword-only argument) were given
    

    在同一个函数中的拥有三种参数的调用规则

    在下面的例子中,function add 拥有所有三种参数

    a,b — 仅限位置参数 c - 位置或关键字参数 d - 仅限关键字参数

    def add(a,b,/,c,*,d):
        return a+b+c+d
    
    print (add(3,4,1,d=2))
    #Output:10
    

    注意事项:

    1. 当你希望参数的名称对用户不可用时,则使用仅限位置。当参数名称没有实际意义时,这很有用。
    2. 如果你想规定调用函数的参数数据时,则使用仅限位置
    3. 当名称有意义且定义的函数通过名称变得更易于理解时,则使用仅限关键字
    4. 当你想要避免用户依赖传递的参数的位置时,则使用仅限关键字

    资料来源(Python手册):

    定义函数

    默认参数

    关键字参数

    特殊参数

    任意参数列表



    下载网 » [译]定义 Python 函数时的5种参数

    常见问题FAQ

    免费下载或者VIP会员专享资源能否直接商用?
    本站所有资源版权均属于原作者所有,这里所提供资源均只能用于参考学习用,请勿直接商用。若由于商用引起版权纠纷,一切责任均由使用者承担。更多说明请参考 VIP介绍。
    提示下载完但解压或打开不了?
    最常见的情况是下载不完整: 可对比下载完压缩包的与网盘上的容量,若小于网盘提示的容量则是这个原因。这是浏览器下载的bug,建议用百度网盘软件或迅雷下载。若排除这种情况,可在对应资源底部留言,或 联络我们.。
    找不到素材资源介绍文章里的示例图片?
    对于PPT,KEY,Mockups,APP,网页模版等类型的素材,文章内用于介绍的图片通常并不包含在对应可供下载素材包内。这些相关商业图片需另外购买,且本站不负责(也没有办法)找到出处。 同样地一些字体文件也是这种情况,但部分素材会在素材包内有一份字体下载链接清单。
    模板不会安装或需要功能定制以及二次开发?
    请QQ联系我们

    发表评论

    还没有评论,快来抢沙发吧!

    如需帝国cms功能定制以及二次开发请联系我们

    联系作者

    请选择支付方式

    ×
    迅虎支付宝
    迅虎微信
    支付宝当面付
    余额支付
    ×
    微信扫码支付 0 元