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']# 局部变量不能修改全局变量,现在为什么能修改?# 只有字符串和单独的整数,是无法在函数中修改的,稍微复杂一点的数据类型,列表,字典,集合和类都是可以在局部中直接修改全局的 全局与局部变量
在子程序中定义的变量称为局部变量,在程序的一开始定义的变量称为全局变量。
全局变量作用域是整个程序,局部变量作用域是定义该变量的子程序。
当全局变量与局部变量同名时:
在定义局部变量的子程序内,局部变量起作用;在其它地方全局变量起作用。

 

上一篇:mysql_0n-常见函数-211116


下一篇:数据库存储过程插入百万数据