• python参数


    参数

    python的函数具有很灵活的参数形式,可以是:

    位置参数(最常见的参数,可以使用tuple代替),

    默认参数(给默认值),

    可变参数(参数的个数可以改变,传入的其实是list或者tuple),

    关键字参数(传入的其实是dict)。

    位置参数

    #参数
    #位置参数 默认参数
    #计算x的n次方
    def power(x,n=2):
        s=1
        while n>0:
            s=s*x
            n=n-1
        return s
    print(power(3))
    》9
    
    print(power(4,4))
    》256

    默认参数

    #默认参数 小心有坑
    def add_end(L=[]):
        L.append('end')
        print( L)
    add_end()
    》['end']
    
    add_end()
    》['end', 'end']

    这里第二次调用方法的时候输出不再是['end']而是['end', 'end']

    定义默认参数要牢记一点:默认参数必须指向不变对象!
    

    要修改上面的例子,我们可以用None这个不变对象来实现:

    def add_end(L=None):
        if L is None:
            L=[]
        L.append('end')
        print( L)
    add_end()
    》['end']
    
    add_end()
    》['end']

    这样无论调用多少次都输出['end']

    可变参数

    在参数前面加一个星号*,函数内部参数接受到的是一个tuple

    #可变参数
    #计算a2 + b2 + c2 + ……
    def calc(*arg):
        sum=0
        for n in arg:
            sum=sum+n*n
        return sum
    print(calc(1,2,3,4))
    》30

    也可以直接把一个list或者tuple的元素变成可变参数传进去,在变量前面加一个星号*

    #把list或者tuple做可变参数
    num=list(range(1,4))
    print(calc(*num))
    》14

    关键字参数

    参数可以是0个或任意带参数名的参数,这些参数在函数内部自动组成为一个dict

    #关键字参数
    def person(name,age,**kw):
        print('name:',name,' age:',age,'other:',kw)
    person('Peter',35)
    》name: Peter  age: 35 other: {}
    
    person('Peter',35,city='SH',sex='F')
    》name: Peter  age: 35 other: {'city': 'SH', 'sex': 'F'}
    
    #把dict做关键字参数
    extra={'city':'SH','job':'Engineer'}
    person('Peter',35,**extra)
    》name: Peter  age: 35 other: {'city': 'SH', 'job': 'Engineer'}

    要注意定义可变参数和关键字参数的语法:

    *args是可变参数,args接收的是一个tuple;

    **kw是关键字参数,kw接收的是一个dict。

    可变参数既可以直接传入:func(1, 2, 3),又可以先组装list或tuple,

    再通过*args传入:func(*(1, 2, 3))

    关键字参数既可以直接传入:func(a=1, b=2),又可以先组装dict,

    再通过**kw传入:func(**{'a': 1, 'b': 2})

    请注意:
    
    参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
    
    对于任意函数,都可以通过类似func(*args, **kw)的形式调用它,无论它的参数是如何定义的。
    

      

  • 相关阅读:
    Eclipse 3.6 中安装WindowBuilder Pro及使用SWT Designer
    BEC听力训练 方法
    在Eclipse安装Aptana插件
    failed to create JVM 解决办法
    BEC听力训练 方法2
    ATF/Installing
    Eclipse中如何配置SWT
    语音信号 :lms算法麦克风语音降噪
    图像信号 matlab滤波器设计1 :高通滤波器应用和设计
    matlab m文件
  • 原文地址:https://www.cnblogs.com/1906859953Lucas/p/8986563.html
Copyright © 2020-2023  润新知