python 函数部分
生活随笔
收集整理的這篇文章主要介紹了
python 函数部分
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
函數def fun(形參): 定義函數
fun(實參) 執行函數
return 函數的返回值,遇到return不執行下面的代碼,無return和直接寫return返回的是None,返回值有多個時會放到元組里
'''
函數的注釋 標明函數的作用以及每個值得意義 使用 函數名.__doc__ 即可查詢該函數得注釋值
'''
函數名 就是變量的功能加上()就能執行(也叫第一對象)
1、可以相互賦值 def fun()print('123qwe')
f = fun
f() 2、可以當成函數的參數
def fun():print('123') def fun2(argc):argc()print('111') fun2(fun) 3、可以當成容器類數據的參數 def fun():print('123') def fun2():print('111') def fun3():print('3333333') list1 = [fun, fun2, fun3] for i in list1:i() 4、可以當成函數的返回值 def fun():print('123') def fun2(argv): print('111')return argv #函數作為返回值 f = fun2(fun) #將函數名作為參數 f() 說明:此時的argv就是fun就是f f()實際上執行的是fun() 所以輸出為:111 123 函數的傳參 從實參角度傳參順序: 位置參數=》關鍵字參數 def func1(x, y, z):print(x, y, z) func1(1, 2, 3) #位置參數 必須一一對應 func1(x=1, y=2, z=3) #關鍵字參數可不分順序 返回大數 三元運算符def compare(a, b):return a if a > b else b 或 print(a if a > b else b) 混合參數, 關鍵字參數必須在位置參數的后面。def fun(argv1, argv2, argv3):print(argv1)print(argv2)print(argv3) fun(1, 2, argv3=3) #混合參數中位置參數一一對應,關鍵字參數必須在位置參數最后 從形參角度傳參順序: 位置參數=》*args=》默認參數=》**kwargs 1、位置參數 與實參角度一樣,必須一一對應,位置參數必須傳值 2、默認參數 默認參數必須在位置參數后面, 默認參數是個可變數據類型當函數中有默認參數,那么實參使用默認的,如果寫就覆蓋默認參數。使用方法為sex = 'hhhh'(關鍵字傳參法) def register(name, sex='男'):with open('register.txt', encoding='utf-8',mode='a') as fd:fd.write('{},{}\n'.format(name, sex)) while True:print('q exit')name = input('name=')sex = input('sex=')if name.upper() == 'Q':breakregister(name) # 不傳實參時 形參會自動使用默認參數 --------------------------------、 def default_param(a, l = []) # 默認參數是可變數據類型 l.append(a)print(l) default_param('hello') default_param('world') 動態參數:fun(*args, **kwargs)萬能參實 當函數的傳的參數不定時使用。*args接收的是位置參數,包括空值也不會報錯,并存放到元組。 **kwargs接收的是關鍵字參數,并存放到字典 def fun(*args, **kwargs):print(args) #輸出類型為元組(針對所有位置參數)print(kwargs) #輸出字典 fun(1, 2, 3, 4, 5, 6, 7,'alex', '老男孩', a='w', b='q', c='323') 輸出: (1, 2, 3, 4, 5, 6, 7, 'alex', '老男孩') {'a': 'w', 'b': 'q', 'c': '323'} 打散、聚合功能,*將形參無論什么格式以單個元素放入元組中。 **將形參聚合到字典中 (不會看這個) def fun(*args, **kwargs): #形參加*表示將傳參聚合并放入一個元組中, 加**表示聚合到字典中print(args)print(kwargs) list1 = [1, 2, 3, 4] tupe1 = (1, 2, 3, 4) list2 = ['alex', 'wuser', 4] dic = {'qq':1, 'er':'wwe'} fun(list1, *tupe1, *list2, cc = 4, **dic) #實參加 * 表示將位置參數迭代打散傳入,作用域為 str tuple set list ** 表示將字典和關鍵字參數傳入 輸出: ([1, 2, 3, 4], 1, 2, 3, 4, 'alex', 'wuser', 4) {'cc': 4, 'qq': 1, 'er': 'wwe'} 將dic 以*dic打散為實參傳入 形參接受 到的是dic的key值 實參傳入的字典key不能使用純數字,因為傳入的參數是當作變量使用的python的名稱空間 全局名命空間 臨時名稱空間 內置名稱空間 運行py代碼時,遇到一個變量時python會開辟一段空間,存的是 變量和值的指針的關系,如name與alix的id的關系,當print(name)時,會先找name然后再找對應關系,找到對應指針后重內存中找到alix并打印。 遇到函數時只是將函數的名字記錄到內存空間,其內部如何根本不關心,在函數調用時,python會開辟一段空間將記錄函數內部的變量和對應值指針的關系記錄,函數中的變量只能在函數內部使用,隨著函數結束這塊內存也會消失。 代碼的開始 創建的存儲‘變量與值的關系’的空間叫全局名命空間(全局名命空間); 在函數的運行中開辟的臨時的空間叫做局部名命空間(臨時名稱空間) 系統函數的是 內置名稱空間 加載順序 :內置名稱空間-》全局名稱空間-》局部名稱空間 取值順序: 局部名稱空間-》全局名稱空間-》內置名稱空間 作用域:全局作用域:全局名稱空間 內置名稱空間局部作用域:臨時名稱空間關鍵字: 注意如果不調用該函數,即使使用了global和nonlocal修飾 也不會起作用 #global 在任何作用域 改變一個全局變量 ,如global 修飾的變量名不存在 相當于新建一個全局變量 name = 'hello' def fun():global name 使用關鍵字后,調用函數后name變為全局變量name = 'abc' fun() print(name) 輸出: abc #nonlocal 不能修改全局變量;只能在局部作用域中使用nonlocal,只改變當前作用域的變量,如過當前找不到就會像上層函數找,如果每層都找不到會報錯。用的少 當py文件特別大時在嵌套過多時用def fun():name = '123'print('qq%s'% name)def fun2():nonlocal namename = 'abc'print(name)fun2()print(name) fun() 輸出: qq123 abc abc -----------------a = 1 def fun_1():a = 2def fun_2():global aa = 3def fun_3():a = 4print(a)print(a)fun_3()print(a)print(a)fun_2()print(a) print(a) fun_1() print(a) 輸出:1 2 3 4 3 3 1
def fun():print('123') def fun2(argc):argc()print('111') fun2(fun) 3、可以當成容器類數據的參數 def fun():print('123') def fun2():print('111') def fun3():print('3333333') list1 = [fun, fun2, fun3] for i in list1:i() 4、可以當成函數的返回值 def fun():print('123') def fun2(argv): print('111')return argv #函數作為返回值 f = fun2(fun) #將函數名作為參數 f() 說明:此時的argv就是fun就是f f()實際上執行的是fun() 所以輸出為:111 123 函數的傳參 從實參角度傳參順序: 位置參數=》關鍵字參數 def func1(x, y, z):print(x, y, z) func1(1, 2, 3) #位置參數 必須一一對應 func1(x=1, y=2, z=3) #關鍵字參數可不分順序 返回大數 三元運算符def compare(a, b):return a if a > b else b 或 print(a if a > b else b) 混合參數, 關鍵字參數必須在位置參數的后面。def fun(argv1, argv2, argv3):print(argv1)print(argv2)print(argv3) fun(1, 2, argv3=3) #混合參數中位置參數一一對應,關鍵字參數必須在位置參數最后 從形參角度傳參順序: 位置參數=》*args=》默認參數=》**kwargs 1、位置參數 與實參角度一樣,必須一一對應,位置參數必須傳值 2、默認參數 默認參數必須在位置參數后面, 默認參數是個可變數據類型當函數中有默認參數,那么實參使用默認的,如果寫就覆蓋默認參數。使用方法為sex = 'hhhh'(關鍵字傳參法) def register(name, sex='男'):with open('register.txt', encoding='utf-8',mode='a') as fd:fd.write('{},{}\n'.format(name, sex)) while True:print('q exit')name = input('name=')sex = input('sex=')if name.upper() == 'Q':breakregister(name) # 不傳實參時 形參會自動使用默認參數 --------------------------------、 def default_param(a, l = []) # 默認參數是可變數據類型 l.append(a)print(l) default_param('hello') default_param('world') 動態參數:fun(*args, **kwargs)萬能參實 當函數的傳的參數不定時使用。*args接收的是位置參數,包括空值也不會報錯,并存放到元組。 **kwargs接收的是關鍵字參數,并存放到字典 def fun(*args, **kwargs):print(args) #輸出類型為元組(針對所有位置參數)print(kwargs) #輸出字典 fun(1, 2, 3, 4, 5, 6, 7,'alex', '老男孩', a='w', b='q', c='323') 輸出: (1, 2, 3, 4, 5, 6, 7, 'alex', '老男孩') {'a': 'w', 'b': 'q', 'c': '323'} 打散、聚合功能,*將形參無論什么格式以單個元素放入元組中。 **將形參聚合到字典中 (不會看這個) def fun(*args, **kwargs): #形參加*表示將傳參聚合并放入一個元組中, 加**表示聚合到字典中print(args)print(kwargs) list1 = [1, 2, 3, 4] tupe1 = (1, 2, 3, 4) list2 = ['alex', 'wuser', 4] dic = {'qq':1, 'er':'wwe'} fun(list1, *tupe1, *list2, cc = 4, **dic) #實參加 * 表示將位置參數迭代打散傳入,作用域為 str tuple set list ** 表示將字典和關鍵字參數傳入 輸出: ([1, 2, 3, 4], 1, 2, 3, 4, 'alex', 'wuser', 4) {'cc': 4, 'qq': 1, 'er': 'wwe'} 將dic 以*dic打散為實參傳入 形參接受 到的是dic的key值 實參傳入的字典key不能使用純數字,因為傳入的參數是當作變量使用的python的名稱空間 全局名命空間 臨時名稱空間 內置名稱空間 運行py代碼時,遇到一個變量時python會開辟一段空間,存的是 變量和值的指針的關系,如name與alix的id的關系,當print(name)時,會先找name然后再找對應關系,找到對應指針后重內存中找到alix并打印。 遇到函數時只是將函數的名字記錄到內存空間,其內部如何根本不關心,在函數調用時,python會開辟一段空間將記錄函數內部的變量和對應值指針的關系記錄,函數中的變量只能在函數內部使用,隨著函數結束這塊內存也會消失。 代碼的開始 創建的存儲‘變量與值的關系’的空間叫全局名命空間(全局名命空間); 在函數的運行中開辟的臨時的空間叫做局部名命空間(臨時名稱空間) 系統函數的是 內置名稱空間 加載順序 :內置名稱空間-》全局名稱空間-》局部名稱空間 取值順序: 局部名稱空間-》全局名稱空間-》內置名稱空間 作用域:全局作用域:全局名稱空間 內置名稱空間局部作用域:臨時名稱空間關鍵字: 注意如果不調用該函數,即使使用了global和nonlocal修飾 也不會起作用 #global 在任何作用域 改變一個全局變量 ,如global 修飾的變量名不存在 相當于新建一個全局變量 name = 'hello' def fun():global name 使用關鍵字后,調用函數后name變為全局變量name = 'abc' fun() print(name) 輸出: abc #nonlocal 不能修改全局變量;只能在局部作用域中使用nonlocal,只改變當前作用域的變量,如過當前找不到就會像上層函數找,如果每層都找不到會報錯。用的少 當py文件特別大時在嵌套過多時用def fun():name = '123'print('qq%s'% name)def fun2():nonlocal namename = 'abc'print(name)fun2()print(name) fun() 輸出: qq123 abc abc -----------------a = 1 def fun_1():a = 2def fun_2():global aa = 3def fun_3():a = 4print(a)print(a)fun_3()print(a)print(a)fun_2()print(a) print(a) fun_1() print(a) 輸出:1 2 3 4 3 3 1
?
轉載于:https://www.cnblogs.com/Mr-wangxd/p/9449986.html
總結
以上是生活随笔為你收集整理的python 函数部分的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Solr字段类型field type的定
- 下一篇: python——模块1、模块的分类