模塊函數指的是模塊中的函數,模塊函數有三種:python
導入方法主要有三種:函數
import math math.e
alias表示別名.工具
從模塊導入函數.spa
與上一種相似,加上了別名.code
使用關鍵字def定義:對象
def func(): print(1)
docstring就是註釋,描述了函數的功能,使用三個單引號或三個雙引號,能夠用help()獲取函數的docstring.圖片
def func(): ''' func docstring ''' print(1) help(func)
直接使用函數名便可,須要的話要加上參數.rem
func() func(22)
返回值在return裏指定,能夠返回多個值:string
def f(): return 1,2,3,4
至關於返回一個元組.若函數沒有return,則返回None.it
形參就是函數定義時的參數列表裏面的參數,能夠分爲:
def f(x1,x2,x3=3)
其中x1,x2必選形參,x3可選形參.
帶一個星號的形參表示該形參類型爲元組,帶兩個星號的形參表示該參數類型爲字典.
出如今 * 後的參數.
def f(x1,*x2,x3,x4)
x3與x4就是命名關鍵字參數,在調用時必須顯式使用參數名.
python實參能夠分爲位置實參與關鍵字實參.
位置參數就是沒有指定形參名字的實參,每一個實參基於順序關聯到一個形參.
關鍵字參數就是指定了形參名字的實參,用鍵值對的形式指定,能夠不按順序調用.
def f(x1,x2,x3): print(x1,x2,x3) f(1,2,3) f(x3=999,x1=888,x2=999999)
python變量的可見性有三種:全局變量,局部變量,非局部變量.
在函數內的變量爲局部變量,所以,如下代碼會輸出9:
x1 = 8 def f(): x1 = 9 print(x1) f()
若是在x1以前輸出呢?
直接提示沒有定義x1,就是全局變量x1在函數內不可見,但筆者不死心,必定要運行一下.
它說局部變量x1沒有被賦值,注意,是局部變量,所以,這也證實了全局變量在函數內不可見.
若要使全局變量在函數內可見,使用global:
x1 = 8 def f(): global x1 print(x1) x1 = 9 print(x1) f()
global x1表示x1是一個全局變量,注意global x1須要單獨佔一行.
用於嵌套函數中,使用nonlocal聲明,表示內層函數的這個變量是外層函數的.
x1 = 8 def f(): x1 = 9 print(x1) def f1(): nonlocal x1 print(x1) x1 = 10 print(x1) return f1 f() f()()
第一個與第二個9都是f()中的print()輸出的,第三個9是f1()中的print()輸出的.
當實參傳遞給形參時,有兩種傳遞規則,一是值傳遞,而是地址傳遞.
當實參爲不可變對象時,採用值傳遞規則,常見的不可變對象類型包括int,float,str,bool,tuple.
def f(x): x = 1 print(x) x = 3 print('-------int------') f(x) print(x) print() x = 'string' print('-------str------') f(x) print(x) print() x = (3,4,5) print('-------tuple------') f(x) print(x) print() x = 5.799 print('-------float------') f(x) print(x) print()
參數爲可變對象時,採用地址傳遞規則,修改形參的值會同時改變實參的值.常見的可變對象類型包括list,set,dict.
def f(x): if type(x) == list: x = x.reverse() elif isinstance(x,set): x.add(8) else: x['0'] = 3 x = [1,2,3] print('-------list------') print(x) f(x) print(x) print() x = {4,5,6} print('-------set------') print(x) f(x) print(x) print() x = {'a':1,'b':2} print('-------dict------') print(x) f(x) print(x) print()
lambda是一種特殊的自定義函數,使用關鍵字lambda進行定義,是一種匿名函數,函數體通常很短.
以關鍵字lambda開頭,後面是參數列表,參數列表結束後加一個冒號,後面是返回值.
y = lambda x:x*3 z = lambda x,y:x*y
調用能夠經過"函數名"調用,或者配合其餘函數使用.