Python爬坑之變量作用域

Python爬坑之變量作用域

本文是基於Python3進行說明
talk is cheap,show me the code.


  • 變量作用域
  • python 中塊級作用域概念
  • 作用域鏈
  • 把局部變量變成全局變量

變量作用域

在python中,定義一個函數是通過關鍵字 def 來定義的。同大多數語言一樣,python也具有全局變量局部變量

    num = 100   # 全局作用域變量num
        def add(a, b):     # 通過def來定義一個add函數
            num = a + b    # 函數內部作用域局部變量num
            print(num)

    add(1, 2)   # 打印 3
    print(num)     # 打印 100

一般情況下,在全局作用域中是無法訪問局部作用域中的變量的:

        def demo():
            c = 10  # 函數內部有一個變量 c

        print(c)     # 此時在函數外部打印c是會報錯的 因爲在全局作用域中沒有變量c

塊級作用域概念

在 python 中沒有塊級作用域的概念。函數內部可以是一個作用域,但沒有塊作用域(比如if / for ..的作用域)。類似於在其他語言中的塊級作用域 在python中這些塊級作用域就和函數作用域是一個級別的。所以 在python中可以在 for 循環外部獲取 for 循環內部的值

   def demo():
          c = 10      # 函數內部變量c
          for i in range(0, 10):      # for循環
              a = 'tiger'     # for循環內部變量a
              c += 1          # for循環內部操作for循環外部變量c
          print(a)            # 在python中 可以在for循環外部直接獲取到for循環內部的變量
          print(c)            # 此時 函數內部變量c 相對於for循環內部是 全局變量

    demo()

作用域鏈

和JS一樣,python中也有作用域鏈:

     c = 1
     def func1():
         c = 2     # 如果沒有此處變量c的聲明 那麼就會向上一級請尋找 即 c = 1
         def func2():
             c = 3   # 如果沒有此處變量c的聲明 那麼就會向上一級請尋找 即 c = 2
             print(c)
         func2()
     func1()

局部變量變成全局變量

我們知道, 一般情況下,在全局作用域中是無法訪問局部變量的。但是可以通過關鍵字global 將一個局部變量變成一個全局變量,從而就可以在全局作用域中訪問局部中的變量了

   def demo():
       global c    # 通過global關鍵字將局部變量變成全局變量
       c = 100
   demo()
   print(c)    # 雖然沒有在全局中定義變量c,但是在函數內部使用了global關鍵字來定義變量c,使c變成一個全局變量
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章