2.Python函數/方法(method/function)詳解


1.什么是函數

它是一段功能代碼,理解為一種功能行為,在內存中有空間區域,函數需要被調用才能執行(通過函數名來調用);

好處:

1).提高代碼的復用性

2).提升代碼的閱讀性

3).增加代碼的擴展性

4).增強了代碼的維護性

2.函數有五要素組成

①.函數修飾符                    關鍵字def開頭

②.函數返回值類型             有返回值(類型:int、float、str、list...)/沒有返回值

③.函數名                           函數的名字(標識符一種,滿足規則和規范)

④.形參列表                        定義在小括號內(可能有形參,也可能沒有)

⑤.函數體                           一段業務邏輯代碼

3.定義格式

                ① ③(④):

                   ⑤

4.函數名的定義

標識符的一種,滿足規則和規范:

對於其規范,和變量名保持一致

5. 自定義函數的四種定義場景

1).無參無返回值

2).無參有返回值

3).有參無返回值

4).有參有返回值

演示自定義函數的四種場景:

 1 #1無參無返回值
 2 def func1():
 3     print('hello method...')
 4 
 5 #2無參有返回值
 6 def func2():
 7     return True
 8 
 9 #3有參無返回值
10 def func3(a,b):
11     print(a + b)
12 
13 #4有參有返回值
14 def func4(a,b):
15     #在自定義函數中調用本模塊(.py文件)別的自定義函數
16     func1()
17     return a if a > b else b

6.形參列表的多種定義情況:

演示形參的多種定義情況:

1). 默認參數的使用:

1 def func1(name="張三",age=18,height=175.5):
2     print(name,age,height)
3 
4 # 調用自定義函數(不傳遞參數):會使用默認參數參與之后的運算
5 func1()
6 # 調用自定義函數(傳遞部分參數):傳遞的部分使用傳遞內容,其余部分使用默認參數參與運算
7 func1("李四")

2). 一般參數的使用

1 def func2(name,age,address):
2     print(name,age,address)
3 
4 #調用自定義函數:必須傳遞參數,而且位置和個數都要對的上
5 func2("李雷",21,"北京")

3). 關鍵字參數的使用:(好處:不用記住每個變量的位置)

1 def func3(name,age,address):
2     print(name,age,address)
3 
4 #體現在調用自定義函數上:傳遞類型鍵值對的組合
5 func3(address="上海",name="韓梅梅",age=20)
7.可變參數的使用

在定義一項功能時,對於參數層面(到底幾個不確定),此時可以使用可變參數來實現;
參數解釋:*args:接受0~無窮多個單值,存入到一個元祖中返回; **kwargs:接受0~無窮多個鍵值對組合,存入到一個字典中返回。

1 def func4(*args,**kwargs):
2     print(args,type(args))      # 元祖類型
3     print(kwargs,type(kwargs))  # 字典類型
4 
5 func4()

案例1:實現多個整數求和的操作

自定義函數:兩個原則

1).有沒有形參?   有,但是個數不確定,使用可變參數

2).有沒有返回值?   可有可無

1 def mySum(*args):
2     sum1 = 0
3     for i in args:
4         sum1 += i
5     return sum1
6 
7 mySum = mySum(1,2,3,4,5)
案例2:
1 def func1(*args,**kwargs):
2     print(args)
3     print(kwargs)
4 
5 func1(0,100,3.14,True,"abcd",[10,20,30],name="班長",age=25)
6 
7 # 以下代碼會報錯:因為*args定義在前,**kwargs定義在后,由於在傳遞參數的過程中已經出現了類似name="班長",
8 # age=25這樣的代碼,那么其后就不能出現單值數據的傳遞了
9 func1(0,100,3.14,True,"abcd",[10,20,30],name="班長",age=25,-100,3.14)

【注意事項】:

1).形式參數(形參):它可以認為是一個入口(在函數名后面的小括號中定義),並不存在實際數據,在代碼的體現上就是定義變量,等着接受實參;

2).實際參數(實參):實實在在存在的數據(可以是各種類型),將實際參數傳遞給形式參數(過程:稱為參數傳遞),之后在函數體中參數運算的都是實際參數

3).返回值:在整個函數執行完畢后需不需要返回給程序一些數據(分類:有返回值/沒有返回值)

如果有返回值:需要使用關鍵字return進行數據的返回

4).return關鍵字的作用:

(1).將需要返回的數據給到函數的調用處(調用者)

(2).表示函數的結束

(3).和return關鍵字在同一作用域,在其后面不要去定義任何的代碼,因為永遠不可能被執行到

(4).return關鍵字后面也可以不定義任何的內容,它的作用僅僅意味着函數結束了...

8.全局變量&局部變量

全局變量: 1).作用域比較大,定義在.py文件中,函數外;2).可以被文件中任何一個函數所使用。

局部變量:1).作用域比較小,函數的形參或者函數體中; 2).只能被當前的這個函數所使用,出了此函數,外部夠不着它。

在局部位置修改全局變量的值:先使用global關鍵字定位到需要修改的全局變量,然后在使用全局變量 = 值操作進行修改。

在內部函數中修改外部函數中局部變量的值:先使用nonlocal關鍵字定位到需要修改的局變變量,再使用局部變量 = 值操作進行修改。

 1 a=10     #a為全局變量
 2 def func1():
 3     global a
 4     a=20
 5     print(a)
 6 def func2():
 7     b=100    #b為局部變量
 8     print(a,b)
 9 
10 # 以下代碼有問題:因為b是屬於func2()函數中的局部變量,出了func2()函數 外界都不能使用
11  print(b)

9.外部函數&內部函數

內部函數:定義在外部函數的內部,成為其一部分(認為是外部函數的成員)

 1 def outer():
 2     print("我是外部函數...")
 3     b=20
 4     def inner():
 5         print("我是內部函數...")
 6         nonlocal b
 7         b=30
 8         print(b)
 9     inner()
10     print(b)
11 outer()
12 
13 # 以下代碼有問題:對於內部函數的執行只能依賴於它的外部函數,不能出了外部函數在外界單獨執行;
14 inner( )

[補充概念】:

1.標識符

大白話:凡是可以自己起名字的地方,都是標識符

遵守以下三點規則

1).范圍:a~z、A~Z、0~9、下划線(_)

2).數字不能開頭:abc123 合法   ;  123abc 不合法

3).不能使用關鍵字和保留字,但是可以包含關鍵字和保留字 :class 不合法 ; classroom 合法

遵守以下兩點規范

1).駝峰式原則

對於變量而言:如果是多個單詞組成,第一個單詞首字母小寫,其余單詞首字母大寫,剩余字母全部小寫。舉例:helloWolrdChina

2).下划線原則

舉例:hello_world

2.常量和變量

常量:一旦定義,其值不可變;例如:0、100、3.14、True/False、"abc"...

變量:它是內存中的一塊存儲區域,可以存儲數據,並且隨時可以改變區域中的內容,

 第一次存儲進去的數據我們稱為初始化值;

變量的定義格式:

1).變量名 = 值

2).變量名1,變量名2,...,值n = 值1,值2,...,值n

3).變量名1 = 變量名2 = ... = 變量名n = 值

3.弱&強類型語言

強類型語言:在定義變量的時候,就需要有明確的數據類型;

弱類型語言:在定義變量的時候,不需要有明確的數據類型;

4.關鍵字

理解:被python語言賦予特殊函數的英文單詞           例如:class、if、else、while、for...

5.內置函數

執行可以通過定義函數名執行成功的都是內置函數;函數之間是可以嵌套調用的(案例中有體現)。常用的內置函數:round();abs();max();min();sum();hex();oct();bin();pow(x,y);divmod(x,y);ord();chr();type();id();len() ...

1). round(num1,num2):得到四舍五入之后的值;round里面的的第一個參數是接收的變量,第二個參數是保留多少位小數(可不填,表示保留整數位)

2). abs(num):得到數據的絕對值,特點:不管正數還是負數的絕對值都是其正數的形式,0的絕對值還是0

3). max(seq)、min(seq):得到seq對象的最大、最小值

4). sum(seq):得到seq中所有元素累加以后的和值返回

【注意事項】:1).對於str類型的數據不能使用sum()求和,沒有意義。2).對於sum()函數只能接受容器類型數據,不能接受多個單值數據

1 # 以下兩個函數就是非法的
2 print(sum('12345'))
3 print(sum(1,2,3,4,5))

5). hex(num):將十進制數據num轉換為十六進制返回(數據類型:str)

6). oct(num):將十進制數據num轉換為八進制返回(數據類型:str)

7). bin(num):將十進制數據num轉換為二進制返回(數據類型:str)

8). pow(x,y):計算x的y次方返回

9). divmod(x,y)返回一個元祖對象,有兩個元素,第一個元素記錄了x除以y后的商,第二個元素記錄了x除以y后的余數

10). ord(str)傳入字符數據,返回整數值(ascii碼值)

11). chr(num)傳入整數數據(ascii碼值),返回字符數據

【補充】字符編碼(字符集),記住3個分界點: '0' -->  48; 'A'  -->  65; 'a'  -->  97

12). type():得到數據的類型返回

13). id():得到數據的內存地址(十進制的形式)返回

14). len():得到數據的長度


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM