py自定义函数
一,函數重命名機制(None關鍵字)
# Fibonacci 數列 def fib(n):a, b = 0, 1 # a, b 可以同時賦值while a < n: # a - nprint(a, end=' ')a, b = b, a + bprint()fib(10) # 0 1 1 2 3 5 8 print(fib) # <function fib at 0x0000020856289048> 是個地址值# py函數的重命名機制 ''' 函數定義會把函數名引入當前的符號表中。函數名稱的值具有解釋器將其識別為用戶定義函數的類型。這個值可以分配給另一個名稱,該名稱也可以作為一個函數使用。 ''' f = fibprint(f(10)) ''' 0 1 1 2 3 5 8 None 無返回值的過程(None是內置名稱), 沒有return關鍵字的不叫函數,只得說過程 '''# return 關鍵字 return Fibonacci數列 def fib2(n):result = []a, b = 0, 1while a < n:result.append(a)a, b = b, a + breturn resultf2 = fib2 print('=' * 20)x = f2(10) # 接收Fibonacci的列表 print(x) # [0, 1, 1, 2, 3, 5, 8]二, 參數的默認值, 默認值的共享
# 定義默認的參數 和 不變的參數 def show(name, gender='男', age=18):print('introduction: name: ',name, 'gender: ', gender, 'age: ', age)show('abc') # 不變的參數 introduction: name: abc gender: 男 age: 18 show('abc', gender='女', age='10') # 還可以再賦值 introduction: name: abc gender: 女 age: 10 show('abc', '女', 19) # introduction: name: abc gender: 女 age: 19 ''' 總結:1,函數調用的參數要一一對應2,沒有默認值的參數一定要傳值,有默認值的可以不給,算是一種重載的方式把3,默認值的參數有兩種賦值方式:a, key = vale賦值b, 直接給value'''# 關于默認值 i = 5 def mySilence(arg = i): print(arg) i = 6 mySilence() # 5 默認值就是5了,改變了i,沒改變arg# 共享默認值的問題 def myList(a, L=[]):# 返回一個列表L.append(a)return Lprint(myList(1)) print(myList(2)) print(myList(3)) ''' [1] [1, 2] [1, 2, 3] '''# 解決共享的問題 def myListUpgrade(a,L=None): # 把默認值None 判斷,再創建一個if L == None: L = []L.append(a)return Lprint(myListUpgrade(1)) print(myListUpgrade(2)) ''' [1] [2] '''# 用*(多個參數) **(字典)def myArgs(kind, *argments, **keywords):print('kind: ', kind)for arg in argments:print(arg)print('-' * 20)for kw in keywords: print(kw, ' : ', keywords[kw])# myArgs 函數 d = {'key1': 'v1','key2': 'v2','key3': 'v3' } myArgs('a kind', 'abc', 'bcd', **d) # ** 是字典集合''' kind: a kind abc bcd -------------------- key1 : v1 key2 : v2 key3 : v3 '''三,解包參數列表
# 解包參數列表 x = [0, 10] # r = range(x) TypeError: 'list' object cannot be interpreted as an integer r = range(*x) # 用 * 代表多個參數 print(r) # range(0, 10) print(list(r)) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]def showInfo(name, gender, age):print(name, gender, age)d = {'name': 'abc','gender': 'female','age': 19 }showInfo(**d) # 用** 表示字典參數 # abc female 19三,lambda表達式
def make_incrementor(n):return lambda x: x + n# 讓此表達式從10開始 up = make_incrementor(10) print(up(1)) # 傳入n 結果從10 加起print(up(up(100))) # 100 + 10 + 10# lambda傳遞一個小函數作為參數 def test_lambda():pairs = [(1, 'one'), (4, 'two'), (3, 'three'), (2, 'four')]pairs.sort(key = lambda pair : pair[0]) # 按數字升序print(pairs) test_lambda() ''' [(1, 'one'), (2, 'four'), (3, 'three'), (4, 'two')] '''寫了函數后,終于能拿出完整的代碼了…
總結
- 上一篇: 移动手机组态软件UI设计思路探讨
- 下一篇: 安装ik分词器