所以,我正在制作一个程序(希望如此),它是一个“改进的”命令提示符。
在我的程序中,我希望它从文本文件中获取所有行。
文本文件将包含如下所示的行:
desktop=C:\Users\%username%\Desktop
scripts=D:\Scripts
Run Code Online (Sandbox Code Playgroud)
我希望我的程序做的是通读它,并创建新的变量,例如:
desktop = "C:\Users\%username%\Desktop"
scripts = "D:\Scripts"
Run Code Online (Sandbox Code Playgroud)
我知道可能有更好、更安全的方法来做到这一点,但现在,我想这样做。到目前为止,这是我的代码(它不起作用):
with open("custom_shortcuts.txt","r") as f:
customShortcuts = [x.strip('\n') for x in f.readlines()]
for i in customShortcuts:
parts = i.split("=")
varName = str(parts[0])
varValue = str(parts[1])
eval("varName = varValue")
Run Code Online (Sandbox Code Playgroud)
如您所见,我尝试使用 eval(),但失败了。
例如,以下代码不是内联的:
with x:
do(stuff)
Run Code Online (Sandbox Code Playgroud)
我可以像这样单行:
with x: do(stuff)
Run Code Online (Sandbox Code Playgroud)
但是我想知道是否有一种方法可以做这样的事情(内联):
a = [(lambda x: with x: do(stuff))(x) for x in someList]
Run Code Online (Sandbox Code Playgroud)
编辑:
详细说,我有一个对象列表,每个对象都有自己的上下文。这意味着do(stuff)使用时的行为会有所不同,with x并且上面的语句将遍历该列表中的每个对象,输入它们的上下文,运行do(stuff),然后继续下一个。
由于按照我的尝试进行此操作无效,因此我想知道是否有任何方法以及如何执行此操作。
上面代码的扩展版看起来像这样(并且可以正常工作):
a = []
for x in someList:
with x: a.append( do(stuff) )
Run Code Online (Sandbox Code Playgroud)