1 函數
-
函數是組織好的,可重複使用的,用來實現單一,或相關聯功能的代碼段。
-
函數能提高應用的模塊性,和代碼的重複利用率。
定義一個函數的格式:def 函數名(): 函數體
-
()中用於存放傳入的參數,
-
函數內容以冒號起始,並且縮進
-
要想使用函數 ,必須調用函數
函數名()
2 函數的命名規範
函數名稱應該符合標識符的命名規則:
- 可以由字母下劃線和數字組成。
- 不能以數字開頭
- 不能與關鍵字重名
3 函數的文檔註釋及函數調試:
-
函數的文檔註釋:
應該在定義函數的下方,使用連續的三對引號,編寫對函數的說明文字。
在函數調用的位置,使用快捷鍵Ctrl+Q,可以查看函數的說明信息。
如在定義函數的上方進行註釋,則需要和其他代碼(或註釋)保留兩個空行。 -
函數的調試:
F8 Step Over可以單步執行代碼,會把函數調用看作一行代碼直接執行
F7 Step into可以單步執行代碼,如果是函數,會進入函數內部。
4 函數的參數及作用
當有多個參數時,使用逗號隔開
def sum_2_num(num1,num2):
'''兩個整數的求和'''
result = num1 + num2
print("%d + %d = %d"%(num1,num2,result))
sum_2_num(2,30)
作用:
函數的參數的可以增加函數的通用性,針對相同的數據處理邏輯,能夠適應更多的數據。
- 在函數內部,把參數當做變量使用,進行需要的數據處理
- 函數調用時,按照函數定義的參數順序,把希望在函數內部處理的數據,通過
參數傳遞。
5 形參和實參
-
形參(變量):定義函數時,小括號中的參數,是用來接收實參的,在函數內部作爲變量使用
-
實參(實實在在的數據):調用函數時,小括號中的參數,是用來把數據傳遞到函數內部用的。
定義一個函數能夠打印任意重複次數的分割線 def print_line(char,time): #形參 print(char * time) print_line("*",40) ### 實參
6 函數的返回值:
有時會希望一個函數執行結束後,最後給調用者一個結果,以便調用者針對具體的結果做後續的處理。
使用return關鍵字可以返回結果。而調用函數一方可以使用變量來接收函數的返回值。
注意:
return 表示返回,其後續的代碼都不會被執行。
def sum_2_num(num1,num2):
'''兩個整數的求和'''
result = num1 + num2
return result
num_result = sum_2_num(2,30)
print(num_result)
當返回值有多個時,可以使用元組
將多個數據存儲在元組中。
例如:return one,two
一般情況下需要添加括號
示例:
def test_1():
print("測量溫度")
temp = 12
print("測量溼度")
wetness = 20
return temp,wetness
result = test_1() # 返回的是一個元組
print(result)
'''當函數返回元組,希望能夠單獨的處理元組中的元素
可以使用多個變量一次性接收函數的返回值,
**注意**:使用多個變量接收結果時,變量的個數應該和元組中
元素的個數保持一致。'''
gl_temp,gl_wetness = result
print(gl_temp)
print(gl_wetness)
7 函數的嵌套調用
在一個函數中調用另一個函數。
def test1():
print("#" * 10)
def test2():
print("-" * 10)
test1()
print("-" * 10)
test2()
結果爲:
----------
##########
----------
打印五行分割線
def print_line(char,time):
print(char * time)
def print_lines():
i = 0
while i<5:
print_line("*",40)
i += 1
print_lines()
升級版
def print_line(char,time):
print(char * time)
def print_lines(char,time):
i = 0
while i<5:
print_line(char,time)
i += 1
print_lines("-",20)
8 思考
定義函數時,是否接收參數,或者是否返回結果????
- 如果函數內部處理的數據不確定,就可以將外界的數據以參數傳遞到函數內部。
- 如果希望一個函數執行完成後,向外界彙報執行結果,就可以增加函數的返回值。
9 缺省參數
-
定義函數時,可以給某個參數指定一個默認值,具有默認值的參數叫做缺省參數。
-
調用函數時,如果沒有傳入缺省參數的值,則在函數內部使用定義函數時指定的參數默認值
num_list = [2,6,1] num_list.sort() num_list.sort(reverse=True) #相當於是一個缺省值
缺省參數的注意事項
-
設置缺省值gender = True,一般使用最常見的值作爲默認值。而且必須保證帶有默認值的缺省參數在參數列表末尾。
def print_info(name,gender = True): """ :param name: 姓名 :param gender: True是男生,False是女生 """ gender_text = "男生" if not gender: gender_text = "女生" print("%s 是 %s "%(name,gender_text)) print_info("小明") #默認是男生 print_info("小紅",False) # 結果: 小明 是 男生 小紅 是 女生
-
調用帶有多個缺省參數的函數。
在調用函數時,如果有多個缺省參數,需要制定參數名。這樣解釋器才能夠知道參數的對應關係。
10 多值參數
有種方式:
1.參數名前增加一個 * ,可以接收元組
2.參數名前增加兩個*,可以接收字典。
一般在給多值參數命名時,習慣使用一下兩個名字:
*args---存放元組參數,
**kwargs--存放字典參數,
示例:
def demo1(num,*args,**kwargs):
print(num)
print(args)
print(kwargs)
demo1(1,2,3,4,5,name = "小曾")
結果:
1
(2, 3, 4, 5)
{'name': '小曾'}
牛刀小試:計算任意多個數字的和。將傳遞的所有數字累加並且返回結果。
def sum_numbers(*args):
'''求元組中元素的和'''
num = 0
print(args)
for n in args:
num += n
return num
result = sum_numbers(1,2,3,4,5,6)
print(result)
11 元組和字典的拆包:
在調用帶有多值參數的函數時,如果希望:
- 將一個元組變量,直接傳遞給args.
- 將一個字典變量,直接傳遞給kwargs
使用拆包,可以簡化參數的傳遞。拆包方式:
- 在元組變量前,增加一個 *
- 在字典變量前,增加兩個*
示例:
def demo2(*args,**kwargs):
print(args)
print(kwargs)
gl_nums = (1,2,3,4,5)
gl_dict = {"name":"小曾","age":20}
demo2(*gl_nums,**gl_dict)
demo2(1,2,3,name="小明",age=20)#直接賦值。
結果:
(1, 2, 3, 4, 5)
{'name': '小曾', 'age': 20}
12 函數的遞歸:
就是函數自己調用自己。函數內部的代碼是相同的,只是針對參數不同,處理的結果不同。當參數滿足一個條件時,函數不再執行。
示例:求1到100的累加和
### 數字累加 相當於 num + (1+num-1)
def sum_numbers(num):
'''計算1+2+3。。。num的結果'''
#print(num)
#遞歸的出口,當參數滿足某個條件時,不再執行函數。
if num == 1:
return 1
temp = sum_numbers(num - 1)
return num + temp
result = sum_numbers(100)
print(result)