提升代碼的可讀性,減小代碼的冗餘,方便調用和修改,組織結構清晰
def funcname(): #def 是關鍵字,後跟函數名(): 子代碼 #函數要執行的代碼 return #return返回值,沒有時默認爲none
def funcname(參數1,參數2): #參數個數能夠爲一個和多個 函數體 return
def func(x,y): res=x+y return res f=func(1,2) print(f)
一)、實際參數:函數
一、按照位置傳遞給相應的參數
def func(x,y): res=x+y return res f=func(1,2) print(f)
二、按照關鍵字傳值,將再也不受位置的限制
def func(x,y): res = x+y return res func(y=2,x=1)
三、按位置傳值和按照關鍵字傳值混用 1)按位置傳值必須在關鍵字傳值的前面 2)對於一個形參只能賦值一次
二)、形式參數:code
一、位置參數:必須傳值的參數 二、默認參數:定義時賦值的參數就是默認參數,默認參數必須放在位置參數的後面,有默認參數時,能夠不傳遞參數 三、*args:動態參數,一個*時能夠隨意傳遞位置參數,打印結果是把參數做爲一個元組輸出
def f1(*a): print(a, type(a)) f1(123, 456, 789, [1, 2, 43]) 打印結果 (123, 456, 789, [1, 2, 43]) <class 'tuple'>
四、動態參數**,傳參時必須key,value的形式傳遞,最後會生成一個字典的形式
def f2(**a): print(a, type(a)) f2(k1=123, k2=456) 打印結果爲 {'k1': 123, 'k2': 456} <class 'dict'>
五、能夠同時接受單個參數和key/value參數
def f3(*a, **aa): #會把全部的位置參數做爲一個元組,key/value參數做爲一個字典 print(a, type(a)) print(aa, type(aa)) f3(11, 22, 33, k1=123, k2=456) 打印結果爲 (11, 22, 33) <class 'tuple'> {'k2': 456, 'k1': 123} <class 'dict'>
六、把列表,元組,字典傳入函數
def f4(*args): print(args, type(args)) li = [11, 22, 33, 44] f4(li, 123) # 直接列表的名字,會把列表當作一整個元素當作函數生成後的元組的一個元素 f4(*li) # 使用*列表,會把列表內的每一個元素當作函數生成後的元組的每一個元素,相似於循環生成元組,元組列表相似 打印結果爲 ([11, 22, 33, 44], 123) <class 'tuple'> (11, 22, 33, 44) <class 'tuple'>
七、把字典傳入函數
def f5(**kwargs): print(kwargs, type(kwargs)) dic = {"k1": 123} f5(**dic) # 將字典傳入到函數,須要使用雙星號(**) 打印結果爲 {'k1': 123} <class 'dict'>
八、混合使用
def f6(x, *args, **kwargs): print(x) print(args) print(kwargs) f6(1, 2, 3, 4, 5, k="a", v="z") 打印結果爲 1 (2, 3, 4, 5) {'v': 'z', 'k': 'a'}
總結:形式參數的傳入順序: 位置參數-----*args-----**kwargs----默認參數class
函數的返回值是return,函數不加return時默認的返回值是None,return能夠返回任意值,也能夠多個值,return後不跟參數默認返回的是None
def func(x,y): print(x,y) res=x+y return res f=func(1,2) #函數遵循先定義後調用原則,函數的調用就是func(1,2) 函數名加(),函數的執行結果,須要在調用時賦值給變量,而後print print(f) 執行結果爲 1 2 #函數執行時內部代碼的執行結果 3 #3即爲函數的執行結果,函數的執行結果是返回給函數自己的