我正在使用pygame在python中创建一个简单的函数绘图器。我希望用户能够通过控制台以x
和y
的形式输入功能。例如:
math.sin(x) + math.sin(y)
应该是有效的输入。
我该如何做到这一点?
注意: x
和 y
尚未分配任何值,因为该值将替换输入中的变量。
答案 0 :(得分:0)
将exec
语句与def语句一起使用,可以从用户给出的字符串arg创建函数。
>>> arg = raw_input()
>>> arg
'math.sin(x) + math.cos(y)'
>>> exec 'def f(x,y): return ' + arg
>>> f
<function f at 0x000000000021F9E48>
答案 1 :(得分:0)
但你不是“为每个点使用eval”。一旦exec
编译代码f()
,就像正常函数一样。用这段代码做一些时间来自己看看
#! /usr/bin/env python
'''
exec speed test
'''
import sys, math
from random import seed, random
def main():
m = len(sys.argv) > 1 and int(sys.argv[1]) or 250000
def f(x, y):
return math.sin(x) + math.cos(y)
funcstr = 'math.sin(x) + math.cos(y)'
exec 'def g(x,y): return ' + funcstr in globals(), locals()
#print f, g
seed(42)
z = 0.0
for i in xrange(m):
z += f(random(), random())
#z += g(random(), random())
print z
if __name__ == '__main__':
main()
在* nix上你可以做time python progname.py
;对不起,我不知道Windows等价物。