|
|
1
4
每个模块都有自己的全局。python的行为与预期完全一致。更新
围绕这一点,有各种各样的方法,具体取决于你想要什么。
选项6实际上是最危险的。调用者本身基本上成为函数的一个隐藏参数,因此类似于来自另一个模块的装饰器的东西可以在不发出警告的情况下破坏它。选项4只是使隐藏的参数显式化,所以它不那么脆弱。 如果您需要在两个以上的模块之间工作,那么选项6就不够好,因为它只提供当前的调用堆栈。选项3可能是最可靠的,因为你似乎正在尝试做什么。
模块在第一次导入时成为对象,并保存在
模块对象的
星形语法只允许在顶层使用。但请记住,它只是从模块对象中读取属性。这样您就可以获得所有模块属性的dict,比如
这会给你更多
但是,您可以使用exec使其成为顶级,而不是重新实现这个过滤逻辑。那么你能拿到的唯一奇怪的钥匙是
然后你可以
使用
|
|
|
2
1
这是一个有趣的问题,与字符串是不可变的这一事实有关。线
但是,一旦你打电话
这里有几个解决办法。最要紧的是把进口的东西
另一种选择是使用可变容器
第三种选择是
你要复印的原因是
|
|
|
3
0
全局在import语句的开头只导入一次。因此,如果全局是不可变的对象(如str、int等),则不会反映任何更新。但是,如果全局是一个可变的对象,比如列表等,那么更新将被反映出来。例如, GualAlx1.Py:
输出将按预期更改:
旁白更容易定义全局变量,如正态变量:
或者在编辑不可变对象的值时:
|