局部变量与全局变量:
1.前后引用:
1 import time 2 3 def test1(**kwargs): 4 print(kwargs) 5 looger() 6 7 test1(name = 'ri',age = 1) # NameError: name 'looger' is not defined 注意函数先后引用的问题 8 9 def looger(): # 按格式打印时间 10 "print time" 11 time_formakes = "%Y-%m-%d %X" 12 time_current = time.strftime(time_formakes) 13 print(time_current) 14 15 # 如果内存中已经存在looger函数,那么可以在任何位置调用,如果没有,则必须在函数定义后调用
2.局部变量和全局变量
1 def change_name(name): 2 3 print("before name:",name) 4 name = 'Ri'# 局部变量,这个函数就是这个变量的作用域 5 print("after name:",name) 6 7 8 name = 'Rich' 9 change_name(name) 10 print("now name:",name) 11 12 ''' 13 before name: Rich 14 after name: RI 15 now name: Rich 16 ''' 17 # 可以把代码理解成一个个层次分明的模块,局部变量在最顶层是全局变量。 18 # 如果在函数内部想定义全局变量,可以使用global 定义 global name1 19 # name1 = 'sd' 20
3. 不要试图在函数中改变局部变量为全局变量,否则来回调用时容易出错
1 def change_name(): 2 global name 3 name = 'as' 4 5 change_name() 6 print(name) 7 # as 不要使用这种方法
4.修改列表,集合,字典等数据类型可以在局部改变全局
name = ['sam','xiaoming','wukong'] def change(): "test" name[0] = 'QWER' print(name) change() print(name) # ============================================================================= # ['QWER', 'xiaoming', 'wukong'] # ['QWER', 'xiaoming', 'wukong'] # =============================================================================
在子程序中定义的变量成为局部变量,在最高层定义的变量为全局变量
全局变量的作用域是整个程序,局部变量的作用域是定义该变量的子程序
当全局变量与局部变量同名时。在定义局部变量的子程序离,局部变量起作用,其他地方全局变量起作用