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']# 局部變量不能修改全局變量,如今爲何能修改?# 只有字符串和單獨的整數,是沒法在函數中修改的,稍微複雜一點的數據類型,列表,字典,集合和類都是能夠在局部中直接修改全局的 全局與局部變量 在子程序中定義的變量稱爲局部變量,在程序的一開始定義的變量稱爲全局變量。 全局變量做用域是整個程序,局部變量做用域是定義該變量的子程序。 當全局變量與局部變量同名時: 在定義局部變量的子程序內,局部變量起做用;在其它地方全局變量起做用。