20201202 局部變量與全局變量做用域

1-1def test4(name,age=9999,*args,**kwargs):print(name)print(age)print(args)print(kwargs)
    logger("TEST4")def logger(source):print("from %s" % source)

test4('itachi',age=21,sex='m',hobby='sweet_rice_ball')--->itachi21()
{'sex': 'm', 'hobby': 'sweet_rice_ball'}from TEST4
運行結果沒有問題
1-2 局部變量def change_name(name):print("before change",name)
    name = "Uchiha Itachi"print("after change",name)

name = 'itachi'change_name(name)--->before change itachi
after change Uchiha Itachi# 局部變量,只在函數裏生效;這個函數就是這個變量的做用域
1-3school = 'zxcv edu'def change_name(name):
    school = 'Mage Linux'print('before change',name,school)
    name = 'Uchiha Itachi'age = 23print('after change',name)print(school)
name ='itachi'change_name(name)print(name)--->zxcv edu
before change itachi Mage Linux
after change Uchiha Itachi
itachi# 全局變量,在函數中是改不了的,函數做用域只在小函數中生效# 雖然叫一樣的名字,可是不要緊# 函數中默認,局部變量沒法修改全局變量
1-4 若是想在局部變量中修改全局變量,應該怎麼辦? 聲明 globalschool = 'zxcv edu'def change_name(name):global school     # 在函數中修改全局變量school = 'Mage Linux'print('before change',name,school)
    name = 'Uchiha Itachi'age = 23print('after change',name)

name ='itachi'change_name(name)print(name)print('school:',school)--->before change itachi Mage Linux
after change Uchiha Itachi
itachi
school: Mage Linux# 這種狀況是能夠修改的
1-1 若是將沒有定義的變量全局化def change_name():global name
    name = 'celestial'change_name()print(name)--->celestial# 說明這樣寫是沒有問題的,雖然這樣可行,可是永遠不要這麼作1-2 爲何不要這樣用?
函數能夠在程序中的不少地方調用,將會很難調試。全局變量是顯示定義,而不是在函數裏定義,這就是一種做死行爲。
1-3school = 'zxcv edu.'names = ['Celestial','Ocean','Earth']def change_name():
    names[0] = '天空'print('inside func',names)

change_name()print(names)--->inside func ['天空', 'Ocean', 'Earth']
['天空', 'Ocean', 'Earth']# 局部變量不能修改全局變量,如今爲何能修改?# 只有字符串和單獨的整數,是沒法在函數中修改的,稍微複雜一點的數據類型,列表,字典,集合和類都是能夠在局部中直接修改全局的 全局與局部變量
在子程序中定義的變量稱爲局部變量,在程序的一開始定義的變量稱爲全局變量。
全局變量做用域是整個程序,局部變量做用域是定義該變量的子程序。
當全局變量與局部變量同名時:
在定義局部變量的子程序內,局部變量起做用;在其它地方全局變量起做用。
相關文章
相關標籤/搜索