Python基礎語法 關於函式

2021-09-26 16:17:56 字數 4557 閱讀 5952

關於函式部分的知識,梳理總結如下:

一、什麼是函式:

函式是組織好的,可以重複利用的,用來實現某一功能的**。比如用到的列印函式print(),就是完成資料列印的功能。

二、定義函式:

函式可以由我們自己來進行建立,語法如下:

def 函式名(引數):

函式體

例:

def method1(x):

y = 3*x+5

return y

說明:

1)函式名:名字最好體現函式功能,一般用小寫字母、單下劃線、數字組合,不可與內建函式重名;

2)引數:可以有多個引數,也可以不帶引數;

3)函式體:**的縮排不可省略,宣告函式名後的冒號不可省略;

4)返回語句:return語句用於在函式體執行結束後,變數結果需要在函式外部使用時,後面可以接多種資料型別,不需要返回值可省略(末尾隱性返回none)。

三、呼叫函式:

函式在定義後,不呼叫則不會執行相應的**。

函式的呼叫語法:函式名(引數)

def

math

(x):

y=x*2+

3return y

print

(math(3)

)#函式呼叫部分

四、關於引數:

函式中常見的有位置引數、預設引數和不定長引數。

1、位置引數:傳參必須依照函式定義時的順序。當有多個引數時,必須按照指定的順序和數量進行傳遞。

例:

def

math1

(a,b)

:#宣告math1函式,其中有a,b兩個變數,順序和個數不可改變

y=a-b

return y

2、預設引數:直接在定義時給出賦值的引數,被賦予的值可稱為初始值或初值,預設引數的值也可以用改變位置引數的方法來重新賦值。注意:預設引數必須在位置引數之後進行宣告和賦初值。

例:

def

math2

(a,b,c=2)

:#宣告math2函式,有三個引數,其中a,b是位置引數,c是預設引數。但可以通過賦值語句重新賦值。

y1=(a-b)

/c c=a+

1 y2=

(a-b)

/c return y1,y2

3、不定長引數:用於儲存引數值長度未知的引數,其資料型別為元組。宣告格式:在引數名前加「*」,即:*引數名

例:

def

menu

(*order)

:#不定長引數的定義

order=

'溏心蛋'

,'紅燒肉'

,'清炒時蔬'

print

(order)

print

(type

(order)

)#不定長引數的資料型別

五、返回值:

返回值即在定義函式時,return語句後所跟的變數。可以返回單一值,也可返回多個值。要返回多個值,只需將返回的值寫在return語句後面,用英文逗號隔開即可。

例:

def

math3

(a,b)

: y1=a+b

y2=a-b

y3=a*b

y4=a/b

return y1,y2,y3,y4

多個返回值的函式,其返回值型別為元組(tuple,與列表相同),每個返回值都可以分別賦值乙個新的變數。見下例:

def

math1

(a,b,c=2)

: y1=

(a-b)

/c c=a+

1 y2=

(a-b)

/c return y1,y2 #多個返回值

result=math1(3,

2)#返回值存放於元組中

num1,num2=math1(3,

2)#可直接定義變數來接收函式的返回值

num3=result[0]

#元組中的值可以像列表值一樣取出賦值給新變數

num4=result[1]

print

(num1,num2,num3,num4,sep=

'\n'

)print

(type

(result)

)#驗證返回值的資料型別為元組

**結果圖:

六、多個函式間的配合:

涉及概念:變數作用域。

什麼是變數作用域?我的理解是:變數可以被呼叫的區域。

由此劃分出兩類變數:區域性變數和全域性變數。

1、區域性變數:以函式內部的變數為例,在函式內部賦值的變數僅能在該函式內部使用。簡單理解為,可呼叫的區域有限制。

2、全域性變數:可以在程式的任何位置使用的變數,稱為全域性變數。

函式間有可能相互呼叫的變數,有三種辦法解決變數作用域不同產生報錯的問題:

1、寫在函式定義之外,直接宣告為全域性變數;

2、使用『global』關鍵字,在函式體的第一行進行變數的全域性宣告;

3、在函式呼叫時進行巢狀使用。

例:需求:自動計算銷售額的增長率。

def

balance()

:#計算差額(本月銷售額-上月銷售額)

global last_month #後面需要用到上月銷售額這一變數,全域性宣告

this_month=

float

(input

('請輸入本月銷售額,按回車結束'))

last_month=

float

(input

('請輸入上月銷售額,按回車結束'))

balance_num=this_month-last_month

return balance_num

defrate()

: rate_num=balance(

)/last_month*

100#巢狀balance()函式

return rate_num

defmain()

: a=

round

(rate(),

2)#巢狀rate()函式

print

('本月銷售額相比上個月的增長率為:'

+str

(a)+

'%')

main(

)

思路:

1、增長率的計算公式:

增長率=(本月銷售額-上月銷售額)/上月銷售額*100%

2、差額需要優先計算,並且本月銷售額和上月銷售額需要手動輸入,用到input()函式,與計算差額合併在乙個函式內,避免增長率計算時算式編輯過於複雜。

3、乘除法計算增長率需要用到上月銷售額,故上月銷售額變數需要全域性宣告。

4、計算結果需要保留兩位小數,可以定義在main()函式中,使用乙個round()函式的巢狀。

執行說明:

(個人感覺,整個程式的執行更像是倒著找源頭,然後再帶著源頭,沿著路標回到出發地。)

執行**的主體只有main()函式的呼叫。

呼叫main()函式後,執行變數a的賦值語句,

在賦值過程中,呼叫了rate()函式,

rate()函式中巢狀了balance()函式,

去執行balance()函式體,鍵入this_month和last_month兩個變數值,

得到balance()函式的執行結果balance_num,

帶著結果回到rate()函式中,

計算出結果rate_num,

再回到main()函式中,保留兩位小數,輸出計算結果。

在案例實現的過程中遇到的錯誤:

syntaxerror: name 『last_month』 is parameter and global

問題**:

def

balance

(this_month,last_month)

:#括號中為形式引數,形式引數不可進行全域性宣告。

global last_month

this_month=

float

(input

('請輸入本月銷售額,按回車結束'))

last_month=

float

(input

('請輸入上月銷售額,按回車結束'))

balance_num=this_month-last_month

return balance_num

個人理解:括號中給出的引數都是在呼叫時需要給出實際值的,而且只有在這個函式被呼叫時才會啟用,相當於只能是區域性變數,不能夠提供給別的函式使用,在定義時只作為佔位的標號,因此不可以宣告為全域性變數。

Python基礎語法函式

python中的函式與數學中的函式不同,它不再只是公式,而是實實在在有著自己特定功能的 其實在潛移默化中我們已經有所接觸了。比如print 函式,range 函式,type 函式等。函式各式各樣,或簡單或複雜,但其本質卻好是相通的 給函式一些資料,函式進行處理,輸出你想要的東西。函式名後面的括號裡放...

Python基礎語法2 函式

1.定義 def 函式名 引數1,引數2,引數n 函式體return 語句 例如 def greet name print name 早上好 2.呼叫 例如 greet 貝貝 4.return 可以返回多個值,對映資料型別元素 tuple def love name1,name2 face name...

Python 基礎語法 隨機函式

函式是不能直接訪問的,需要匯入 random 模組,然後通過 random 靜態物件呼叫該方法。import random 方法返回隨機生成的乙個實數,它在 0,1 範圍內。import random random.random 返回隨機生成的乙個 0,1 範圍內的實數。import random ...