zoukankan      html  css  js  c++  java
  • 要命的定义函数。。。参数组合。请认真理解!

     

    def test_args_kwargs(arg1, arg2, arg3):
        print("arg1:", arg1)
        print("arg2:", arg2)
        print("arg3:", arg3)
    

     

     

    使用*args 和*kwargs 来调用函数

    # 首先使用 *args
    >>> args = ("two", 3, 5)
    >>> test_args_kwargs(*args)
    arg1: two
    arg2: 3
    arg3: 5
    
    # 现在使用 **kwargs:
    >>> kwargs = {"arg3": 3, "arg2": "two", "arg1": 5}
    >>> test_args_kwargs(**kwargs)
    arg1: 5
    arg2: two
    arg3: 3

    标准参数与*args 和*kwargs 的使用顺序

    some_func(fargs, *args, **kwargs)
    

    fargs 标准参数,位置参数

    定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数。

    这五种可以组合使用,但排列顺序必须是:必选参数、默认参数、可变参数(元组参数*args,传递任意数量实参字典参数**kw(传递任意数量关键字实参,接收的是字典))、关键字参数、命名关键字参数*

    使用命名关键字参数时,要特别注意,如果没有可变参数,就必须加一个*作为特殊分隔符。如果缺少*,Python解释器将无法识别位置参数和命名关键字参数。

    def f1(a, b, c=0, *, *args, **kw)
        print('a=', a, 'b=', b, 'c=', c, 'args=', args, 'kw=', kw)
    

      

    a为必选参数

    b为必选参数,

    c为默认参数(输入值是可以修改的,如果输入值不改,就显示默认值。默认参数,必须指向不变对象,例如None,str)

    def add_end(L=None):
        if L is None:
            L = []
        L.append('END')
        return L
    

      

    *可变参数(Variable Argumen)是:*args是非键值对的可变数量的参数列表。 **kwargs 是不定长度的键值对(关键字和数值)。

     在参数前面加个*,例如*numbers。这里就传入任意个参数,包括0个参数。

    #给定一组数字a,b,c……,计算a² + b² + c² + ……
    def calc(*numbers):
        sum = 0
        for n in numbers:
            sum = sum+n*n
        return sum
    
    calc(1, 3, 5 , 7)
    #84
    

    调用函数时,位置参数必须位于关键字参数之前,且二者都位于函数

    范例:

    **kw

    def person(name,age,sex,**kw):
        
        print name
        print age
        print sex
        
        if 'phone' in kw:
            print kw['phone']
            
    person('hanMM','10','M',phone = 'sss')
    
    hanMM
    10
    M
    sss

    *args

    def add(*args):
        
        rtn = 0 
        for i in args:
            rtn += i
        return rtn
    add(1,5,7,9)
    # Result: 22 # 
    def add(*args):
        
        rtn = 0 
        for i in args:
            rtn += i
        return rtn
    
       
    list = [1,5,7,9]#先执行这行,再执行下面的add(*list)
    
    add(*list)
    # Result: 22 # 
  • 相关阅读:
    Java练习 SDUT-1117_求绝对值(选择结构)
    Java练习 SDUT-2561_九九乘法表
    Java练习 SDUT-1160_某年某月的天数
    HDU-1024_Max Sum Plus Plus
    博客园页面DIY
    JDBC
    JavaSE | Lambda| Optional| Stream API
    JavaSE| 网络编程
    JavaSE| 反射
    JavaSE | IO流
  • 原文地址:https://www.cnblogs.com/3lina/p/10300142.html
Copyright © 2011-2022 走看看