Python 函数

来源:互联网 发布:linux 平台 编辑:程序博客网 时间:2024/06/03 18:35

Python 函数

首先申明下,本文为笔者学习《Python学习手册》的笔记,并加入笔者自己的理解和归纳总结。

1、def语句

def语句将创建一个函数对象并将其赋值给一个变量名。
def <name>(arg1, arg2, ... argN)      # 参数个数可以是0到任意数量    <statements>    return <value>                    # return是可选的,如果没有,函数返回None
定义一个相乘的函数。
>>> def multiply(x, y):    return x * y                      # return用于函数返回值>>> multiply(3, 4)12>>> multiply("Hello", 3)              # 参数类型的不同,乘法的实现也不同'HelloHelloHello'

2、函数参数

(1) 参数和共享引用。
不可变参数传递值,可变参数传递引用。

>>> def fun(a, b):    a = 11    b[0] = "welcome">>> x = 13>>> y = ["hello", "world"]>>> fun(x, y)                         # 参数x是整型,y是列表>>> x, y(13, ['welcome', 'world'])
(2) 参数匹配。
>>> def fun(name, age):    print "%s is %d" % (name, age)>>> fun("Mike", 18)                   # 位置匹配Mike is 18>>> fun(name="Jack", age=20)          # 名称匹配Jack is 20
混合匹配中位置匹配必须在从左往右,之后进行名称匹配。
>>> fun("Lily", age=20)               # 混合匹配Lily is 20>>> fun(name="LiLy", 20)              # 匹配错误SyntaxError: non-keyword arg after keyword arg
(3) 默认参数。
默认参数允许创建函数可选的参数,如果没有传入值的话,在函数运行时,使用默认值。

>>> def fun(name, age=18, addr="ShangHai"):    print "%s is %d at %s" % (name, age, addr)>>> fun("Mike")                       # 指定name,age和addr使用默认值Mike is 18 at ShangHai>>> fun("Jack", 20)                   # 指定name和age,addr使用默认值Jack is 20 at ShangHai>>> fun("Lily", 22, "GuangZhou")      # 不使用默认值Lily is 22 at GuangZhou>>> fun("Lily", addr="ShengZhen")     # 指定name和addr,age使用默认值Lily is 18 at ShengZhen
(4) 参数匹配扩展。
符号(*)匹配一个元组,符号(**)匹配一个字典。

>>> def fun(*args):                   # 定义参数是一个元组    print args>>> fun(1)(1,)>>> fun(1, 2, 3, 4)(1, 2, 3, 4)>>> def fun(**args):                  # 定义参数是一个字典    print args>>> fun(name="Mike", age=19){'age': 19, 'name': 'Mike'}
符号(*)和符号(**)也用来解包参数。
>>> def fun(a, b, c):    print a, b, c>>> L = [1, 2, 3]>>> fun(*L)                           # (*)用来解包列表1 2 3>>> def fun(name, age, addr):    print "%s is %d at %s" % (name, age, addr)>>> D = {"name":"Mike", "age":18, "addr":"ShangHai"}>>> fun(**D)                          # (**)用来解包字典Mike is 18 at ShangHai
(5) apply内置函数用来调用函数。
>>> pargs = (1, 2)>>> kpargs = {"a":3, "b":4}>>> def fun(*pargs, **kpargs):    print pargs, kpargs>>> apply(fun, pargs, kpargs)(1, 2) {'a': 3, 'b': 4}

3、函数间接调用

函数可以作为参数传递。
>>> def fun1():    def fun2():                       # 在方法fun1内定义一个方法fun2        print "fun2"    return fun2                       # 把方法fun2作为值返回>>> f = fun1()>>> f()fun2

4、函数属性

向函数添加自定义的属性。
>>> def fun():    print fun.param>>> fun.param = 11                    # param赋值11>>> fun()11

5、匿名函数lambda

lambda的主体是一个表达式,返回表达式的值。
>>> f = (lambda a, b, c: a + b + c)   # lambda定义了一个三个参数的方法>>> f(1, 2, 3)6>>> f = lambda x: (lambda y: y ** x)  # lambda方法返回一个方法>>> X = f(2)                          # X = lambda y : y ** 2>>> X(3), X(4)(9, 16)>>> Y = f(3)                          # Y = lambda y : y ** 3>>> Y(2), Y(3)(8, 27)

6、序列中映射函数map

>>> def fun(a, b):    return a + b>>> L1 = [1, 2, 3, 4]>>> L2 = [4, 5, 6, 7]>>> map(fun, L1, L2)                  # 把L1和L2的值作为参数调用fun[5, 7, 9, 11]

7、filter和reduce

filter用于过滤元素。
>>> L = [1, 2, 3, 4]>>> filter((lambda x: x > 2), L)      # 提取L中大于2的值[3, 4]
reduce用于对元素进行统一操作。
>>> L = [1, 2, 3, 4]>>> reduce((lambda x, y: x + y), L)   # 把列表的值相加10

0 0