我想通过存储在字典中调用函数。实际上,我会收集
dictStar = {1:...,2:..., ... , 100:....}
,但我只尝试3个第一个
star = [1,2,3]
dictStar = { #######################
1: drawStar(2,1,s), # Problem Here #
2: drawStar(2,4,s), # They always #
3: drawStar(2,7,s) # call 3 functions #
} #######################
def drawStar(row,column,s):
global plaRotate
plaRotate = plaRotate+0.5
sm2 = buildScaleMatrix(s/10,s/10,s/10)
column = (column - 5.5)*s
row = -(row - 1.0)*s
glUniform1i(fragMode, int(7))
Obj_platonic.draw(programID_1,projectionMatrix,np.dot(buildMoveMatrix(column,20,row),np.dot(buildRotateMatrix(0,1,0,plaRotate),sm2)))
glUniform1i(fragMode, int(4))
def dstar(): ####################
if len(star) > 0: # When I call #
for i in range(len(star)): # #
dictStar(star[i]) ####################
def removeStar(x):
global star
if x in star:
star.remove(x)
else:
print("No starID: ",x)
def main():
dstar()
只是我叫dictstar(任何东西)
他们将在dictstar中调用所有功能所以,我尝试
def: dictStar(x)
return
{
1: drawStar(2,1,s),
2: drawStar(2,4,s),
3: drawStar(2,7,s)
}
,但它发生的事情与上述T_T
一样我避免使用功能,因为它会花费大量时间,我猜
在C 中,我会写
switch(x)
case 1:
drawStar(2,1,s);
case 2:
drawStar(2,4,s);
case 3:
drawStar(2,7,s);
我相信C 写这本书,它效果很好,但我必须在python中写下
如果我问一个常见的问题,对不起,我真的不知道该如何写python
在字典中存储函数
功能是Python中的一流对象,因此您可以将它们存储在字典中。例如,如果 foo
和 bar
是函数,而 my_dict
是字典,则可以以以下方式将函数存储在字典中:
my_dict = {'foo': foo, 'bar': bar}
请注意,这些值是 foo
和 bar
,是函数对象,而不是 foo()
和 bar()
,是函数调用。
要致电foo
,您只能做my_dict['foo']()
用默认参数存储函数
使用functools.partial()
。
partial()
返回一个像旧功能一样的新功能,但有了您传递的任何参数,已经填写了。以下是EG。partial
的工作方式:
>>> import functools
>>> print_with_hello = functools.partial(print, "Hello")
>>> print_with_hello("World")
Hello World
>>> print_with_hello()
Hello
解决您的问题:
在您的情况下,dictStar
将按以下方式定义:
dictStar = {
1: functools.partial(drawStar, 2, 1),
2: functools.partial(drawStar, 2, 4),
3: functools.partial(drawStar, 2, 7)
}
现在,您可以调用词典,例如 dictStar.get(1)(s)
或 dictStar[1](s)
工作例如:
>>> import functools
>>> def drawStar(row,column,s):
... print """row: %s, column: %s, s: %s """ % (row,column,s)
...
>>> dictStar = {
... 1: functools.partial(drawStar, 2, 1),
... 2: functools.partial(drawStar, 2, 4),
... 3: functools.partial(drawStar, 2, 7)
... }
>>>
>>> s=10
>>> dictStar.get(1)(s)
row: 2, column: 1, s: 10
>>> dictStar[1](s)
row: 2, column: 1, s: 10
>>> dictStar[2](s)
row: 2, column: 4, s: 10
>>> dictStar[3](s)
row: 2, column: 7, s: 10
>>>