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()fun24、函数属性
向函数添加自定义的属性。>>> def fun(): print fun.param>>> fun.param = 11 # param赋值11>>> fun()115、匿名函数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
新闻热点
疑难解答