Python跨脚本修改主脚本全局变量无需传参的实现疑问
问题1:两个add_column函数修改var的逻辑差异疑问
首先你的预设预期存在错误:实际上script1自带的add_column也永久修改了var,从你给出的第一次打印输出就能验证:输出已经包含New from script1列,说明原var已经被修改。
两个函数都能修改原var的核心原因是Python的参数传递规则:
- pandas DataFrame属于可变对象,函数接收可变对象参数时,传递的是对象的内存引用,而非对象的副本
- 两个
add_column函数中执行的data["列名"] = 1属于原地修改操作,直接修改引用指向的内存空间里的数据,因此不管函数定义在哪个脚本文件中,都会直接修改原var的内容。
问题2:无参数的script2.add_column能否修改script1的var
默认无法直接实现,因为每个Python脚本(模块)都有独立的全局命名空间:script2中add_column函数里直接调用的var,默认只会查找script2模块自身的全局变量,和script1里的var属于两个完全独立的命名空间变量,不会自动关联。
如果要强制实现该效果,有两种不推荐的写法:
- 在
script2开头导入script1的var:from script1 import var,但这种写法极易出现循环导入问题,且代码耦合度极高 - 将
var挂载到Python内置命名空间,这种写法严重破坏代码规范,可读性和可维护性极差,完全不建议生产环境使用
内容的提问来源于stack exchange,提问作者Ruan
相关产品推荐
相关产品推荐

