gpt4 book ai didi

python - 我可以使用字典来调用相同的函数但不同的参数吗?

转载 作者:行者123 更新时间:2023-11-30 22:23:46 26 4
gpt4 key购买 nike

我想通过存储在字典中来调用函数。其实我会收集

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上编写

最佳答案

在字典中存储函数

函数是 Python 中的一流对象,因此您可以将它们存储在字典中。例如,如果 foobar 是函数,而 my_dict 是字典,则可以按以下方式将函数存储在字典中:

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

请注意,这些值为 foobar,它们是函数对象,而不是 foo()bar() 这是函数调用。

要调用foo,您只需执行my_dict['foo']()

<小时/>

使用默认参数存储函数

利用functools.partial() .

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
>>>

关于python - 我可以使用字典来调用相同的函数但不同的参数吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47959908/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com