有没有办法找到 min 函数选择的变量的名称?
Posted
技术标签:
【中文标题】有没有办法找到 min 函数选择的变量的名称?【英文标题】:Is there a way for finding the name of the variable that was selected by the min function? 【发布时间】:2021-12-11 08:50:37 【问题描述】:在下面的 Python 代码中,我只是将 OPN_24n4
指定为 Node_23n3
或 Node_24n4
的最小值。但是,我也想知道所选变量的名称。有没有一种简洁的方法来做到这一点?我想我可以使用某种 if
语句,但我认为可能有一个我不知道的功能。
OPN_24n4 = min(Node_23n3, Node_23n4)
【问题讨论】:
如果只是两个变量那么简单,你只需要一个 if 语句if Node_23n3 > Node_23n4: ... else ...
(只要你不在乎它们是否相等)。不需要其他功能。如果你有两个以上,最好使用键和值的字典,而不是单独的变量。
" 但是,我也想知道选择的变量的名称。有没有简洁的方法?"不,因为没有选择变量。 min
(就像您调用的任何其他函数一样)永远不会看到您的变量名称,实际上永远不会看到它提供的 值 已经被命名为变量。你同样可以写min(1, 2)
。
我觉得如果你解释更多你试图解决的问题,人们将能够告诉你为什么你不需要学习变量的名称
如果您只想跟踪第一个或第二个参数是否最小,那么您可能需要一个返回包含位置的元组的函数。 find_min = lambda x, y: (x, 1) if x <= y else (y, 2)
【参考方案1】:
min
、max
和 sorted
可以采用 key 函数,该函数可以操作输入以便对输入的某些部分或其他内容进行比较,以及我们可以使用它,然后使用变量的名称及其值创建元组,并使用适当的键函数得到我们想要的结果
>>> min(("var1",10),("var2",2), key=lambda x:x[1])
('var2', 2)
>>>
【讨论】:
【参考方案2】:如果您使用列表,您可以使用 index 方法获取最小值的索引
>>> x = [5,3,7,1,9]
>>> x.index(min(x))
3
>>>
【讨论】:
【参考方案3】:您似乎不太可能需要这样的解决方案,而且它可能相对脆弱,但是借用 this answer,您可以使用 inspect 创建这样的解决方案:
import inspect
def named_min(*args):
min_val = min(args)
callers_local_vars = inspect.currentframe().f_back.f_locals.items()
named_var = [var_name for var_name, var_val in callers_local_vars if var_val is args[args.index(min_val)]][0]
if args.count(min_val) > 1:
named_var = 'multiple'
return min_val, named_var
Node_23n3 = 0
Node_23n4 = 1
OPN_24n4, name = named_min(Node_23n3, Node_23n4)
print(OPN_24n4, name)
Node_23n4 = 0
OPN_24n4, name = named_min(Node_23n3, Node_23n4)
print(OPN_24n4, name)
Node_23n3 = 2
OPN_24n4, name = named_min(Node_23n3, Node_23n4)
print(OPN_24n4, name)
Node_23n5 = -1
OPN_24n4, name = named_min(Node_23n3, Node_23n4, Node_23n5)
print(OPN_24n4, name)
这确实可以满足您的需求:
0 Node_23n3
0 multiple
0 Node_23n4
-1 Node_23n5
但我当然不会推荐它。
【讨论】:
以上是关于有没有办法找到 min 函数选择的变量的名称?的主要内容,如果未能解决你的问题,请参考以下文章
有没有办法找到要在 GetProcAddress 中使用的 C++ 错位名称?