将未定义的参数传递给 Python 函数 [UX 驱动]
Pass Undefined Argument To Python Function [UX Driven]
我想要一个绘图界面(我做了 Allllooottt of plotting),用户可以在其中输入未定义的变量。
所需界面
plot(ax,time,n1) # Returns Name Error
当前界面
plot(ax,'time','n1')
我知道这可能是一项艰巨的任务,但我很好奇 Stack Overflow 的天才是否能找到一种方法来做到这一点。到目前为止,我已经尝试了一个装饰器,但那是行不通的,因为错误没有发生在函数中,而是发生在函数的调用中。尽管如此,我仍然对解决方案感兴趣......即使它很麻烦。
当前代码
def handleUndefined(function):
try:
return function
except NameError as ne:
print ne
except Exception as e:
print e
@handleUndefined
def plot(self,**args):
axesList = filter(lambda arg: isinstance(arg,p.Axes),args.keys())
parmList = filter(lambda arg: arg in self.parms, args.keys())
print axesList
print parmList
fig,ax = p.subplots()
plot(ax,time,n1)
我正在设计一个绘图界面,人们可能会在其中绘制 20 个绘图/分钟,因此在这里为他们提供更少的语法很重要。
使用 exec
被认为是邪恶的(或者至少是一种不好的做法),但这是我想出的唯一方法,可以根据运行前未知的字符串值动态设置变量:
strg = 'time' # suppose this value is received from the user via standard input
exec(strg + " = '" + strg + "'")
print time # now we have a variable called 'time' that holds the value of the string "time"
使用此技术,您可以定义将动态保持 "their own name" 的变量。
所以我已经放弃寻找解决方案,但很低,我找到了解决方案。这并不明显,但我们可以依靠 python 的魔法方法将这些变量实际 link 放入全局列表 all 即 python'第一站是找变量。
我找到了一个解决方案,您可以使用 @public 装饰器向所有内容附加一些内容:
http://code.activestate.com/recipes/576993-public-decorator-adds-an-item-to-all/
从那里开始,解决方案是这样的
@public
class globalVariable(str):
_name = None
def __init__(self,stringInput):
self._name = stringInput
self.__name__ = self._name
def repr(self):
return self._name
# Hopefully There's a strong correlation
xaxis = globalVariable('trees')
yaxis = globalVariable('forest')
#Booya lunchtime
plot(trees,forest)
我想要一个绘图界面(我做了 Allllooottt of plotting),用户可以在其中输入未定义的变量。
所需界面
plot(ax,time,n1) # Returns Name Error
当前界面
plot(ax,'time','n1')
我知道这可能是一项艰巨的任务,但我很好奇 Stack Overflow 的天才是否能找到一种方法来做到这一点。到目前为止,我已经尝试了一个装饰器,但那是行不通的,因为错误没有发生在函数中,而是发生在函数的调用中。尽管如此,我仍然对解决方案感兴趣......即使它很麻烦。
当前代码
def handleUndefined(function):
try:
return function
except NameError as ne:
print ne
except Exception as e:
print e
@handleUndefined
def plot(self,**args):
axesList = filter(lambda arg: isinstance(arg,p.Axes),args.keys())
parmList = filter(lambda arg: arg in self.parms, args.keys())
print axesList
print parmList
fig,ax = p.subplots()
plot(ax,time,n1)
我正在设计一个绘图界面,人们可能会在其中绘制 20 个绘图/分钟,因此在这里为他们提供更少的语法很重要。
使用 exec
被认为是邪恶的(或者至少是一种不好的做法),但这是我想出的唯一方法,可以根据运行前未知的字符串值动态设置变量:
strg = 'time' # suppose this value is received from the user via standard input
exec(strg + " = '" + strg + "'")
print time # now we have a variable called 'time' that holds the value of the string "time"
使用此技术,您可以定义将动态保持 "their own name" 的变量。
所以我已经放弃寻找解决方案,但很低,我找到了解决方案。这并不明显,但我们可以依靠 python 的魔法方法将这些变量实际 link 放入全局列表 all 即 python'第一站是找变量。
我找到了一个解决方案,您可以使用 @public 装饰器向所有内容附加一些内容: http://code.activestate.com/recipes/576993-public-decorator-adds-an-item-to-all/
从那里开始,解决方案是这样的
@public
class globalVariable(str):
_name = None
def __init__(self,stringInput):
self._name = stringInput
self.__name__ = self._name
def repr(self):
return self._name
# Hopefully There's a strong correlation
xaxis = globalVariable('trees')
yaxis = globalVariable('forest')
#Booya lunchtime
plot(trees,forest)