zoukankan      html  css  js  c++  java
  • python 参数

    在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

    一、必选参数

    1 def power(x, n):
    2     s = 1
    3     while n > 1:
    4         s *= x
    5         n -= 1
    6     return s
    View Code

    参数x,n为必选参数,当调用该函数时,必须传入这2个参数,否则会报错。

    参数x,n这两个参数是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数x和n。

    二、默认参数

    1 def power(x, n=2):
    2     s = 1
    3     while n > 1:
    4         s *= x
    5         n -= 1
    View Code

    给第二个参数设定默认值为2,当调用power(5)时,相当于调用power(5, 2)。使用默认参数可以简化函数的调用。在使用默认参数的时候,必选参数必须要在默认参数的前面,默认参数必须指向不可变对象。

    三、可变参数

    1 def calc(*number):
    2     sum = 0
    3     for n in number:
    4         sum += n * n
    5     return sum
    View Code

    可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*。在函数内部,参数number接收到的是一个tuple,调用该函数时,可以传入任意个参数,包括0个参数,calc(1, 2, 3)。Python允许你在list或tuple前面加一个*,把list或tuple的元素变成可变参数传进去,calc(*[1, 2, 3])。

    四、关键字参数

    1 def person(**kw):
    2     for k in kw:
    3         print(k, kw[k])
    4     
    View Code

    关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,person(name='wang', city='beijing')。在参数前面加**接收关键字参数组成字典。可以在dict前加**,把dict当作关键字参数传进去,person(**{'name': 'wang', 'city': 'beijing'})。

    五、命名关键字参数

    1 def person(name, age, *, city, job):
    2     print(name, age, city, job)
    View Code
    1 def person(name, age, *args, city, job):
    2     print(name, age, city, job)
    View Code

    对于关键字参数,函数的调用者可以传入任意不受限制的关键字参数。至于到底传入了哪些,就需要在函数内部通过kw检查。如果要限制关键字参数的名字,就可以用命名关键字参数。和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,或者函数定义中有一个可变参数*或可变参数后面的参数被视为命名关键字参数。

    命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用将报错,person('wang', 24, 'beijing', 'work')。

    六、参数组合

    顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

    1 def function(a, b, *args, c, d, **kw):
    2     pass
    View Code

    代码中:a,b为必选参数;args为可变参数;c,d为命名关键字参数;kw为关键字参数。

  • 相关阅读:
    sql两个字段相加减,第三个字段没有值的原因.
    CF 447B(DZY Loves Strings-贪心)
    Appium AndroidKeyCode
    初探Java多线程
    模拟实现Spring IoC功能
    Cordova 5 架构学习 Weinre远程调试技术
    快学Scala习题解答—第三章 数组相关操作
    org.hibernate.AssertionFailure: null id in com.you.model.User entry (don't flush the Session after a
    Swift3.0语言教程替换子字符串
    DHCP欺骗(DHCP Sproofing)
  • 原文地址:https://www.cnblogs.com/gundan/p/8046507.html
Copyright © 2011-2022 走看看