【问题标题】:Returning variable name rather than it's value [duplicate]返回变量名而不是它的值[重复]
【发布时间】:2019-10-16 13:37:18
【问题描述】:
def my_function(x, y, z):
    mini = min(x,y,z)
    return mini

a = 78*453
b = 654-877
c = 98765*785

print(my_function(a,b,c))

我正在学习 Python 中的函数,我想知道如何在这段代码中返回变量名而不是它的值。 我知道变量 b(分配给局部变量 y)具有最小值,但我如何打印“b”或“y”而不是“-223”?

【问题讨论】:

  • my_function() 没有收到任何变量 - 它只收到数值,与保存它们的变量完全没有联系。它可以返回"first"、"second"、"third" 之类的东西来指示哪个值最小,但它不可能返回"a"、"b"、"c",因为它无法知道这些名称.

标签: python


【解决方案1】:

min() 会找到最小值,所以它不关心参数名称。但是min() 也可以将可迭代作为参数。

data = [2, 3, 1]
print(data.index(min(data))

这样你会得到最小值的位置。

您还可以使用更复杂的方法 - 存储一些元数据,例如名称和数据:

data = [('a', 3), ('b', 0), ('c', 1)]

这里有元组列表,但要找到最小值,您必须让知道 min 用于比较的值:

minValue = min(list(map(lambda x: x[1], data)))
minPosition = list(map(lambda x: x[1], data)).index(minValue)
print(data[minPosition]) # prints ('b', 0)

不建议直接搜索变量名,以后有人可能会重构一些东西,你的代码会被破坏。最好将更多信息存储为数据。

【讨论】:

    【解决方案2】:

    您可以将dict 作为参数传递给您的函数,并将变量名称设置为dict 键,如下所示:

    d={'a': 78*453, 'b': 654-877, 'c': 98765*785}

    然后获取具有最小值的键名,如下所示:

    def my_function(d):
        return min(d, key=d.get)
    

    【讨论】:

      【解决方案3】:

      尽管它可能不是可取的,但从 python 3.8 开始,您可以在 f-strings 中使用新的=。 举个例子:

      def return_value(a):
          return a
      
      def return_variable_name_with_value(a):
          return f'{a=}'
      
      print(return_value(5))
      # Output:
      # 5
      print(return_variable_name_with_value(5))
      # Output:
      # a=5
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-12-27
        • 2019-07-28
        • 2019-11-07
        • 1970-01-01
        相关资源
        最近更新 更多