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

Python:默认比较

秦经义
2023-03-14
问题内容

在Python 2.7中,我定义了一个空的新类:

In [43]: class C(object): pass
   ....:

然后创建新类的实例列表:

In [44]: c = [C() for i in xrange(10)]

然后尝试对列表进行排序:

In [45]: sorted(c)
Out[45]:
[<__main__.C object at 0x1950a490>,
 <__main__.C object at 0x1950a4d0>,
 ...
 <__main__.C object at 0x1950aad0>]

令人惊讶的是,即使我还没有定义一种比较以下实例的方法,该类也不会抱怨C

In [46]: dir(C())
Out[46]:
['__class__',
 '__delattr__',
 '__dict__',
 '__doc__',
 '__format__',
 '__getattribute__',
 '__hash__',
 '__init__',
 '__module__',
 '__new__',
 '__reduce__',
 '__reduce_ex__',
 '__repr__',
 '__setattr__',
 '__sizeof__',
 '__str__',
 '__subclasshook__',
 '__weakref__']

那里到底发生了 什么?这种行为的理由是什么(可能令人惊讶)?


问题答案:

我认为唯一的理由是可以方便地对对象进行排序,例如将其用作具有某些默认行为的字典键。语言定义中的相关章节位于:https : //docs.python.org/2/reference/expressions.html#not-
in

“一个对象被认为是小于还是大于另一个对象的选择是任意的,但是始终在程序的一次执行中进行。”

因此,当前使用内存地址比较对象的事实只是无法依靠的实现细节。唯一的保证是在执行过程中顺序保持一致。



 类似资料:
  • 问题内容: 我试图识别具有默认值NULL或未设置默认值的数据库列。为此,我正在执行查询。 在此查询的输出中,我正在获取未设置默认值(空)的列,但是我没有在获取默认值是NULL的列 问题答案: 在oracle中(至少11g),如果您不为列提供默认值,就好比给它。 看这个例子 更新 感谢@pratik garg的评论,现在我了解到您所要求的是一种查询列的方法。 由于如@PratikGrag所述,当您定

  • 我们知道,在调用函数时如果不指定某个参数, Python 解释器会抛出异常。为了解决这个问题,Python 允许为参数设置默认值,即在定义函数时,直接给形式参数指定一个默认值。这样的话,即便调用函数时没有给拥有默认值的形参传递参数,该参数可以直接使用定义函数时设置的默认值。 Python 定义带有默认值参数的函数,其语法格式如下: def 函数名(...,形参名,形参名=默认值):     代码块

  • 问题内容: 我希望模仿允许用户指定“默认”返回值的内置函数(如)的行为。我最初的尝试是这样做 问题是,如果用户希望成为其返回值,则此函数将引发异常。第二次尝试: 这解决了上述问题,并允许用户指定任何任意值,但是带来了麻烦,因为用户必须始终在其函数调用中进行指定;他们不能只提供最后。同样,可以使用,但如果用户偏爱该语法,则会阻止用户使用。 结合并提供了可行的解决方案,但感觉这需要付出很多努力。它还可

  • 问题内容: 是否有任何干净的方法将numpy设置为全局使用float32值而不是float64? 问题答案: 不是我知道的。您要么在调用任何数组的构造函数时需要显式指定dtype,要么将数组传递给float32(使用ndarray.astype方法)之前将其强制转换为float32(我认为这是问题所在)? )。如果您真正担心的是GPU情况,那么我赞成后者-在没有对numpy广播规则和非常精心设计的

  • 问题内容: 从控制台运行应用程序时,Python存在许多“无法编码”和“无法解码”的问题。但是在 IDE中,默认字符编码设置为UTF-8,我很好。 我四处寻找设置默认编码的方法,有人说在启动时会删除该函数,因此我们无法使用它。 那么什么是最好的解决方案? 问题答案: 这是一个更简单的方法(黑客),可为你提供从中删除的功能sys: 不过,这并不是一件安全的事情:这显然是一个,因为有意将其从sysPy

  • 问题内容: 有没有一种方法可以在python ElementTree中定义默认/无前缀的命名空间?这似乎不起作用… 这也不是: 可以,但是我必须在每个元素前加上前缀: 在OSX上使用Python 3.5。 编辑:如果答案为“否”,您仍然可以获得赏金:-)。我只是想要一个花了很多时间使用它的人的明确“否”。 问题答案: 没有简单的方法可以透明地处理默认名称空间。正如您已经提到的,为空名称空间分配非空