天天看點

詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二

上一篇: 函數的⽂檔說明 | 手把手教你入門Python之四十一 下一篇: 詳解函數傳回值和參數 | 手把手教你入門Python之四十三 本文來自于千鋒教育在阿裡雲開發者社群學習中心上線課程 《Python入門2020最新大課》 ,主講人姜偉。

函數的嵌套調⽤

def testB():
 print('---- testB start----')
 print('這⾥是testB函數執⾏的代碼...(省略)...')
 print('---- testB end----')
def testA():
 print('---- testA start----')
 testB()
 print('---- testA end----')
testA()           

結果:

---- testA start----
---- testB start----
這⾥是testB函數執⾏的代碼...(省略)...
---- testB end----
---- testA end----
           

小總結

  • ⼀個函數⾥⾯⼜調⽤了另外⼀個函數,這就是所謂的函數嵌套調⽤
    詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二
  • 如果函數A中,調⽤了另外⼀個函數B,那麼先把函數B中的任務都執⾏完畢之後才會回到上次 函數A執

    ⾏的位置

詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二
詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二
詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二
詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二

局部變量

  • 局部變量,就是在函數内部定義的變量
  • 其作⽤範圍是這個函數内部,即隻能在這個函數中使⽤,在函數的外部是不能使⽤的
  • 因為其作⽤範圍隻是在⾃⼰的函數内部,是以不同的函數可以定義相同名字的局部變量(打個⽐⽅,把

    你、我是當做成函數,把局部變量了解為每個⼈⼿⾥的⼿機,你可有個iPhone8,我當然也可以有個

iPhone8了, 互不相關)

  • 局部變量的作⽤,為了臨時儲存資料需要在函數中定義變量來進⾏存儲
  • 當函數調⽤時,局部變量被建立,當函數調⽤完成後這個變量就不能夠使⽤了

如下圖所示:

詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二

全局變量

如果⼀個變量,既能在⼀個函數中使⽤,也能在其他的函數中使⽤,這樣的變量就是全局變量

打個⽐⽅:有2個兄弟 各⾃都有⼿機,各⾃有⾃⼰的⼩秘密在⼿機⾥,不讓另外⼀⽅使⽤(可以了解為局部

變量);但是家⾥的電話是2個兄弟都可以随便使⽤的(可以了解為全局變量)

# 定義全局變量
a = 100
def test1():
 print(a) # 雖然沒有定義變量a但是依然可以擷取其資料
def test2():
 print(a) # 雖然沒有定義變量a但是依然可以擷取其資料
# 調⽤函數
test1()
test2()           

運作結果:

詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二

總結1

  • 在函數外邊定義的變量叫做 全局變量
  • 全局變量能夠在所有的函數中進⾏通路

全局變量和局部變量名字相同問題

看如下代碼:

詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二

總結2

  • 當函數内出現局部變量和全局變量相同名字時,函數内部中的 變量名 = 資料 此時了解為定義了⼀個

    局部變量,⽽不是修改全局變量的值

修改全局變量

函數中進⾏使⽤時可否進⾏修改呢?

代碼如下:

詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二

總結3

  • 如果在函數中出現 global 全局變量的名字 那麼這個函數中即使出現和全局變量名相同

    的 變量名 = 資料 也了解為對全局變量進⾏修改,⽽不是定義局部變量

  • 如果在⼀個函數中需要對多個全局變量進⾏修改,那麼可以⼀次性全部聲明,也可以分開聲明
# 可以使⽤⼀次global對多個全局變量進⾏聲明
global a, b
# 還可以⽤多次global聲明都是可以的
# global a
# global b           

檢視所有的全局變量和局部變量

Python提供了兩個内置函數globals()和locals()可以⽤來檢視所有的全局變量和局部變量。

def test():
 a = 100
 b = 40
 print(locals()) # {'a': 100, 'b': 40}
test()
x = 'good'
y = True
print(globals()) # {'__name__': '__main__', '__doc__': None, '__package__': None,
 '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x101710630>
, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (bui
lt-in)>, '__file__': '/Users/jiangwei/Desktop/Test/test.py', '__cached__': None, '
test': <function test at 0x101695268>, 'x': 'good', 'y': True}
           
詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二
詳解函數的嵌套調⽤和局部變量 | 手把手教你入門Python之四十二