【问题标题】:Is there a Python equivalent to Perls 'package' keyword是否有与 Perls 'package' 关键字等效的 Python
【发布时间】:2023-03-17 17:11:01
【问题描述】:

我想知道,Python 是否提供类似于 Perl 中的 package 关键字的功能。这个关键字实际上在代码中的任何地方创建了一个带标签的命名空间。

据我所知,Python 中类似的命名空间只有通过将代码放入文件并导入才能实现。但是如果我在变量中有代码(例如,从我的脚本的某个配置文件中读取)怎么办?

换句话说:有没有办法在任意命名空间内评估 Python 代码?在 Perl 中我会添加

package my_pack;

在该代码的开头,然后对其进行评估(在名为 my_pack 的命名空间内)

感谢您的帮助。

【问题讨论】:

  • '一些配置文件'不能分配新变量;您必须为此在当前脚本中分配一个变量。所以这永远不会导致名称冲突。或者产生您所指问题的具体代码是什么?
  • 如果我使用 eval 执行 Python 代码(我从脚本的某个配置文件中读取),该代码可以做任何事情,包括定义子例程和变量。
  • 啊,eval,同意(并反对!)。
  • ug。这是一种糟糕的配置文件方式
  • 我不想用所有的细节来打扰你。我的脚本是一个允许用户在配置文件中定义按钮和其他小部件的应用程序。每个小部件都与用户也可以定义的代码相关联。然后所有这些小部件都显示在 GUI 中(因此是用户可配置的)。所以我想知道的是,是否有等效于 package 关键字?

标签: python namespaces package


【解决方案1】:

不,Perl 和 Python 的模块系统的工作方式非常不同。无法显式声明特定的 Python 模块。

对于应该在特定模块的上下文中执行代码的 Python eval()exec(),请考虑哪些方面为您的目的定义了该模块 - 重要的方面可能是该模块的全局变量。您可以显式提供这些,并通过 globals() 函数捕获当前环境。环境只是一个字典,如果你想避免修改模块的环境,你可以复制它。

【讨论】:

  • 谢谢阿蒙;我不明白这一点,但从我刚刚发布的链接中,我明白了。
猜你喜欢
  • 1970-01-01
  • 2010-12-31
  • 1970-01-01
  • 2012-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-11-10
相关资源
最近更新 更多