【问题标题】:Are there any uses of the empty tuple in Python?Python中的空元组有什么用途吗?
【发布时间】:2011-06-17 05:10:17
【问题描述】:

空元组是否还有其他目的(除了因为需要而存在)吗?或者:你会用空元组做什么?如果有什么。我只是找不到答案(嗯,一个肯定的答案,如:“是的,有”),请帮我解决这个问题。 “用于测试另一个元组是否为空”不是可接受的答案,因为我们应该为此使用 'not' 运算符。

【问题讨论】:

  • “任何其他目的”?除了什么?
  • 除了使 python 元组定义在数学上正确。嗯,差不多。

标签: python


【解决方案1】:

您可能希望将函数的参数存储为元组,而无需事先知道函数的结构。如果你需要存储参数的函数没有参数,你需要存储一个空元组。

这只是为什么最好不要质疑边缘情况的存在的众多示例之一,因为我们想不出它们的用途。支持边缘情况的需求很快就会出现。

【讨论】:

  • 我不质疑它的存在,空元组在数学上是正确的。我只是想知道不同的人可能会如何使用它。
  • “可能希望将函数的参数存储为元组”?它们一个元组。 *args 一个可能为空的元组。
  • @S.Lott:有趣的是您可能想要存储它们,而不是它们是一个元组(我已经知道)这一事实。但是既然您提到了,函数参数作为元组传递的事实本身就是有时需要零长度元组的情况。
  • 马塞洛是对的。想一想带有 args 参数的 apply() 参数是必需的,而不是可选的。你会使用一个空元组。
  • @Lennart:“边缘”并不意味着频率低。我的意思是它在某个范围的外边缘。这种情况有一个特殊的名称,因为这种情况通常会导致算法或基础数学的崩溃;例如,在列表为空之前,计算数字列表的平均值是可以的;因此,edge case len(L) == 0 在您想要平均值时会导致问题。
【解决方案2】:

元组表示任意值序列。当需要描述一个空的值序列时,可以使用空元组。

【讨论】:

  • @adirau:这就像询问何时需要空列表或空字符串。或内容为“Floprzy”的字符串。 :)
  • 可能是的。或者更好,请允许我改写:“这就像问你什么时候需要一个空的不可变对象”并将可变对象留在问题之外
【解决方案3】:

这是什么时候。

def tuple_of_primes_less_than( n ):
    if n <= 2: return ()
    else:
        x, p = set( range(2,n) ), 2
        while p <= max(x):
            for k in range(2,int(2+math.sqrt(p))):
                x.discard(k*p)
            p += 1
        return tuple( sorted( x ) )

【讨论】:

  • @adiru:你问这个问题之前不是很明显吗?
  • 显然不是。你的问题应该是“为什么不明显?”我想我被它的不变性和空虚性所欺骗了:)
  • 现在我是你函数代码的消费者,这很明显。
  • 不好的例子。相同类型的对象的集合应该是列表。例如,参见this great answer(这是我现在发现的,但我记得在有信誉的来源中看到过同样的想法)。
  • 我必须同意@oleh-prypin。你想要所有的素数,所以如果没有素数,你返回一个大小为 0 的列表。
猜你喜欢
  • 1970-01-01
  • 2011-08-07
  • 2017-04-13
  • 2012-12-31
  • 2014-10-06
  • 1970-01-01
  • 2012-11-29
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多