我正在使用pygame和box2d编写游戏引擎,并且在角色生成器中,我希望能够编写将在按键事件中执行的代码。
我的计划是在字符生成器中有一个文本编辑器,使您可以编写类似于以下内容的代码:
if key == K_a:
## Move left
pass
elif key == K_d:
## Move right
pass
我将以字符串的形式检索文本编辑器的内容,并且我希望代码在此Character方法的方法中运行:
def keydown(self, key):
## Run code from text editor
最好的方法是什么?
您可以使用该eval(string)
方法来执行此操作。
eval(code, globals=None, locals=None)
该代码只是标准的Python代码-这意味着仍然需要适当缩进。
全局变量可以有一个自__builtins__
定义的定义,这对安全性很有用。
eval("print('Hello')")
将打印hello
到控制台。您还可以指定要使用的代码的局部和全局变量:
eval("print('Hello, %s'%name)", {}, {'name':'person-b'})
不过要小心。任何用户输入都将被执行。考虑:
eval("import os;os.system('sudo rm -rf /')")
有很多解决方法。最简单的方法是:
eval("import os;...", {'os':None})
这将引发异常,而不是擦除硬盘驱动器。当您的程序是桌面程序时,如果人们重新分配脚本(这可能是我想像的),那么这可能是个问题。
这是一个eval
非常奇怪地使用的示例:
def hello() : print('Hello')
def world() : print('world')
CURRENT_MOOD = 'happy'
eval(get_code(), {'contrivedExample':__main__}, {'hi':hello}.update(locals()))
这在评估线上的作用是:
contrivedExample
脚本名称)。消费者可以立即致电contrivedExample.hello()
。)hi
为指向hello
事实证明(感谢评论者!)您实际上需要使用该exec
语句。哎呀 修改后的示例如下:
exec
定义(这看起来很熟悉!)Exec是一条语句:
exec "code" [in scope]
其中scope是局部变量和全局变量的字典。如果未指定,它将在当前范围内执行。
该代码只是标准的Python代码-这意味着仍然需要适当缩进。
exec
例exec "print('hello')"
将打印hello
到控制台。您还可以指定要使用的代码的局部和全局变量:
eval "print('hello, '+name)" in {'name':'person-b'}
exec
安全问题不过要小心。任何用户输入都将被执行。考虑:
exec "import os;os.system('sudo rm -rf /')"
正如评论者所指出的那样,它print
是3.0之前的所有Python版本中的声明。在2.6中,可以通过键入来更改行为from __future__import print_statement
。否则,请使用:
print "hello"
代替 :
print("hello")
问题内容: 我在String中有一段Java代码。 是否可以将此Java String转换为Java语句并运行它?可能使用Java反射? 问题答案: 正如已经建议的那样,您可以使用Compiler API即时编译,保存和运行代码。 另一个简洁的选择是使用beanshell。Beanshell不再积极开发,但是我可以保证它的可靠性,我已经在多个生产项目中成功使用了它。
本文向大家介绍如何在Python中执行包含Python代码的字符串?,包括了如何在Python中执行包含Python代码的字符串?的使用技巧和注意事项,需要的朋友参考一下 如果要执行Python语句,可以使用exec(string)。例如, 但是,如果您只想评估表达式的值,则可以使用。例如, 注意:同时使用eval和exec时请务必谨慎,因为它们是非常强大的功能 并可能在您的代码中引起非常细小的
问题内容: 我使用的是Max OS X 10.10.3,在没有模块存在之前,我终于在Python 3中对此进行了展示。 但是,现在当我尝试或时,我收到消息: 是否有任何Mac用户(使用Python 3)知道出了什么问题?有人使用过Zelle书和他的模块吗?谢谢。 问题答案: 为了后代:我遇到了同样的问题,并使用 该文件似乎以多种方式弄乱了(错误的结尾等);不知道怎么… 参见: 使用以下sed命令删
主要内容:Python字符串和数字的拼接在 Python 中拼接(连接)字符串很简单,可以直接将两个字符串紧挨着写在一起,具体格式为: strname = "str1" "str2" strname 表示拼接以后的字符串变量名,str1 和 str2 是要拼接的字符串内容。使用这种写法,Python 会自动将两个字符串拼接在一起。 【示例】以连续书写的形式拼接字符串: 运行结果: Python教程https://www.xnip.cn/
问题内容: 有没有更好的方法来编写jUnit 问题答案: 如果添加Hamcrest和JUnit4,则可以执行以下操作: 通过一些静态导入,它看起来要好得多: 所需的静态导入将是:
问题内容: 如何将Unicode字符串(包含额外的字符,如£$等)转换为Python字符串? 问题答案: