python在lua中是否有类似于_ENV的东西?

时间:2018-12-16 14:08:06

标签: python

在Lua脚本中,当我不得不写太多行时:

obj.age=17
obj.name="jack"
obj.country="US"
...
obj.weight=100

我可以使用_ENV来简化代码:

_ENV=obj
age=17
name="jack"
country="US"
...
weight=100

也就是说,我可以避免重复输入obj.,python中有没有办法做到这一点?我在net buf上搜索时一无所获。

我需要使用python脚本作为配置文件,后一种格式似乎更好。

3 个答案:

答案 0 :(得分:3)

为什么不

obj = {
    'age': 17,
    'name': 'jack',
    'country': 'US',
    ...,
    'weight': 100
}

?换行符在这里不需要\,因为它们位于一对大括号内。

当然,这会建立一个字典,但是您真的需要配置中的特定类的对象吗?

答案 1 :(得分:1)

您可以使用SimpleNamespace(仅适用于Python3)轻松做到这一点

import types
obj = types.SimpleNamespace(
    age=17
    name="jack"
    country="US"
    ...
    weight=100
)

答案 2 :(得分:0)

您真的一口气问了两个问题。

关于存储配置的第二点,您可以

  • 用“ config.py”模块写您的变量。然后import config as cfg并使用cfg.限定名称进行操作。您也可以from config import *直接使用,但是不建议这样做,并且您会失去原始配置模块中的写入功能。它们被复制到当前名称空间中,而不是链接的。

  • 像Walter所说的那样,仅使用字典来保存您的设置。它们是明显的内置类型。

  • 制作自己的Configuration类,实例化cfg并通过cfg.限定符操作属性。
  • 使用架子和带有shelve模块的持久字典
  • 由于书架使用 pickle ,并且这是主要用于Python(我认为)的二进制格式来存储对象,因此您可能更喜欢使用一些更人性化的开放格式,如DeepSpace和Cartucho所建议的(请参阅.ini的configparser等)。
  • 很像类情况,使用一个命名元组或SimpleNamespace(不知道这一点),如Wouda和luminousmen所说。

可能还有更多选择,但我认为该列表足以满足大多数口味。

现在第一个问题是,我认为这是一个很好的问题,我几乎可以肯定答案是否定的,您无法在Python中做到这一点。从here中,我发现thisself使用义务的原因。安全性,明确性和性能。我想如果允许,您也可以将其用于self,也许这就是为什么您不能使用它。

我有时也会错过该功能。