Python 2.7.10 (default, Oct 14 2015, 16:09:02) [GCC 5.2.1 20151010] on linux2 Type "copyright", "credits" or "license()" for more information. >>> def fun1(): return [1,2,3] >>> print(fun1) <function fun1 at 0xb71cfb8c> >>> a=fun1() >>> a [1, 2, 3] >>> def fun2(): return 4,5,6 >>> b=fun2() >>> b (4, 5, 6) >>> def fun3(): print "hello woeld" >>> c=fun3() hello woeld >>> c >>> c >>> print(fun(3)) Traceback (most recent call last): File "<pyshell#17>", line 1, in <module> print(fun(3)) NameError: name 'fun' is not defined >>> type(c) <type 'NoneType'> >>> print(c) None >>> type(c) <type 'NoneType'> >>>
函數的返回值可以是一個列表或一個元組,如果沒有return,那麼仍然會返回一個NONE,類型那個為typenone,
對於全局ii變量,我們在函數中只能進行引用,而不能進行修改
局部在堆棧中分配,
當我們你試圖在函數中修改全局變量的時候,python會發生屏蔽,會在函數中發生屏蔽機制,額外創建一個臨時變量,只能對臨時變量進行修改
但是我們可通過global關鍵子在函數中強制對全局變量進行修改
1 >>> 2 >>> number=5 3 >>> def fun6(): 4 global number 5 number=10 6 return number 7 8 >>> fun6() 9 10 10 >>> print(num) 11 10 12 >>> print(number) 13 10 14 >>>
python函數還可以進行嵌套
>>> >>> def f1(): print("fun1..") def fun2(): print("fun2")函數作用范圍同c/c++ fun2() >>> f1() fun1.. fun2 >>>
函數都嵌套傳參數,對於第一種方法,如果我們只是傳了一個參數,那麼會返回一個函數,表示需要想第二個函數傳參數,
簡單的做法就是直接連續寫兩個括號傳兩個參數
1 >>> def fun1(x): 2 def fun2(y): 3 return x*y 4 return fun2 5 6 >>> fun1() 7 8 Traceback (most recent call last): 9 File "<pyshell#108>", line 1, in <module> 10 fun1() 11 TypeError: fun1() takes exactly 1 argument (0 given) 12 >>> fun1(5) 13 <function fun2 at 0xb71cfb8c> 14 >>> type(fun1(5)) 15 <type 'function'> 16 >>> i=fun1(5) 17 >>> i(10) 18 50 19 >>> fun1(3)(8) 20 24
對於python3.0之前,為了可以在局部對外部變量進行改變,因為list不是在堆棧山申請的,所以我們可以改變外部的list變量
1 >>> def fun5(): 2 x=[5] 3 def fun6(): 4 x[0]*=x[0] 5 return x[0] 6 return fun6() 7 8 >>> fun5() 9 25
3.0之後可以只有 nonlocal
閉包就是內部函數可以使用外部的作用區間(不是全局的)進行引用,那麼這個內部函數就被叫閉包