def
語句,依次寫出函數名、括號、括號中的參數和冒號:
,而後,在縮進塊中編寫函數體,函數的返回值用return
語句返回。def GetMax(v1, v2):#注意冒號 if v1>v2:#注意冒號 return v1 else:#注意冒號 return v2 print(GetMax(1,2))
pass
語句:>>> def fun():
pass
if age >= 18: pass
TypeError。
可是若是參數類型不對,Python解釋器就沒法幫咱們檢查。def GetMax(v1, v2): if not isinstance(v1, (int, float)): return; if not isinstance(v2, (int, float)): return; if v1>v2: return v1, v1-v2 else: return v2, v2-v1
若是用一個值去接收結果,原來返回值是一個tuple!可是,在語法上,返回一個tuple能夠省略括號,而多個變量能夠同時接收一個tuple,按位置賦給對應的值,因此,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。python
result = GetMax(1, 5) print(result)#(5, 4) max, interval = GetMax(1,5) print(max, interval)#5 4
def power(a, b=2): if not isinstance(a, (int, float)): return; if not isinstance(b, int): return; idx = 1 sum = a; while idx<b: sum = sum*a idx+=1 return sum;
須要注意的是,Python函數在定義的時候,默認參數的值就被計算出來了,須要避免重複使用了同一個對象。以下,由於設置的默認值是引用類型,致使全部的調動設置的默認值都指向了同一個對象。函數
def SetName(map = {}): map["name"] = "test" return map map = SetName() print(map) #{'name': 'test'} map.setdefault("age", 10) map["score"] = 99 print(map) #{'name': 'test', 'age': 10, 'score': 99} print(SetName()) #{'name': 'test', 'age': 10, 'score': 99}這裏的默認值不是咱們想要的{},而是以前return的那個map。
def getSum(*numbers): sum = 0 for v in numbers: sum += v return sum
print(getSum(1, 2, 3)) print(getSum())
#若是已經有一個list或者tuple,要調用一個可變參數怎麼辦
#Python容許你在list或tuple前面加一個號,把list或tuple的元素變成可變參數傳進*
list = [1, 2, 3] print(getSum(*list)) t = (1, 2, 3) print(getSum(*t))
可變參數容許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple。而關鍵字參數容許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict。spa
def person(name, age, **kv): print('name:', name, 'age:', age, 'other:', kv) >>> person('Bob', 35, city='Beijing') name: Bob age: 35 other: {'city': 'Beijing'} >>> person('Adam', 45, gender='M', job='Engineer') name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}
若是要限制關鍵字參數的名字,就能夠用命名關鍵字參數,例如,只接收city
和job
做爲關鍵字參數。這種方式定義的函數以下:code
def person(name, age, *, city, job): print(name, age, city, job) person("mical", 12, city="shenz", job="it") # person("mical", 12, city="shenz") # person("mical", 12, city="shenz", job="it", sex = "man") #確實或傳多了都會報錯
若是函數定義中已經有了一個可變參數,後面跟着的命名關鍵字參數就再也不須要一個特殊分隔符*
了:對象
def person(name, age, *args, city, job): print(name, age, args, city, job) person("mical", 12, 1, 2, 3, 4, city="shenz", job="it")
關鍵字參數也可帶默認值blog
def person(name, age, *args, city, job = "it"): print(name, age, args, city, job) person("mical", 12, 1, 2, 3, 4, city="shenz")