美文网首页
函数定义

函数定义

作者: Terryho | 来源:发表于2018-01-05 12:38 被阅读0次

    这篇文章不会详细介绍怎么去定义函数,只会记录我认为容易混淆或者忘记的内容:

    1. 可变参数列表
      让函数调用可变个数的参数。这些参数被包装进一个元组。在这些可变个数的参数之前,可以有零到多个普通的参数。
    def write_multiple_items(file, separator, *args):
        file.write(separator.join(args))
    

    通常,这些 可变 参数是参数列表中的最后一个, 因为它们将把所有的剩余输入参数传递给函数。任何出现在 *args 后的参数是关键字参数,这意味着,他们只能被用作关键字,而不是位置参数。

    >>> def concat(*args, sep="/"):
    ...    return sep.join(args)
    ...
    >>> concat("earth", "mars", "venus")
    'earth/mars/venus'
    >>> concat("earth", "mars", "venus", sep=".")
    'earth.mars.venus'
    

    2 . 参数列表的分拆
    另有一种相反的情况: 当你要传递的参数已经是一个列表,但要调用的函数却接受分开一个个的参数值。这时候你要把已有的列表拆开来。例如内建函数 range() 需要独立的 start , stop 参数。 你可以在调用函数时加一个 * 操作符来自动把参数列表拆开:

    >>> list(range(3, 6))            # normal call with separate arguments
    [3, 4, 5]
    >>> args = [3, 6]
    >>> list(range(*args))            # call with arguments unpacked from a list
    [3, 4, 5]
    

    以同样的方式,可以使用 ** 操作符分拆关键字参数为字典:

    >>> def parrot(voltage, state='a stiff', action='voom'):
    ...     print "-- This parrot wouldn't", action,
    ...     print "if you put", voltage, "volts through it.",
    ...     print "E's", state, "!"
    ...
    >>> d = {"voltage": "four million", "state": "bleedin' demised", "action": "VOOM"}
    >>> parrot(**d)
    -- This parrot wouldn't VOOM if you put four million volts through it. E's bleedin' demised !
    
    1. Lambda表达式
      C++中也有,Python也加入了这个特性
      lambda param : param * 2
      看下面一个例子
    >>> def make_incrementor(n):
    ...     return lambda x: x + n
    ...
    >>> f = make_incrementor(42)
    >>> f(0)
    42
    >>> f(1)
    43
    

    相关文章

      网友评论

          本文标题:函数定义

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