python自定義函數def的應用詳解
這里是三歲,來和大家嘮嘮自定義函數,這一個神奇的東西,帶大家白話玩轉自定義函數
自定義函數,編程里面的精髓!
def
自定義函數的必要函數:def
使用方法:
def 函數名(參數1,參數2,參數…): 函數體(語句塊) return [返回值]
注意事項
函數名的命名規則:和標識符的基本規則是一樣的,基本上由小寫字母和數字下劃線構成 def 是關鍵字,不能夠修改(define的簡稱) 函數后面一定要加括號(英文狀態的)括號里面是否加參數看具體情況 括號后面的冒號不能夠忘記 函數體必須加上縮進(建議4個空格)案例分析
def hello(): #自定義hello()函數 print(’hello world !’) hello() # 調用函數hello world ! # 輸出結果
該處是定義了一個輸出‘hello world !’的函數,只要調用hello()即可實現對函數體的調用。
來個復雜點的練練手,感受一下磨刀霍霍向木蘭
def add(x, y): # 新建add() return x+yadd(3, 7) # 調用add()運行ing輸出none
啊累累!啊累累!啊累累!我寫了個bug還是寫了一個寂寞?
哦哦哦!我建了一個房子沒有留門(淚目)沒有輸出怎么能夠有結果?
print(add(3, 7))print(add(’hello ’, ’world’))#運行結果10hello world
作死挑戰
記得每一次調用函數都加了 ()那么不加括號的是什么東西?
難道就是傳說中的寫了個寂寞還是什么東西?
讓我們一起來作死看看
print(hello) # 調用helloprint(add) # 調用add結果:<function hello at 0x0000020213737048><function add at 0x0000020213737678>
哇哦!他真的可以有經過查詢他顯示的是這個函數的內存地址,而不是這個函數的結果什么的,函數并沒有被調用
溫馨提示 調用函數一定要在函數名后面加上括號函數參數
自定義函數的參數,分為幾大類:
位置傳參 關鍵字傳參 必選參數 默認參數 可變參數 ……形參與實參
白話時間:(個人理解基礎的表達,如有不同之處請指教提出)形參:就是參數名稱,一個沒有被賦值的變量名,不會實際的參與函數的運算,而是起到一個類似占位符的作用。
實參:實際參加函數運算的值,已經賦值給了相對應的變量名。
ps:以上基于個人理解,本非準確表達,在個人理解基礎上的白話表達
位置參數
位置參數就是按照參數的位置進行表達和相對應的
參數寫的位置決定了它所對應的值,這種寫法如果有多個參數必須注意,寫錯位置整個函數有可能會報錯,整個程序有可能會奔潰!!!
關鍵字參數
關鍵字參數雖然寫法較為麻煩但是很好的解決了多個參數因為位置錯誤導致的函數報錯及程序不穩定問題
通過定義的參數名稱來確定對應參數的值,可以有效的解決問題
例:print() 里面除了經常用的輸出內容還有end參數end參數默認是‘n’,如果通過關鍵字參數進行重新定義就可以改變
for i in range(10): print(i)
結果:0123456789
for i in range(10): print(i,end= ’ ’)
結果:0 1 2 3 4 5 6 7 8 9
默認參數
在函數涉及過程中很多參數不一定所有人一定用的上,可以設置一個默認值,這樣子需要的人可以DIY,沒有需要的就采用默認參數比如print()中 end 就是默認參數默認值為‘n’
def add(x=0, y=0): return x+yprint(add())結果:0
必選參數
必選參數就是必須要寫的參數,這個與默認參數相對,不是默認參數就是必選參數,如果沒有對必選參數進行導入就會引發報錯,導致系統函數奔潰
def add(x, y): # 新建add() return x+y print(add())Traceback (most recent call last): print(add())TypeError: add() missing 2 required positional arguments: ’x’ and ’y’
這個就是缺少x,y參數導致的異常。所有在使用函數及自定義時要注意必選參數的設置
可變參數
可變參數這個名字比較高大上,但是實際上很簡單比如要寫一個多個數字相加的函數怎么辦呢?直接寫?
def add(x, y): # 新建add() return x+y
那如果是3個值呢?會應為多了一個參數報錯那么就改成三個參數?
def add(x, y, z): # 新建add() return x+y+z
問題來了如果是2個值那么就會報錯缺一個參數,如果是4個及以上就會報錯,多了參數啊啊啊啊啊啊啊啊啊!只是什么東西,難度python一世英名就毀在這里了嘛?
不不不!神奇的事情發生了
def 函數名(參數1,參數2,參數…,*可變參數): 函數體(語句塊) 返回值
emmm,奇怪的知識增長了
def add(x, *y): for num in y: x += num return xprint(add(2,3,4))結果9
ps:*y 所產生的是一個tuple(元組)我們需要先逐個遍歷才能夠拿到每一個的結果。
可變關鍵字參數
如果有多個關鍵字參數或者字典的導入使用 *參數名 無法滿足怎么辦難道python一世英名就這樣子栽了嗎?不不不一個 * 不行那么就來兩個 **
def personinfo(name, age, **message): print(f’name:{name},age:{age},{message}’)personinfo(’張三’, 23, message = {’city’:’北京’, ’heigh’: 180})結果:name:張三,age:23,{’message’: {’city’: ’北京’, ’heigh’: 180}}
在里面得到的結果是一個字典,看例子可以知道得到了一個鑲嵌的字典
參數問題解答參數的書寫要求:① 必選參數寫在最前面②默認參數寫在必選參數后面③默認參數后面是關鍵字參數④關鍵字后面是*函數名(可變參數)⑤后面跟著可變關鍵字參數(**函數名)
ps:按照該順序走,沒有的可以不寫
def a(x , y=0, *z, **i): print(f’x:{x};y:{y};z:{z};i’)
以上就是舉例子,命名方式不符合規定,不要借鑒不安以上方式可能出現各種奇怪的情況
到此這篇關于python自定義函數def的應用詳解的文章就介紹到這了,更多相關python自定義函數def內容請搜索好吧啦網以前的文章或繼續瀏覽下面的相關文章希望大家以后多多支持好吧啦網!
相關文章: