当前位置: 首页 > 面试题库 >

添加号码进行设置

吕英豪
2023-03-14
问题内容

我在这里做错了什么?

a = set().add(1)
print a # Prints `None`

我正在尝试将数字添加1到空集。


问题答案:

Python中的一个约定是变异序列的方法返回None

考虑:

>>> a_list = [3, 2, 1]
>>> print a_list.sort()
None
>>> a_list
[1, 2, 3]

>>> a_dict = {}
>>> print a_dict.__setitem__('a', 1)
None
>>> a_dict
{'a': 1}

>>> a_set = set()
>>> print a_set.add(1)
None
>>> a_set
set([1])

某些人可能会认为此约定是“ Python中的可怕错误设计”,但是“设计和历史记录”
FAQ给出了此设计决定背后的原因(相对于列表):

为什么不list.sort()返回排序列表?

在性能很重要的情况下,仅对列表进行排序会造成浪费。因此,list.sort()将列表排序到位。为了提醒您这一事实,它不会返回已排序的列表。这样,当您需要已排序的副本但还需要保留未排序的版本时,您不会被愚蠢地误覆盖列表。

在Python 2.4中,添加了一个新的内置函数– sorted()。此函数根据提供的可迭代对象创建一个新列表,对其进行排序并返回。

您对该功能的特殊问题来自对创建集合的好方法的误解,而不是语言设计错误。正如Lattyware指出的那样,在Python
2.7及更高版本中,您可以使用set常量a = {1}a = set([1])按照Sven
Marnach的答案进行操作。
该add()方法将元素添加到集合中,但不会再次返回集合-它返回None。

a = set()
a.add(1)

或更好

a = set([1])

会工作。

顺便说一句,我喜欢Ruby的约定,即在使对象变异的方法之后放置一个感叹号,但我发现Python的方法可以接受。



 类似资料:
  • 问题内容: 我在Access 2013的数据库中有一个表。 我希望在它们旁边添加Rowid号: 问题答案: 一种方法是在子查询中使用该函数。不确定它的伸缩性是否合适,可能还有更好的方法…

  • 可以设置文本样式,以便在出现换行符之前添加破折号。 示例: Lorem ipsum dolor坐在那里,奉献给我们,我们的工作和伟大的礼物。我们的服务,我们的服务-------------------------------------------------------- 我爱你,我爱你,我爱你,我爱你,我爱你,我爱你,我爱你,圣骑士-------------------------------

  • 登录企业管理-订阅号-设置订阅号管理员

  • 问题内容: 我想在添加新元素时对CellTable中的行进行排序。 要标记UI,请使用UIBinder: 在小部件中,我创建了一个表格和分页: 然后我安装了一个选择模型: 并添加了几列: 接下来,我创建: 如果我使用这种方法,那么新行将添加到表的末尾。 添加时,我需要自动对行进行排序。 我该怎么做? 问题答案: 在创建提供程序之后立即创建排序处理程序: 然后为每个要作为排序依据的列设置一个比较器,

  • 所以信用卡号码有效的条件之一是“前4位数字之和必须比后4位数字之和少1”,我相信问题可能是它把破折号算作一个数字,但不确定。规则4是所有数字的和必须被4整除,这似乎有效,但规则5不是。 对不起,我对编码很陌生。

  • 我正在用Windows上的nodeJS编写一个提交后钩子脚本。以下代码调用最后一条提交消息: 为什么有2条新线路?我阅读了Unix和非Unix系统如何处理CR和LF。有点关于,但我不认为这是问题。