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
新聞熱點
疑難解答