Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/321.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何调用可以是整数或函数的字典项?_Python_Function_Dictionary - Fatal编程技术网

Python 如何调用可以是整数或函数的字典项?

Python 如何调用可以是整数或函数的字典项?,python,function,dictionary,Python,Function,Dictionary,我正试图想出一个代码,将做统计分析的单位从桌面游戏供个人使用。我使用字典来存储单位数据,我遇到了一个问题,攻击造成的伤害可以是整数值,也可以是掷骰子“d6”的结果 我做了一个函数,它取一个值d6,并将其计算为d(6),然后运行简单的计算,以确定平均放炮次数3.5。为了方便起见,我希望能够在字典中保留“d(6)”,而不是手动转换为我想要输入的每个单元的3.5 在一个非常精简的单元字典示例中 unit = {'damage':1} 或 我正在寻找一种检查“损坏”的方法如果值是整数或字符串,则调用,

我正试图想出一个代码,将做统计分析的单位从桌面游戏供个人使用。我使用字典来存储单位数据,我遇到了一个问题,攻击造成的伤害可以是整数值,也可以是掷骰子“d6”的结果

我做了一个函数,它取一个值d6,并将其计算为d(6),然后运行简单的计算,以确定平均放炮次数3.5。为了方便起见,我希望能够在字典中保留“d(6)”,而不是手动转换为我想要输入的每个单元的3.5

在一个非常精简的单元字典示例中

unit = {'damage':1}


我正在寻找一种检查“损坏”的方法如果值是整数或字符串,则调用,如果值是字符串,则从中去掉引号并将其作为函数计算。我在搜索中运气不太好,因为我真的不知道我在搜索什么。

使字典中的每个值保持一致,并返回一个可以调用的lambda函数,
d
函数在被调用之前不会被计算

>>> unit = {'damage': lambda: 1, 'b': lambda: d(6) }
>>> unit['damage']()
1
>>> unit['b']()
result of d(6)

这几乎是一个意见问题。您可以在字典内容上保持一致,也可以在使用时对其进行测试。但是在任何一种情况下,您都不应该使用字符串,而应该使用callable,以便直接调用它,而不必使用皱眉的
eval

def process (dic, key):
    return dic[key]() if callable(dic[key]) else dic[key]
...
damage = process(unit, 'damage')
unit = {'damage': functools.partial(d, 6)}
Python使参数化函数的使用变得容易。例如,如果要返回
d(6)
的值,可以使用lambda:

unit = {'damage': (lambda : d(6))}
functools.partial

def process (dic, key):
    return dic[key]() if callable(dic[key]) else dic[key]
...
damage = process(unit, 'damage')
unit = {'damage': functools.partial(d, 6)}

你是如何填写这本词典的?您是否有一个名为
d6
的函数?看看
d(6)
是否总是返回相同的值(如您的示例所建议的预期值)或随机值?