函式與模組

2021-10-07 14:01:43 字數 2223 閱讀 1996

在python中可以使用def關鍵字來定義函式,和變數一樣每個函式也有乙個響亮的名字,而且命名規則跟變數的命名規則是一致的。在函式名後面的圓括號中可以放置傳遞給函式的引數,這一點和數學上的函式非常相似,程式中函式的引數就相當於是數學上說的函式的自變數,而函式執行完成後我們可以通過return關鍵字來返回乙個值,這相當於數學上說的函式的因變數。

函式是絕大多數程式語言中都支援的乙個**的"構建塊",但是python中的函式與其他語言中的函式還是有很多不太相同的地方,其中乙個顯著的區別就是python對函式引數的處理。在python中,函式的引數可以有預設值,也支援使用可變引數,所以python並不需要像其他語言一樣支援函式的過載。在引數名前面的*表示args是乙個可變引數

def add(*args):

total = 0

for val in args:

total += val

return total

如果專案是由多人協作進行團隊開發的時候,團隊中可能有多個程式設計師都定義了名為foo的函式,那麼怎麼解決這種命名衝突呢?答案其實很簡單,python中每個檔案就代表了乙個模組(module),我們在不同的模組中可以有同名的函式,在使用函式的時候我們通過import關鍵字匯入指定的模組就可以區分到底要使用的是哪個模組中的foo函式。

需要說明的是,如果我們匯入的模組除了定義函式之外還中有可以執行**,那麼python直譯器在匯入這個模組時就會執行這些**,事實上我們可能並不希望如此,因此如果我們在模組中編寫了執行**,最好是將這些執行**放入如下所示的條件中,這樣的話除非直接執行該模組,if條件下的這些**是不會執行的,因為只有直接執行的模組的名字才是"__main__"。

def foo():

pass

def bar():

pass

# __name__是python中乙個隱含的變數它代表了模組的名字

# 只有被python直譯器直接執行的模組的名字才是__main__

if __name__ == '__main__':

print('call foo()')

foo()

print('call bar()')

bar()

def foo():

b = 'hello'

# python中可以在函式內部再定義函式

def bar():

c = true

print(a)

print(b)

print(c)

bar()

# print(c) # nameerror: name 'c' is not defined

if __name__ == '__main__':

a = 100

# print(b) # nameerror: name 'b' is not defined

foo()

上面的**能夠順利的執行並且列印出100、hello和true,但我們注意到了,在bar函式的內部並沒有定義ab兩個變數,那麼ab是從**來的。我們在上面**的if分支中定義了乙個變數a,這是乙個全域性變數(global variable),屬於全域性作用域,因為它沒有定義在任何乙個函式中。在上面的foo函式中我們定義了變數b,這是乙個定義在函式中的區域性變數(local variable),屬於區域性作用域,在foo函式的外部並不能訪問到它;但對於foo函式內部的bar函式來說,變數b屬於巢狀作用域,在bar函式中我們是可以訪問到它的。bar函式中的變數c屬於區域性作用域,在bar函式之外是無法訪問的。事實上,python查詢乙個變數時會按照「區域性作用域」、「巢狀作用域」、「全域性作用域」和「內建作用域」的順序進行搜尋,前三者我們在上面的**中已經看到了,所謂的「內建作用域」就是python內建的那些識別符號,我們之前用過的inputprintint等都屬於內建作用域。

python 函式與模組

1,定義函式 def 函式名 參數列 函式語句 return 發回值 引數和返回值都可以省略 def hello print xyf 無敵 hello 2,引數傳遞 def add a,b return a b print add a b 順序依次傳遞 print add b a a b 按形參賦值...

Python函式與模組 函式定義與使用

一.函式定義與使用 1.函式定義 python中函式的定義與宣告是視為一體的。def 函式名 函式引數 函式體return 表示式或值 注 python中變數是弱型別的,python會自動根據值來維護其型別。所以不用指定返回值及函式引數的型別 若沒有return語句,則自動返回none 如果有ret...

Python 函式與模組等

參考 菜鳥教程 2 模組 3 檔案 io 4 異常 函式內容以冒號起始,並且縮排 不帶表示式的return相當於返回 none def functionname parameters function suite return expression 可變更和不可變更物件的傳遞 我的理解 usr bi...