我想通过存储在字典中来调用函数。 实际上,我会收集
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相同 我避免if-function因为它会花很多时间我猜 在C ++中我会写
switch(x)
case 1:
drawStar(2,1,s);
case 2:
drawStar(2,4,s);
case 3:
drawStar(2,7,s);
我相信C ++写这个很好但我必须用Python写 如果我问一个常见问题,我很抱歉,我真的不知道如何用Python写作
答案 0 :(得分:3)
函数是Python中的第一类对象,因此您可以将它们存储在字典中。例如,如果foo
和bar
是函数,而my_dict
是字典,则可以按以下方式将函数存储在字典中:
my_dict = {'foo': foo, 'bar': bar}
请注意,值为foo
和bar
是函数对象,而foo()
和bar()
是函数调用。
要致电foo
,您可以my_dict['foo']()
partial()
返回一个新函数,其行为与旧函数类似,但是传入的任何参数都已填充。以下是例如。 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
>>>