- 定義函數(shù)
- 在 JavaScript 中 定義函數(shù)使用關(guān)鍵字
functionfunction my_ads (x){ if(x > 0 ){ return x }else{ return -x } - 在 Python 中 定義函數(shù)使用關(guān)鍵字
defdef my_ads (x , y = 0 ) { # 默認(rèn)參數(shù) 同 JavaScript ES6中的默認(rèn)參數(shù) if not isinstance(x, (int, float)): # 規(guī)定必須為整數(shù)或者浮點(diǎn)數(shù) raise TypeError('bad operand type') # 拋出異常 if x > 0 : pass # 占位符 不能為空如果沒想好怎么寫,必須寫個占位符來讓代碼繼續(xù)執(zhí)行下去 else : return -x , y # Python 中 允許返回多個值, 返回類型為 tuple # a,b = (1,2) # print(a , b) # 1 2 # 在 Python 中 多個變量可以同時接收一個tuple,按位置賦給對應(yīng)的值 , 這點(diǎn)同 JavaScript 中的 ES6 結(jié)構(gòu)賦值類似 }
- 在 JavaScript 中 定義函數(shù)使用關(guān)鍵字
- Python 中 函數(shù)的參數(shù) ( Python 中的 函數(shù)的參數(shù)與 JavaScript 區(qū)別交大,這里只介紹 Python的函數(shù)參數(shù))
- 可變參數(shù) ( 允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple )
def carl (numbers) : sum = 0 for n in numbers : sum = sum + n * n return sum carl([1,2,3]) # 傳遞一個list 返回為 14 carl((1,2,3)) # 傳遞一個tuple 返回為 14- 我們把
carl稍加改動讓 參數(shù)numbers變成一個可變參數(shù) 如下def carl (*numbers) : sum = 0 for n in numbers : sum = sum + n * n return sum carl(1,2,3) # 14 參數(shù)前面加了一個*號。在函數(shù)內(nèi)部,參數(shù)numbers接收到的是一個tuple, carl() # 0 因此,函數(shù)代碼完全不變。但是,調(diào)用該函數(shù)時,可以傳入任意個參數(shù) - 同時我們在修改傳入的參數(shù) 如下
def carl (*numbers) : sum = 0 for n in numbers : sum = sum + n * n return sum list = [1,2,3] tuple = (1,2,3) #------------------分割線------------------ carl(list) # 報錯 carl(tuple) # 報錯 carl(*list) # 14 carl(*tuple) # 14 # 下面我們觀察一下 list 與 tuple 加上關(guān)鍵字 * print(*list) # 1 2 3 print(list) # [1,2,3] print(*tuple) # 1 2 3 print(tuple) # (1,2,3)- 由此我們得知 關(guān)鍵字
*放在 變量 list 或 tuple 前, 實際是把所有元素作為可變參數(shù)傳遞進(jìn)去 - 因此我們函數(shù)
carl又剛好接收的是可變參數(shù),所以我們的必須吧 list 與 tuple 轉(zhuǎn)換成可變參數(shù)傳入函數(shù)中
- 由此我們得知 關(guān)鍵字
- 我們把
- 關(guān)鍵字參數(shù) ( 允許你傳入0個或任意個含參數(shù)名的參數(shù),這些關(guān)鍵字參數(shù)在函數(shù)內(nèi)部自動組裝為一個dict )
def person(name,age,**km) : print('name:',name,'age:',age,'other:',km) person('Michael' , 30) # name: Michael age: 30 other:{} person('Michael' , 30 , city='BeiJing' , job='Engineer') # name: Michael age: 30 other:{ 'city':'BeiJing' , 'job':'Engineer'}- 我們在定義一個dict 來傳遞參數(shù)
def person(name,age,**km) : print('name:',name,'age:',age,'other:',km) extr = {'city': 'Beijing', 'job': 'Engineer'} person('Jack',24,extr ) # 報錯 person('Jack',24, **extr ) # name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}-
**extr表示吧extr這個dict的所有key-value用關(guān)機(jī)子傳輸傳入函數(shù)的**km參數(shù) 這里個km活的是 dict 是extra的拷貝,對km的改動不會影響extr - 同可變參數(shù)中的關(guān)鍵字
*同理,只是關(guān)鍵字*拆分的是 list 與 tuple 而**拆分的是 dict
-
- 我們在定義一個dict 來傳遞參數(shù)
- 命名關(guān)鍵字參數(shù) (限制關(guān)鍵字參數(shù)的名字)
def person(name,age,*,city,job): print(name,age,city,job) person('LiLei',80,city='BeiJing',job='IT') # LiLei 80 BeiJing IT- 和關(guān)鍵字參數(shù)
**km不同 , 命名關(guān)機(jī)子參數(shù)需要一個特殊分符號*,*后面的參數(shù)被視為命名關(guān)機(jī)子參數(shù) - 如果函數(shù)定義中已經(jīng)有了一個可變參數(shù) , 后面跟著命名關(guān)鍵字參數(shù)就不在需要一個特殊分符號
*了。如下
def person (name ,age , *args , city='BeiJing' , job) : print(name,age,args,city,job) person ('LingDa' , 28, ('參數(shù)1', '參數(shù)2' , '參數(shù)3') , 'ShangHai' , 'IT') # 報錯 命名關(guān)鍵字參數(shù)必須傳入?yún)?shù)名,這和位置參數(shù)不同。如果沒有傳入?yún)?shù)名,調(diào)用將報錯 person ('LingDa' , 28, ('參數(shù)1', '參數(shù)2' , '參數(shù)3') , city='ShangHai' , job = 'IT') # LingDa 28 (('參數(shù)1', '參數(shù)2', '參數(shù)3'),) ShangHai IT person ('LingDa' , 28, ('參數(shù)1', '參數(shù)2' , '參數(shù)3') , job = 'IT') # LingDa 28 (('參數(shù)1', '參數(shù)2', '參數(shù)3'),) BeiJing IT - 和關(guān)鍵字參數(shù)
- 可變參數(shù) ( 允許你傳入0個或任意個參數(shù),這些可變參數(shù)在函數(shù)調(diào)用時自動組裝為一個tuple )
JavaScript開發(fā)者學(xué)習(xí)Python: 1.2 函數(shù)
最后編輯于 :
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。