【发布时间】:2014-09-15 07:22:20
【问题描述】:
我正在使用 pygame 在 python 中制作一个简单的函数绘图仪。我希望用户能够通过控制台输入x和y的功能。例如:math.sin(x) + math.sin(y) 应该是一个有效的输入。
我该如何做到这一点?
注意:x 和 y 尚未分配任何值,因为该值将替换变量输入。
【问题讨论】:
标签: python variables input plot
我正在使用 pygame 在 python 中制作一个简单的函数绘图仪。我希望用户能够通过控制台输入x和y的功能。例如:math.sin(x) + math.sin(y) 应该是一个有效的输入。
我该如何做到这一点?
注意:x 和 y 尚未分配任何值,因为该值将替换变量输入。
【问题讨论】:
标签: python variables input plot
使用 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>
【讨论】:
但您不是“对每个点都使用 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 等价物。
【讨论】: