python-局部變量與全局變量作用域


局部變量

  • 局部變量,就是在函數內部定義的變量
  • 其作用范圍是這個函數內部,即只能在這個函數中使用,在函數的外部是不能使用的
  • 因為其作用范圍只是在自己的函數內部,所以不同的函數可以定義相同名字的局部變量(打個比方,把你、我是當做成函數,把局部變量理解為每個人手里的手機,你可有個iPhone8,我當然也可以有個iPhone8了, 互不相關)
  • 局部變量的作用,為了臨時保存數據需要在函數中定義變量來進行存儲
  • 當函數調用時,局部變量被創建,當函數調用完成后這個變量就不能夠使用了
def my_func1():
    # 局部變量的作用域(使用范圍)在函數的內部 函數的外部無法使用
    num = 10  # 定義一個局部變量
    print(num)
# 調用函數
my_func1()  # 10
# 再定義一個函數
def my_func2():
    # 定義一個局部變量
    num = 10
    print(num)
# 在函數內部定義的局部變量名可以和其他函數中的局部變量名相同 是不沖突的
my_func2()  # 10

全局變量

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

打個比方:有2個兄弟 各自都有手機,各自有自己的小秘密在手機里,不讓另外一方使用(可以理解為局部變量);但是家里的電話是2個兄弟都可以隨便使用的(可以理解為全局變量)

  • 在函數外邊定義的變量叫做全局變量
  • 全局變量能夠在所有的函數中進行訪問
# 全局變量 或者 變量(作用域是在整個模塊內使用)
num = 10
# 分別在兩個函數內部使用了全局變量
def my_func1():
    print("my_func1", num)
def my_func2():
    print("my_func2", num)
print("函數外面", num)  # 函數外面 10
my_func1()  # my_func1 10
my_func2()  # my_func2 10

全局與局部變量
在子程序(即函數)中定義的變量稱為局部變量,在程序的一開始定義的變量稱為全局變量。
全局變量作用域是整個程序,局部變量作用域是定義該變量的子程序。

num = 10
def my_func1():
    # 在函數內部如果使用一個變量 他先從函數內部找 如果有直接使用
    # 如果函數內部沒有找到 會到函數外面找(全局變量)
    # 如果還是沒有找到 就報錯
    num = 20  # 其實是定義了一個和全局變量名相同的局部變量
    print("my_func1", num)
my_func1()  # my_func1 20
print("外面", num)  # 外面 10
num = 10
def my_func1():
    # 標識這函數內部不是定義一個局部變量 其實是對全局變量的進行修改
    global num
    # 對全局變量的值進行修改
    num = 20
    print("my_func1", num)
my_func1()  # my_func1 20
print("外面", num)  #外面 20

當全局變量與局部變量同名時:
在定義局部變量的子程序內,局部變量起作用;在其它地方全局變量起作用。

  • 當函數內出現局部變量和全局變量相同名字時,函數內部中的 變量名 = 數據 此時理解為定義了一個局部變量,而不是修改全局變量的值
  • 如果在函數中出現global 全局變量的名字 那么這個函數中即使出現和全局變量名相同的變量名 = 數據 也理解為對全局變量進行修改,而不是定義局部變量
  • 如果在一個函數中需要對多個全局變量進行修改,那么可以使用global a, b

school = "oldboy edu." 
def change_name(name):
    school = "Mage Linux"
    print("before change",name,school)
    name = "Alex Li"   #這個函數就是這個變量的作用域
    print("after change",name)
name = "alex"
change_name(name)
print(name)
print(school)   #顯示:oldboy edu.

 

school = "oldboy edu."   #全局變量
def change_name(name):
    global school   #在局部變量中改全局變量,用global
    school = "Mage Linux"
    print("before change",name,school)
    name = "Alex Li"   #這個函數就是這個變量的作用域
    print("after change",name)
print(school)   #函數調用之前,顯示:oldboy edu.
name = "alex"
change_name(name)
print(name)
print(school)   #函數調用之后,顯示:Mage Linux

 

def change_name():
    global name  #外面沒有這個全局變量,里面定義,最好不要用!!
    name = "alex"
change_name()
print(name)
names = ["Alex","Jack","Rain"]
def change_name():
    names[0]="金角大王"   #除了字符串和整數,列表、字典、集合、類是可以在局部中改全局變量
    print("inside func",names)
change_name()
print(names)


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM