尋夢新聞LINE@每日推播熱門推薦文章,趣聞不漏接❤️
什麼是函數和為什麼要用函數?
函數是組織好的,可重復使用的,用來做到單一,或相關聯功能的代碼段。函數能提高應用的模塊性,和代碼的重復利用率。已經知道Python提供了許多內建函數,比如print()。但你也可以自己創建函數,這被叫做用戶自定義函數。
如果不用函數,會怎麼樣?
如果沒有函數,代碼就會從上往下執行全部執行。
函數沒有調用的時候,它不會自己執行的。
比如你去購物網站買東西,網站沒有用函數。你打開他們的首頁,然後後台的代碼從上往下執行。一個項目中有多少功能,多少代碼量。當打開首頁需要手機費5分鐘,搜尋商品又要花費5分鐘,你以後肯定不去這個網站購物了。本來網站首頁只需要調用一個函數就可以了,搜尋商品頁面也是一個函數。這樣兩個頁面前後打開加起來也就幾秒的事。定義一個函數
你可以定義一個由自己想要功能的函數,以下是簡單的規則:
函數代碼塊以def關鍵詞開頭,後面依次寫出函數名、括號、括號中的參數和冒號。任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用於定義參數。函數的第一行語句可以選擇性地使用文檔字符串—用於存放函數說明。函數內容以冒號起始,在縮進塊中編寫函數體。return 表達式結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。只要有return 表達式後面的代碼都不會再執行。語法
Python 定義函數使用 def 關鍵字,一般格式如下:
函數調用
定義一個函數,給了函數一個名稱,指定了函數里包含的參數,和代碼塊結構。
函數調用格式:函數名()
參數傳遞
在 python 中,類型屬於對象,變量是沒有類型的。
參數可以看鑰匙,函數是門,多個參數就是多把鑰匙,開門需要鑰匙。
定義函數的時候,我們把參數的名字和位置確定下來。
對於函數的調用者來說,只需要知道如何傳遞正確的參數,以及函數將返回什麼樣的值就夠了。
函數內部的複雜邏輯被封裝起來,調用者無需了解。
Python的函數定義非常簡單,但靈活度卻非常大。
除了空參數和正常定義的必選參數外,還可以使用默認參數、可變參數和關鍵字參數。以下是調用函數時可使用的正式參數類型:
空參數必需參數默認參數不定長參數
空參數
必需參數
必需參數必須傳入函數。調用時的數量必須和聲明時的一樣。
如果不傳參數,會報錯。門需要鑰匙開門,沒帶鑰匙怎麼可以打開。
默認參數
調用函數時,如果沒有傳遞參數,則會使用默認參數。
輸出結果:參數num,str=’求平方的值’,調用函數只傳一個參數5,其實程序自己把默認值str=’求平方的值’也傳入了,我們看不到而已。
調用函數時,修改默認值。
輸出結果:
不定長參數
定義出這個函數,我們必須確定輸入的參數。由於參數個數不確定,你可能需要一個函數能處理比當初聲明時更多的參數。這些參數叫做不定長參數,和上述2 種參數不同,聲明時不會命名。
加了星號*的參數會以元組(tuple)的形式導入,存放所有未命名的變量參數。
如果在函數調用時沒有指定參數,它就是一個空元組。我們也可以不向函數傳遞未命名的變量。
輸出結果:
傳入多個參數輸出結果:
函數一個必須參數和一個可變的元組參數。傳入3個參數減去一個必須參數,剩下的2個參數都放到可變的元組參數中,所以不定長參數有兩個元素。
加了兩個星號**的參數會以字典的形式導入。
如果在函數調用時沒有指定參數,它就是一個空字典。我們也可以不向函數傳遞未命名的變量。
輸出結果:
傳入參數輸出結果:
兩個星號**的參數會把賦值形式的參數變為字典形式。
組合參數:
參數定義的順序必須是:必選參數、默認參數、可變參數。
輸出結果:
change(‘名字’,12,’元組’,sex=’男’,ad=’地址’),一個必須參數name對應名字,默認參數值1被傳遞的第二個參數12替換。第三個參數歸類到一個星號的元組參數,如果沒有碰到sex=’男’這樣的參數,後面的參數都會歸類到一個星號的元組參數。
直到碰到類似sex=’男’這樣的賦值語句,它才會歸類到兩個星號的字典參數。例子:
輸出結果:看到這里又有疑問{‘a’:1,’b’:’c’}不是字典,怎麼會歸類到元組。
要記住一個原則,碰到賦值形式的語句才歸類到兩個星號的字典參數。把{‘a’:1,’b’:’c’}改一下。
輸出結果:把{‘a’:1,’b’:’c’}賦值給dict。
return語句
return語句用於退出函數,選擇性地向調用方返回一個表達式。沒有return語句默認返回None。
函數返回多個值,是以元組的形式,注意用逗號隔開。
輸出結果:
匿名函數:python 使用 lambda 來創建匿名函數。
所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數。
lambda 只是一個表達式,函數體比 def 簡單很多。lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。lambda 函數的語法只包含一個語句: