Python模組化程式設計 函式 學習猿地

2021-10-04 01:23:19 字數 4605 閱讀 1096

### 模組化程式設計

> 模組化程式設計指把程式進行封裝(函式封裝,物件導向,檔案。。。)

#### 什麼是函式?

> function -> 函式,功能

> 函式就是乙個具有特定功能的**塊

#### 函式的作用?

> 函式就是把**進行封裝,以提高**的重用性,提高開發效率,並且降低了後期的維護成本

#### 函式的定義和使用

```python

# 定義函式【基本結構】

def 函式名([引數列表]):

當前函式的具體功能的**

當前函式的具體功能的**

# 函式封裝完並不會執行,只是把函式定義了而已

# 如果想使用定義的函式,那麼就需要用語法來進行函式的呼叫

# 函式的呼叫

函式名()

#### 函式的特徵及注意事項

1. 函式定義後,不呼叫不執行

2. 不能在函式定義前呼叫函式

3. 函式的呼叫不受次數影響

4. 函式的命名要遵守命名規範

+ 字母數字下劃線,不能以數字開頭

+ 嚴格區分大小寫,不能使用關鍵字

+ 命名最好有意義,且不要使用中文

5. 函式名不要衝突,衝突後會被覆蓋

### 關於函式的引數

> 函式在定義時,可以在引數列表的位置定義形參

> 如果函式有形參,那麼在函式呼叫時也需要給定引數

> 實參將值傳遞給形參的過程,本質上就是變數賦值操作

#### (1)函式引數概念及分類

函式引數:呼叫時需要傳遞的資料.

函式引數大類分為形參和實參:

. 形參意思: 函式定義時的引數

. 實參意思: 函式呼叫時的引數

形實關係:函式呼叫時,形參和實參個數需要一一對應

形參種類: 普通引數,預設引數,普通收集引數,命名關鍵字引數,關鍵字收集引數

實參種類: 普通實參,關鍵字實參

#### (2)普通引數

(位置引數)普通的引數,接收實參傳遞的值

#### (3)預設引數:

> 位於普通引數後面,具有預設值的引數

> 語法:(x,y=2)  y就是預設引數

#### (4)收集引數:

> 專門收集在函式呼叫時傳遞的多餘的實參

1.普通收集引數:專門用於收集多餘的普通引數,形成乙個新的元組

語法:引數前面加* 例:*args

2.關鍵字收集引數:用於專門收集多餘關鍵字實參,形成乙個新的字典

語法:引數前面加** 例:**kwargs

#### (5)命名關鍵字引數

> 定義時放在*號後面的引數,呼叫時強制必須傳入指定引數名才能呼叫

語法:(a,*,x) x是命名關鍵字引數

如果函式引數中已經有了收集引數,那麼收集引數後面的引數即為命名關鍵字引數

語法:(*args,x,y)

#### (6)形參宣告的位置順序:

> 普通引數 -> 預設引數 -> 收集引數 -> 命名關鍵字引數 -> 關鍵字收集引數

def func(a,b,c=1,*args,d,**kw)

a,b為普通引數,c是預設引數,args是收集引數,d是命名關鍵字引數,kw是關鍵字收集引數

極少出現五種引數同時出現的情況

def func(a,b=2,*,c,d,**kw)

a為普通引數,b是預設引數,c,d是命名關鍵字引數 ,kw是關鍵字收集引數

#### 所有引數的擺放問題

- 實參:普通實參在前,關鍵字引數在後

- 形參:

- 關鍵字收集引數一定在最後出現

- 收集引數推薦在普通引數之後使用

### 函式返回值

> 乙個函式除來可以完成一定功能之外,還可以按需要返回一些內容

> 函式中使用 return 關鍵字來指定返回資料,可以返回任意型別的資料

> 函式的返回值,會把資料返回到呼叫處,可以使用變數接收,或其它處理

函式可以分為兩類

1。執行過程函式: 函式體內完成一定的功能既可,沒有返回值

2。具有返回值的函式: 函式體內完成一定的功能,並且返回乙個結果到函式呼叫處

#### return返回值的特徵

+ 函式中可以使用 return 進行資料的返回

+ 可以使用return 返回 任意內容或資料

+ return 會把返回值,返回到函式呼叫出

+ return 意味著函式的結束,return之後的**不在執行

+ 如果在函式中沒有使用return 或者 return後面沒有任何內容,那麼預設返回 none

```python

# 假設有這樣乙個需求,定義乙個函式,完成兩個數的計算,並把結果輸出

# def jia(n1,n2):

#   res = n1+n2

#   print(res)

# jia(2,5)

# 需求改變,定義乙個函式,完成兩個數的計算,並把結果返回

def jia(n1,n2):

res = n1+n2

return res

r = jia(2,4)

print(r)

### 變數作用域

> 作用域就是當前起作用,可用的範圍區域

> 變數的有效範圍

全域性變數:在函式內外都可以使用的變數

區域性變數:在函式內部可以使用的變數

區域性變數

函式內定義的變數,區域性變數,在函式外不能使用

全域性變數

在函式內部使用 global 直接定義的變數,就是全域性變數,函式內外都可以使用

在函式外定義的變數,在函式內使用 global 關鍵字進行宣告,那麼也是全域性變數

globals() 獲取全域性資料

locals() 獲取當前作用域的資料

在函式外定義的變數,函式可以訪問,但是不能更改

資料型別的分類:

可變資料型別:在函式外定義的變數,在函式可以使用,

列表和字典

不可變資料型別:在函式外定義的變數,在函式內只能訪問,不能使用其它操作

#### 不光變數有作用域,函式一樣也有相同的作用域

```python

def outer():

print('this is outer function...')

# 在函式內定義的函式,稱為 區域性函式,函式外無法使用

def inner():

print('this is inner function...')

inner()

outer()

# inner()

### nonlocal

> 在內函式中如何使用上一層函式中的區域性變數?

> 在內函式中如果想使用外層函式的變數,那麼需要使用 nonlocal 關鍵字 引用

> 可以引用上一層函式中定義的區域性變數,但依然不能提公升為全域性變數

```python

# 定義乙個外層函式

def outer():

# 外函式的區域性變數

num = 10

# 內函式,區域性函式,在函式的內部定義的函式

def inner():

# nonlocal 關鍵字在區域性函式中使用,

nonlocal num # 可以引用上一層函式中定義的區域性變數,但依然不能提公升為全域性變數

num += 1

print(num)

inner()

outer()

# print(num)

#### 關於函式的文件

```python

def outer():

這裡是讓你些當前函式的文件說明的。

需要說明當前函式的作用,

如果當前函式還有行參,那麼也需要對行參進行一一說明

name: 這個是乙個name引數,有什麼作用。。。

age : 這個表示當前的乙個年齡

:return: 此處說明當前函式的返回值。。。

print(globals())

print(__name__) # 獲取當前指令碼的檔名,

print(__doc__) # 獲取當前指令碼的說明文件

# print(outer.__doc__) # 獲取當前函式的說明文件

魔術變數

__name__ ==> 當前指令碼如果作為主程式,那麼值是 __main__,如果是當做乙個模組,在另外乙個指令碼中引用去使用,那麼值就是當前檔案的名字

__doc__  ==> 當前指令碼的文件說明 在當前指令碼當中的第乙個 三引號注釋就是當前指令碼的說明文件

'__name__': '__main__', 

'__doc__': '\n在內函式中如果想使用外層函式的變', 

'__package__': none,

'__loader__': <_frozen_importlib_external.sourcefileloader object at 0x110444350>, 

'__spec__': none, 

'__annotations__': {}, 

'__builtins__': , 

'__file__': '/users/yc/desktop/code/8.nonlocal關鍵字.py', 

'__cached__': none, 'outer':

模組化程式設計 函式定義

在軟體開發的過程中,我們經常會重複的使用一些 片段,因此我們往往將這樣的 片段作為函式進行呼叫。函式有4種模式的定義和使用 q有引數,有返回值 y f x q有引數,無返回值 f x q無引數,有返回值 y f q無引數,無返回值 f 在遊戲 圖形 建築領域的軟體應用中,我們經常需要計算幾何圖形的面...

模組化程式設計

將乙個5元素陣列,右移n位,n從鍵盤輸入,首尾相接 例如 陣列中的元素為 那麼 n 3 的結果如下 資料是向右邊移三位,那麼,我轉化成先移一位的情況。因為當移一位的問題解決了,移動n位只需要將此過程迴圈n次即可 1.把a 1 放到臨時空間t t a 1 2.依次把前面元素的值放到後面的空間裡面.從後...

python函式模組化

1.python模組可以在邏輯上組織python程式,將相關的程式組織到乙個模組中去,使用良好的結構化設計,增加程式的重用性,提高 使用率 def print mytest name return mytest name import mytest mytest.print mytest mytes...