一:三元計算(三目計算) 二:函數的基本認識 1.函數式編程: - 本質:將N行代碼拿到別處並給他起個別名,以後通過名字就可以找到這行代碼並執行 - 場景:1.代碼重覆執行 2.代碼量特別多超過一屏,可以通過函數進行代碼的分割 2.函數的基本結構 3.函數參數: 定義一個函數:給了函數一個名稱,指定 ...
一:三元計算(三目計算)
if 條件語句的簡寫 v= 前面 if 條件 else 後面 #條件成立得到前面的值,否則得到後面的值
二:函數的基本認識
1.函數式編程:
- 本質:將N行代碼拿到別處並給他起個別名,以後通過名字就可以找到這行代碼並執行
- 場景:1.代碼重覆執行 2.代碼量特別多超過一屏,可以通過函數進行代碼的分割
2.函數的基本結構
#函數的定義 def 函數名(參數): 函數體 函數名() #執行函數
#函數如果不被調用,則內部代碼永遠不會執行
3.函數參數:
定義一個函數:給了函數一個名稱,指定了函數里包含的參數和代碼塊結構
這個函數的基本結構完成以後,可以通過另一個函數調用執行,也可以直接從python命令提示符執行
示例:列印某個列表的元素 def get_list_first_data(aaa): # aaa叫形式參數(形參) v = [11,22,33,44] print(v[aaa]) get_list_first_data(1) # 調用函數時傳遞叫:實際參數(實參)
4.返回值(return)
1.函數沒有返回值時,預設返回None
2.函數執行過程中遇到return時,則終止,下麵代碼永遠不會執行
3.可以返回任意類型
#特殊: def func(): return 1,2,3 result = func() print(result) #返回的元組 (1,2,3)
綜合示例: # 讓用戶輸入一段字元串,計算字元串中有多少A字元的個數。有多少個就在文件a.txt中寫多少個“嘻嘻嘻”。 def get_char_count(data): sum_counter = 0 for i in data: if i == 'A': sum_counter += 1 return sum_counter def write_file(line): if len(line) == 0: return False # 函數執行過程中,一旦遇到return,則停止函數的執行。 with open('a.txt',mode='w',encoding='utf-8') as f: f.write(line) return True content = input('請輸入:') counter = get_char_count(content) write_data = "嘻嘻嘻" * counter status = write_file(write_data) if status: print('寫入成功') else: print('寫入失敗')
三:參數相關
1.位置參數:(調用函數並傳入函數)
2.關鍵字參數:
def func(num1,num2) print(num1,num2) func(num1=1,num2=2) #賦值為關鍵字參數
************註意: 位置參數可以和關鍵字參數混合使用,但位置參數一定要在關鍵字參數前面***********
3.預設參數(預設參數推薦使用不可變類型,慎用可變類型)
def func(a1,a2,a3=1,a4=2) #a3,a4為預設參數 print(a1,a2,a3,a4) func(11,22) #a3和a4 已有預設參數,所以不必再定義參數 func(11,22,a3=10,a4=100) #再次定義參數,覆蓋前面的參數
******當預設參數為可變類型時 (有坑)*******
#註意一 def func(a,b=[]): b.append(a) return b v1 = func(1) v2 = func(2,[11,22]) v3 = func(3) print(v1,v2,v3) #[1,3] [11,22,3] [1,3] #註意二: def func(a,b=[]): b.append(a) print(b) func(1) #[1] func(2,[11,22]) #[11,22,2] func(3) #[1,3]
4.萬能參數(打散)
- *args:可以接收任意個數的位置參數,並將其轉換成元組
- 調用函數無*
def func(*args): print(args) func(1,2,3) #列印func後內容,裡面可以是列表集合等
- 調用函數有*
def func(*args): print(args) func(*(1,2,3,4)) # 不管裡面的內容是列表/集合都列印成元組,當裡面內容為字典時,列印內容為字典的key(鍵)
- **kwargs :可以接收任意個數的關鍵字參數,並將其轉換成字典
- 調用函數無**
def func(**kwages): print(kwages) func(k1=1,k2=2) #{'k1': 1, 'k2': 2}
- 調用函數有**
def func(**kwages): print(kwages) func(**{'k1':1,'k2':2}) #後面內容只能是字典
四:作用域&函數嵌套
1.python中
- py文件:全局作用域
- 函數 : 局部作用域 , 一個函數就是一個作用域
- 作用域查找規則:優先在自己的作用域查找數據,自己沒有就去上一級查找,然後上上級,直到全局,全局沒有就報錯
#示例1: x = 10 def func(): x = 8 print(x) # 8 def x1(): print(x) # 9 x = 9 x1() x = 10 print(x) # 10 func() #示例2: x = 10 def func(): x = 8 print(x) # 8 def x1(): print(x) # 8 x1() x = 9 x1() # 9 x = 10 print(x) # 10 func()
2.子作用域中只能找到父級中的值,預設無法重新為父級中的變數進行賦值..(global和nonlocal可以強製做)
- global :找到並改變全局中的變數
name = "老男孩" def func(): name = 'alex' def inner(): global name name = 999 inner() print(name) # 'alex' func() print(name) # 999
- nonlocal : 找到並改變上一級中的變數
name = "老男孩" def func(): name = 'alex' def inner(): nonlocal name name = 999 inner() print(name) # 999 func() print(name) # "老男孩"
*****要求:全局變數以後必須大寫*****
五:函數的其他應用
1.函數名當做變數來使用
#註意:不帶括弧指向的是記憶體地址,帶括弧是調用函數 def func(): return 123 func_list1 = [func,func,func] func_list2 = [func(),func(),func()] print(func_list1) # 列印的是記憶體地址 print(func_list2) #列印的是 : [123,123,123] 調用函數 info = { 'k1':func, #記憶體地址 'k2':func(), # 調用函數 } print(info)
2.函數可以當做參數進行傳遞
結果 : 666 none none
3.函數可以作為返回值
結果是 : 0 1 4
4.閉包
概念:為函數創建一塊區域併為其維護自己的數據,以後執行時方便調用
5.遞歸 : 函數自己調自己
#遞歸列印斐波那契數 def func(a,b): # 1 # 1 # 2 # 3 # 5 print(b) #[0,1,1,2,3,5,8,11...] func(b,a+b) func(0,1)
六:lambda 表達式(也叫匿名函數)
用於表示簡單的函數
***註意:列表所有方法的返回值基本都為none ,字元串所有方法的返回值基本都會返回新值***