一、認識函數
print()
round(a, n) :四舍五入保留小數點的n位
help(函數名):查看內置函數的使用方法 (首先在命令行輸入 python進入后)
import this:搜索Python之禪
1. 功能性
2. 隱藏細節 ??
3. 避免編寫重復的代碼
組織代碼 自定義函數
二、函數的定義
1. 使用 def 來定義函數
① 參數列表可以沒有
② 使用 return ? value ?返回函數值;None(沒有return)
③ return :只有return,return之后后面的語句是不會執行的
可以返回任意類型的變量,不需要定義
注:
1. 函數需要先定義,再調用
2. 自定義函數名不要和Python系統內置的函數名或者變量名重復
三、讓函數返回多個結果
return的幾種用法
1. 返回一個或多個變量時,只需在return后面用都好隔開多個變量,此時默認多個變量組成一個tuple
2. 空值(默認)
3. 只有return,后面不接變量時,函數運行終止,即不運行return后面部分
4. 當return返回多個值時,如何取出每一個值,雖然可以用 damages[0] 這種在序列中索引的方法取出每一個值,但可讀性差,且每次提取都要重復代碼。
最好是給元祖中的每一個元素賦予有意義的新變量名用于接收,下圖
這種方法叫做序列解包!
序列解包
把一個tuple拆開,就叫做序列解包,比如:
d = 1, 2, 3 ? ? // 此時 d 是一個 tuple
a, b, c = d ? ? // 給a,b,c 賦值,這就叫做序列解包
注??!元素的格式要相等
鏈式賦值: a = b = c = 1
四、參數
1. 必須參數:
函數參數列表中定義的必須賦值的參數(形參)。必須放在參數列表的前面
形參:
實參:調用函數時,輸入的參數
2. 關鍵字參數:
不用考慮傳參的順序,實現函數的調用。可以在函數調用時明確指出實參是傳給哪個形參的
(代碼的可讀性)
def ?add ( x, y):
? ? ? ...
? ? ? return result
c = add ( y = 3, x = 2)
3. 默認參數:
不必每次輸入相同的參數
注意!
1. 所有非默認參數必須在所有默認參數錢,不論定義函數還是調用時都是一樣
2. 參數順序要一致,如果順序不一致,想向某一特定的默認參數傳遞參數應該使用關鍵字參數指定要改變的默認參數,否則將根據默認參數順序依次匹配。
3. 默認參數和關鍵字參數不能混合調用
4. 可變參數:
① 在參數列表前加一個“ * ” ,python可以自動把可變參數的實參組裝成tuple,輸出一個元組。
?。?!但是就不能這樣傳:demo((1,2,3,4,5,6)),這樣會得到二維元組
* 的作用是把每個元素拿出來平鋪輸出 (下圖)
② 或者不加 * ,那么在調用函數時用tuple類型。
各種參數調用的順序:可變參數可以和其他類型的參數結合起來,注意必須參數必須放在最前面,也可使用關鍵字參數。
但是函數的參數列表盡量簡單,不要有多重參數類型混合。?。?!
可變參數可以用 for 循環來進行遍歷調用 ?(下圖)
squsum(1,2,3) ?等于 ? squsum(*[1,2,3])
5. 關鍵字可變參數:
格式:def demo(**param) ? ? ? ? pass
? ? ? ? ? ? 或 def demo(**param) ? ?調用時 a = (......) ? ? ? ? ?demo(**param)
這樣在調用時可以傳遞多個關鍵字參數,此時python會將其轉化為字典類型dict。
遍歷字典類型數據的方法:(下圖)
for? key,value ?in ?param.items():
? ? ? ? print(key,':',value)
五、變量的作用域
全局變量、局部變量
在函數體內部,局部變量是不分層級的,不能形成塊級作用域,可以互相引用。
外部無法使用局部變量。
鏈式,作用域鏈:具有鏈式的特征,具有逐級尋找的過程
注釋 c=3 ? >>> 2
注釋 c=2 ? >>> 1
global?關鍵字:
在函數內部加上global 關鍵字,就可以在函數外部訪問內部的變量值 ? >>> ? 變成全局變量
也可以實現調用模塊