Execute a string as a command
有没有一种方法可以获取一个字符串并将其用作Python中的命令?
类似于下面的例子的东西。
1 2 3 4 5
| x ="import time"
x
time.sleep(1) |
我知道上面的例子行不通,那只是为了帮助你理解我在做什么。
- 你到底想做什么?
- 简单回答:是的。更好的答案是:是的,但你可能实际上不想。
- 我试图创建一个看起来像人工智能(实际上不是)的程序,它可以帮助我使用计算机,并根据所学内容学习新事物和创建新功能。我的意思是像'def'函数一样,我希望我的程序能够用'def'命令定义新的函数,并且该定义的名称将是字符串。
- 一个更好的例子是这样的。x="def name():"x
- 如果你想写一个可以自己写代码的程序…那不像是人工智能…那是人工智能…非常复杂的东西…如果这不是你真正想做的,你应该想出一个比Eval和Exec更好的方法。
- 我确实考虑过编写脚本,所以程序将所有内容保存到一个文本文件中,然后从那里开始工作。但问题是,我已经做了这样的程序可以重写自己,虽然如果它要创建一个"def",那么它需要(显然)创建一个新的"def"函数,该函数的名称与其他函数的名称不同,最简单的方法是使用字符串。
危险但强大的exec()和eval()正是你想要的:
python的eval()做什么?
运行字符串中包含的python代码
使用exec()(它在python 3.x中是一个函数,但在2.x中是一个语句)来计算语句,因此:
1
| exec('print(5)') # prints 5. |
和eval()计算表达式:
1 2
| x=5 #prints 5
eval('x+1') #prints 6 |
- 这应该是评论,而不是回答。
- 这是对他的问题的直接回答。我认为这应该是一个答案,但我认为这个问题不应该存在。
- 仅包含链接的答案在SO中不是答案。包括一个代码片段来改进您的答案。
- @ LutzHorn为什么?它在文本中全面简洁地回答了这个问题,警告使用eval的危险,并链接到更多(但至关重要的是:可选)信息。
- @这个链接与这个答案无关。
- 它甚至不应该被回答,有很多副本…stackoverflow.com/questions/1015142/…
- 如果我的问题有任何困惑,我道歉。
可以使用eval,eval()用于计算表达式,如果要执行语句,可以使用exec()。
见eval示例:
1 2 3 4 5 6 7
| def fun():
print"in fun"
eval("fun()")
x="fun()"
eval(x) |
参见exec的示例。