Python3 函数

# 用def定义新函数
    def add(x, y):
        print("x is {} and y is {}".format(x, y))
        return x + y    # 用return语句返回

# 调用函数
    add(5, 6)   # => 印出"x is 5 and y is 6"并且返回11

# 也可以用关键字参数来调用函数
    add(y=6, x=5)   # 关键字参数可以用任何顺序

# 我们可以定义一个可变参数函数
    def varargs(*args):
        return args

    varargs(1, 2, 3)   # => (1, 2, 3)

# 我们也可以定义一个关键字可变参数函数
    def keyword_args(**kwargs):
        return kwargs

# 我们来看看结果是什么:
    keyword_args(big="foot", loch="ness")   # => {"big": "foot", "loch": "ness"}

# 这两种可变参数可以混着用
    def all_the_args(*args, **kwargs):
        print(args)
        print(kwargs)
"""
    all_the_args(1, 2, a=3, b=4) prints:
        (1, 2)
        {"a": 3, "b": 4}
"""

# 调用可变参数函数时可以做跟上面相反的,用*展开序列,用**展开字典。
    args = (1, 2, 3, 4)
    kwargs = {"a": 3, "b": 4}
    all_the_args(*args)   # 相当于 foo(1, 2, 3, 4)
    all_the_args(**kwargs)   # 相当于 foo(a=3, b=4)
    all_the_args(*args, **kwargs)   # 相当于 foo(1, 2, 3, 4, a=3, b=4)

# 函数作用域
    x = 5

    def setX(num):
        # 局部作用域的x和全局域的x是不同的
        x = num # => 43
        print (x) # => 43

    def setGlobalX(num):
        global x
        print (x) # => 5
        x = num # 现在全局域的x被赋值
        print (x) # => 6

    setX(43)
    setGlobalX(6)

# 函数在Python是一等公民
    def create_adder(x):
        def adder(y):
            return x + y
        return adder

    add_10 = create_adder(10)
    add_10(3)   # => 13

# 也有匿名函数
    (lambda x: x > 2)(3)   # => True

# 内置的高阶函数
    map(add_10, [1, 2, 3])   # => [11, 12, 13]
    filter(lambda x: x > 5, [3, 4, 5, 6, 7])   # => [6, 7]

# 用列表推导式可以简化映射和过滤。列表推导式的返回值是另一个列表。
    [add_10(i) for i in [1, 2, 3]]  # => [11, 12, 13]
    [x for x in [3, 4, 5, 6, 7] if x > 5]   # => [6, 7]

posted on 2017-05-30 23:55  cvn  阅读(196)  评论(0编辑  收藏  举报

导航