我可以使用字典来调用相同的函数,但可以使用不同的参数



我想通过存储在字典中调用函数。实际上,我会收集

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中的一流对象,因此您可以将它们存储在字典中。例如,如果 foobar是函数,而 my_dict是字典,则可以以以下方式将函数存储在字典中:

my_dict = {'foo': foo, 'bar': bar}

请注意,这些值是 foobar,是函数对象,而不是 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 
>>> 

相关内容

最新更新