作者KSJ (阿真)
看板Python
标题Re: [问题] 新手请益
时间Fri Mar 20 15:22:05 2009
看完一系列的讨论 找了一些资料 整理了一下
--以下是is的用法--
先找找Python org~ 2.x版的 (3.x版的写的也差不多)
http://docs.python.org/library/stdtypes.html#boolean-operations-and-or-not
里面的解释是: (网页里的其中一行...|||)
is object identity
就是说 is 这个comparision是问
例如: x is y == x跟y是不是同一个object
object的观念我还在努力 并不是很熟 感觉是跟pointer很像(但pointer我也不熟 囧)
但我猜测 上面的例子
'e ' 跟 e 想必是不同的object
於是我google "python pointer" 里面的一篇:
http://mail.python.org/pipermail/python-list/2003-March/192973.html
提到:
Actually, everything in Python is "pointer to something real". This is
called "object reference" in Python.
所以'e '也许被放到不同的地方去了(pointer to something real)
也就跟e这个变数(里面放'e ')所放的位置不同 所以是false
并在shell里的测试
过程:
>>> def func(a):
return a
>>> a=func
>>> b=func
>>> a is b
True
>>> a is func
True
>>> a
<function func at 0x011A6DB0>
>>> b
<function func at 0x011A6DB0>
>>> func
<function func at 0x011A6DB0>
可以看到a 跟 b 跟func 是放在同个地方 (在python里应该是指同一个"object"吧?)
--以上是is的用法讨论--
※ 引述《Tiberius (渴望平凡的幸福)》之铭言:
: ※ 引述《justlink (('(oo)'))》之铭言:
: : 版本 3.1a
: : 使用 win32 idle
: : e = "e "
: : print(e is "e ")
: : 得到True
: 这是 "e " 被自动 intern 了,所以两者是「同一个物件」
: : Shell 底下
: : False
: : 囧rz 这是?
: 这是没有被 intern 的情形
: 请参考内建函式 intern() 的说明,一般来说「不要假设字串会被自动 intern」
: 比对字串内容是否相符的时候,请用 ==
对於以上 我接着做了测试:
>>> intern(a('e '))
'e '
>>> print intern(a('e ')) is 'e '
False
似乎在手动intern之下 还是跟'e '所在的位置不同 也就是之前提到的
Actually, everything in Python is "pointer to something real". This is
called "object reference" in Python.
不知道是我在用python 2.4.1版的问题还是其他
所以我觉得是否是在3.1a版的改变?!(我没抓来测)
不过3.x版的参考手册又写的跟2.x版的观念差不多(我看起来是一样)
也就是所谓的object identity
我也对3.1版 测试的True 感觉怪怪的
希望有版友可以一起讨论、帮忙解答
: : 另外关於
: : round(2.5)
: : 这个问题的答案为何是2?
: python 3.0 的 round() 改成 round-to-even
--
※ 发信站: 批踢踢实业坊(ptt.cc)
◆ From: 140.112.63.199