Python學習筆記(四)——自定義函數、多值參數、缺省參數、函數遞歸、元組和字典的拆包

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)

作用:
函數的參數的可以增加函數的通用性,針對相同的數據處理邏輯,能夠適應更多的數據。

  1. 在函數內部,把參數當做變量使用,進行需要的數據處理
  2. 函數調用時,按照函數定義的參數順序,把希望在函數內部處理的數據,通過
    參數傳遞。

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) #相當於是一個缺省值
    

缺省參數的注意事項

  1. 設置缺省值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) #
     
     結果:
     小明 是 男生 
     小紅 是 女生 
    
  2. 調用帶有多個缺省參數的函數。
    在調用函數時,如果有多個缺省參數,需要制定參數名。這樣解釋器才能夠知道參數的對應關係。

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)
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章