美文网首页
Python 参数

Python 参数

作者: Sue1024 | 来源:发表于2018-02-26 22:48 被阅读0次

    本文参照More on Defining Functions

    函数定义时

    Python中,一个函数在定义时,可以有一下几种参数:

    必传参数(positional argument)

    调用函数时必须传入的参数。

    >>> def say(word):
    ...     print(word)
    ...
    >>> say()
    Traceback (most recent call last):
      File "<console>", line 1, in <module>
    TypeError: say() missing 1 required positional argument: 'word'
    >>> say("Hello")
    Hello
    >>>
    

    上述代码中,say()规定了一个必传参数word,如果调用时,未传入这个参数,会报错并且提示缺失word参数。

    默认参数 (default argument)

    默认参数即函数声明时规定了默认值的参数,如果函数调用时未传入值,则使用默认值(这样就可以在某些情况下减少传入参数的数量)。

    >>> def say(word, language="English"):
    ...     print("Saying " + word + "in " + language)
    ...
    >>> say("Hello")
    Saying Helloin English
    >>> def say(word, language="English"):
    ...     print("Saying " + word + " in " + language)
    ...
    ...
    >>> say("Hello")
    Saying Hello in English
    >>> say("Hello", "Chinese")
    Saying Hello in Chinese
    

    使用默认参数需要注意几点:

    1. 默认参数需定义在必传参数之后
    2. 默认参数的默认值最好是不可变项
      第一点很好理解,默认参数可传可不传,因此不能定义在必传参数前面:
    >>> def say(language="English", word):
    ...     print(word)
      File "<console>", line 1
    SyntaxError: non-default argument follows default argument
    

    关于第二点,由于默认参数在函数定义时即被赋值,因此,如果默认参数被赋予了可变对象,比如List Dict 类的实例等等,对默认参数的改动将在所有调用这个函数的地方共享。

    >>> def f(a, L=[]):
    ...     L.append(a)
    ...     return L
    ...
    >>> print(f(1))
    [1]
    >>> print(f(2))
    [1, 2]
    >>> print(f(3))
    [1, 2, 3]
    

    官网也提供了一种解决方式:

    >>> def f(a, L=None):
    ...     if(L is None):
    ...             L = []
    ...             L.append(a)
    ...     return L
    ...
    >>> print(f(1))
    [1]
    >>> print(f(2))
    [2]
    >>> print(f(3))
    [3]
    

    任意长度参数(arbitrary argument Lists)

    如果我们定义函数时并不严格要求传入参数的数量(参数数量可以是0到n个),可以使用可变参数*argarg表示传入的参数数组。

    >>> def say(*words):
    ...     for i in words:
    ...             print(i)
    ...
    >>> say("Hello", "World")
    Hello
    World
    

    键值对参数(keyword argument)

    如果我们的函数接受不定数量的键值对作为参数,可以使用**argarg表示传入的dict(0到n个键值对)。

    >>> def say(**args):
    ...     print(args["word"] + " in " + args["language"])
    ...
    >>> say(word="Hello", language="English")
    Hello in English
    

    参数组合

    如果一个函数需要同时接收以上几种参数,需要注意的是,以上几种参数的声明顺序为:必传参数、默认参数、数组参数、键值对参数。

    函数调用时

    Python中,当调用一个函数时,我们可以配合使用* **来简化参数的传入。
    如果需要传入一个函数的参数已经包含在一个数组里,我们可以使用*来传入这个数组。

    >>> say(word="Hello", language="English")
    Hello in English
    >>> def say(word, language):
    ...     print(word + " in " + language)
    ...
    >>> str = ["Hello", "English"]
    >>> say(*str)
    Hello in English
    

    如果需要传入一个函数的键值对已经保存在一个dict中,我们可以使用**来传入这个dict

    >>> def say(word, language):
    ...     print(word + language)
    ...
    >>> dict = {"word":"Hello", "language":"English"}
    >>> say(**dict)
    HelloEnglish
    

    调用一个函数时,使用键值对传参可以使我们不必考虑参数的顺序,比如:

    >>> say(language="English", word="Hello")
    Hello in English
    

    使用这个方式,如果传入了没有生命的参数会报错。

    相关文章

      网友评论

          本文标题:Python 参数

          本文链接:https://www.haomeiwen.com/subject/ucoztftx.html