相关疑难解决方法(0)

'is'运算符与非缓存整数意外地运行

在玩Python解释器时,我偶然发现了关于is运算符的这个冲突的情况:

如果评估发生在它返回的函数中True,如果它在外部完成则返回False.

>>> def func():
...     a = 1000
...     b = 1000
...     return a is b
...
>>> a = 1000
>>> b = 1000
>>> a is b, func()
(False, True)
Run Code Online (Sandbox Code Playgroud)

由于is运营商评估id()的参与对象,这意味着ab指向同一个int函数内声明的时候实例func,但是,相反,它们指向一个不同的对象时,它的外面.

为什么会这样?


注意:我知道identity(is)和equal(==)操作之间的区别,如了解Python的"is"操作符中所述.另外,我也知道python正在对范围内的整数执行缓存,[-5, 256]"is"中所述,运算符与整数一起出现意外行为.

不是这里的情况,因为数字超出了该范围,我确实想要评估身份而不是平等.

python int identity python-3.x python-internals

41
推荐指数
2
解决办法
1420
查看次数

为什么在Python中添加分号会改变结果?

我用分号"发现了奇怪的行为"; 在Python中.

>>> x=20000;y=20000
>>> x is y
True
>>> x=20000
>>> y=20000
>>> x is y
False
>>> x=20000;
>>> y=20000
>>> x is y
False
Run Code Online (Sandbox Code Playgroud)

为什么第一次测试返回"True",其他测试返回"False"?我的Python版本是3.6.5.

python

16
推荐指数
1
解决办法
613
查看次数

python是带字符串的运算符行为

我无法理解以下行为.我正在创建2个字符串,并使用is运算符来比较它.在第一种情况下,它的工作方式不同.在第二种情况下,它按预期工作.我使用逗号或空格的原因是什么,它False与比较is时显示,当没有使用逗号,空格或其他字符时,它给出True

Python 3.6.5 (default, Mar 30 2018, 06:41:53) 
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> a = 'string'
>>> b = a
>>> b is a
True
>>> b = 'string'
>>> b is a
True
>>> a = '1,2,3,4'
>>> b = a
>>> b is a
True
>>> b = '1,2,3,4'
>>> b is a
False
Run Code Online (Sandbox Code Playgroud)

有关python以不同方式解释字符串的原因的可靠信息吗?我最初理解,ab指同一个对象.然后说 …

python identity python-3.x python-internals

8
推荐指数
1
解决办法
648
查看次数

为什么 a,b = 257, 257; python 中的 id(a) == id(b)

这是一个关于Python缓存机制的系列问题。

首先,我读了为什么 (0-6) 是 -6 = False?发现Python中有一个叫做整数对象池的东西,然后我尝试了一些其他情况,发现了一个超出我理解的现象

In : a = 257; b = 257; id(a) == id(b)
Out: False

In : a, b = 257, 257; id(a) == id(b)
Out: True

In : a, b = (1,), (1,); id(a) == id(b)
Out: False
Run Code Online (Sandbox Code Playgroud)

正如该问题的答案提到的,257不在小整数范围内,因此当您分配一个值为257的新变量时,应该有一个新对象,但a,b = 257, 257显示True。所以我假设这种分配方法会在初始化期间为它们分配两个相同的ID,但第三种情况证明这种假设是错误的。

您能否解释一下为什么这种分配方式对于非缓存整数(不在 [-5,256] 中)和元组有不同的行为?

python python-2.7 python-3.x

5
推荐指数
0
解决办法
328
查看次数

为什么多个赋值和单个赋值在python中表现不同

当我在代码中出现错误时,我正在使用python中的队列,即使代码看起来非常完美,但后者当我改变了赋值样式时,代码开始工作.代码之前看起来像这样.

    x=y=Queue()
    x.put("a")
    x.put("b")
    print y.get()
Run Code Online (Sandbox Code Playgroud)

后来我改为这个,它开始工作了

    x=Queue()
    y=Queue()
    x.put("a")
    x.put("b")
    print y.get(10)
Run Code Online (Sandbox Code Playgroud)

为什么两个代码的工作方式不同

python

4
推荐指数
1
解决办法
183
查看次数

Python多重赋值和引用

为什么多个赋值对int有明确的引用,而不是列表或其他对象?

>>> a = b = 1
>>> a += 1
>>> a is b
>>>     False
>>> a = b = [1]
>>> a.append(1)
>>> a is b
>>>     True
Run Code Online (Sandbox Code Playgroud)

python list variable-assignment

3
推荐指数
1
解决办法
823
查看次数