编辑:下面是一个更复杂示例的简化代码。
def lottery(amount, callback=None):
print(f'You spent {amount} on a lottery ticket.')
if callback:
callback(amount)
def win(amount):
print(f'You won ${amount * 1000}!!!')
def lose(amount):
print(f"Sorry, you spent {amount} and didn't win anything.")
编辑:“彩票”功能来自第三方软件包。我宁愿不修改他们的代码。
以下是有效的,但它们不是我想要的。
lottery(100, win)
输出:
你买彩票花了100英镑。你赢了10万美元!!!
lottery(100, callback=win)
输出:
你买彩票花了100英镑。你赢了10万美元!!!
lottery(100, lose)
输出:
你买彩票花了100英镑。对不起,你花了100英镑,没有赢得任何东西。
lottery(100, callback=lose)
你买彩票花了100英镑。对不起,你花了100英镑,没有赢得任何东西。
我正在寻找的是继续使用回调,让一个变量保持值“win”、“lose”、[编辑:或其他函数,如“win_1”、‘win_2’、…、‘win_n’或‘lose_1’、‘lose_2'、…、“lose_n”],并将该变量用作回调名称
如愿以偿的例子:
win_lose = 'win'
lottery(100, win_lose)
编辑:字符串“win”是动态构建的,如:
'win' + '_' + str(index)
或
'lose' + '_' + str(index)
愿望输出:
你买彩票花了100英镑。你赢了10万美元!!!
3条答案
按热度按时间h7appiyu1#
这可以完成工作:
juud5qan2#
你知道你可以把函数对象赋给变量,对吗?您只需执行
win_lose = win
(无引号),代码就会正常工作。如果需要一个包含函数名称的字符串,可以使用其__name__
属性:如果该函数是传入回调函数,print(callback.__name__)
将打印“win”。否则,如果两个函数都在同一个模块上,您可以使用
globals()
返回的字典从其名称中检索functin对象-这正是您所要求的-我只是不确定这是否真的是您所需要的:s4n0splo3#
一个适合我的解决方案是创建一个空的“win_lose()”函数,并将函数外部的“global()[]”字典分配给“win_loce”,如下所示。
检查每个功能的内存地址:
id(win_lose):1668264920544,id(win):1668164920832,id(lose):1668264921696
id(win_lose):1668264921696
你买彩票花了100英镑。对不起,你花了100英镑,没有赢得任何东西。
id(win_lose):1668264920832
你买彩票花了100英镑。你赢了10万美元!!!
这种方法有哪些缺陷?