1-1 def 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') ---> itachi 21 () {'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-3 school = 'zxcv edu' def change_name(name): school = 'Mage Linux ' print('before change',name,school) name = 'Uchiha Itachi' age = 23 print('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 如果想在局部变量中修改全局变量,应该怎么办? 声明 global school = 'zxcv edu' def change_name(name): global school # 在函数中修改全局变量 school = 'Mage Linux ' print('before change',name,school) name = 'Uchiha Itachi' age = 23 print('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-3 school = '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'] # 局部变量不能修改全局变量,现在为什么能修改? # 只有字符串和单独的整数,是无法在函数中修改的 # 稍微复杂一点的数据类型,列表,字典,集合和类都是可以在局部中直接修改全局的 全局与局部变量 在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。 全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。 当全局变量与局部变量同名时: 在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。
查看更多关于20201202 局部变量与全局变量作用域的详细内容...
声明:本文来自网络,不代表【好得很程序员自学网】立场,转载请注明出处:http://www.haodehen.cn/did162452