'''
命名空间 : 每次在python解释器启动之后,就会在内存开辟一块内存空间,每当遇到一个变量时,就会在命名空间中,记录下变量名和值之间的关系,也即记录变量对应的值在内存空间中的
地址;当一个函数时,会在命名空间中记录下函数名以及函数的地址;
内置命名空间 : 解释器启动伊始开辟声明内置函数的内存空间;
局部命名空间 : 在函数内部,为变量或函数开辟的命名空间;
作用域 : 函数或变量的生命周期;
查看全局作用域中的所有内容 : globals()
查看局部作用域中的所有内容 : locals()
函数的嵌套 : 也即支持在一个函数内部可以定义另一个函数
慎用 :
当需要在局部作用域内,对全局变量进行操作时,需以global关键字声明,要直接对全局变量进行操作,这里的全局,包括绝对全局和相对全局,也即可以对所有大于当前作用域的所有
作用域内的所有变量进行声明
当需要对大于当前作用域,但又并非全局作用域内的变量进行操作时,需以nonlocal关键字声明该变量;
重点(神坑) : 定义函数时,在同一个代码块内,多次调用同一个函数,默认值参数对应的内存空间始终不变,对默认值参数进行修改也始终是在默认值参数对应内存空间上进行修改;
案例(从指针的角度理解) :
def test(value, lst = []) :
lst.append(value)
print(lst)
return lst
lst1 = test("a") #第一次调用test函数,在lst所在内存空间写入值a,打印a,并返回lst的地址
lst2 = test("b", []) #第二次调用test函数,由于我们这次没有使用lst的默认值,而是手动赋值,因此会为lst形参开辟一块新的内存空间,并写入值b,打印b,
返回新开辟的内存空间的地址;
lst3 = test("c") #第三次调用test函数,由于再次使用了lst的默认值,所以会在lst默认开辟的内存空间内写入c,也即["a", "c"],打印["a", "c"],并返回其地址;
print(lst1) #lst1接收到的为test函数为lst默认开辟的内存空间的地址,而默认的内存空间存的是["a", "c"],因此打印结果为["a", "c"]
print(lst2) #lst2接收的是为实参新开辟的内存空间的地址,存的值为["b"],因此打印结果为["b"]
print(lst3) #lst2接收到的为为默认形参lst开辟的内存空间的地址,存的值为["a", "c"],因此打印结果为["a", "c"]
结果 :
['a']
['b']
['a', 'c']
['a', 'c']
['b']
['a', 'c']
'''
创新互联建站主要从事
做网站、成都做网站、网页设计、企业做网站、公司建网站等业务。立足成都服务阜阳,10余年网站建设经验,价格优惠、服务专业,欢迎来电咨询建站服务:028-86922220
另外有需要云服务器可以了解下创新互联cdcxhl.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
本文题目:Python之全局与局部变量-创新互联
文章源于:
http://njwzjz.com/article/pcdcj.html