动态如果布尔值与模块查找
dynamic if boolean with module lookup
我是 python 的新手,我想找出一个问题,我正在尝试编写一个通用函数。
在这种情况下,我的 app.py
程序旁边有一个 settings_file.py
文件。 settings_file.py
是可选的。
settings_file.py
的内容:
myvariable = "foo"
在我的程序的前面,我(可选)导入设置文件:
try:
import settings_file
except ImportError:
pass
原生版本:
if settings_file.myvariable:
print "myvariable found from settings_file!"
return settings_file.myvariable
我想做什么:
element_name = "myvariable"
if settings_file.eval(element_name):
print "{} found from settings_file!".format(element_name)
return settings_file.element_name
我认为我正在努力解决的是 if 语句行,更具体地说,是 settings_file.eval(element_name)
部分。
我对此很陌生,我的理解是 python 应该为我将 element_name
解析回字符串。可能是我排版不正确
我无法解析变量名。
编辑:也许我没说清楚,或者误导了。我正在尝试 return 从我在其中编写此元素的通用函数返回设置文件中的值。我想要的结果是 "foo" 将被 returned,这是 settings_file.py
.
中变量 "myvariable" 的值
Edit2:我想我根据 @9769953
的回复得出了一些结论
if getattr(settings_file, element_name, None):
print "{} found from settings_file!".format(element_name)
return getattr(settings_file, element_name, None)
如果您正在评估变量名,或者想要灵活的变量名,10 次中有 9 次,您应该使用 dict
s。
在这里,还有(甚至)更多的事情要做:在尝试获取属性之前,您应该首先检查 settings_file
是否确实存在。然后,您可以使用 getattr(settings_file, element_name)
:
try:
import settings_file
except ImportError:
settings_file = None
...
element_name = "myvariable"
return getattr(settings_file, element_name, None)
which returns None
如果找不到 "myvariable"
,或者导入失败。它没有明确测试 settings_file
不是 None
,因为 getattr()
将只是 return None
,无论 element_name
的值如何。
我是 python 的新手,我想找出一个问题,我正在尝试编写一个通用函数。
在这种情况下,我的 app.py
程序旁边有一个 settings_file.py
文件。 settings_file.py
是可选的。
settings_file.py
的内容:
myvariable = "foo"
在我的程序的前面,我(可选)导入设置文件:
try:
import settings_file
except ImportError:
pass
原生版本:
if settings_file.myvariable:
print "myvariable found from settings_file!"
return settings_file.myvariable
我想做什么:
element_name = "myvariable"
if settings_file.eval(element_name):
print "{} found from settings_file!".format(element_name)
return settings_file.element_name
我认为我正在努力解决的是 if 语句行,更具体地说,是 settings_file.eval(element_name)
部分。
我对此很陌生,我的理解是 python 应该为我将 element_name
解析回字符串。可能是我排版不正确
我无法解析变量名。
编辑:也许我没说清楚,或者误导了。我正在尝试 return 从我在其中编写此元素的通用函数返回设置文件中的值。我想要的结果是 "foo" 将被 returned,这是 settings_file.py
.
Edit2:我想我根据 @9769953
的回复得出了一些结论if getattr(settings_file, element_name, None):
print "{} found from settings_file!".format(element_name)
return getattr(settings_file, element_name, None)
如果您正在评估变量名,或者想要灵活的变量名,10 次中有 9 次,您应该使用 dict
s。
在这里,还有(甚至)更多的事情要做:在尝试获取属性之前,您应该首先检查 settings_file
是否确实存在。然后,您可以使用 getattr(settings_file, element_name)
:
try:
import settings_file
except ImportError:
settings_file = None
...
element_name = "myvariable"
return getattr(settings_file, element_name, None)
which returns None
如果找不到 "myvariable"
,或者导入失败。它没有明确测试 settings_file
不是 None
,因为 getattr()
将只是 return None
,无论 element_name
的值如何。