相关疑难解决方法(0)

为什么(0-6)是-6 =假?

可能重复:
Python"is"运算符使用整数意外运行

今天我试着调试我的项目,经过几个小时的分析,我得到了这个:

>>> (0-6) is -6
False
Run Code Online (Sandbox Code Playgroud)

但,

>>> (0-5) is -5
True
Run Code Online (Sandbox Code Playgroud)

你能解释一下,为什么?也许这是某种错误或非常奇怪的行为.

> Python 2.7.3 (default, Apr 24 2012, 00:00:54) [GCC 4.7.0 20120414 (prerelease)] on linux2
>>> type(0-6) 
<type 'int'>
>>> type(-6) 
<type 'int'>
>>> type((0-6) is -6)
<type 'bool'>
>>> 
Run Code Online (Sandbox Code Playgroud)

python debugging integer cpython

129
推荐指数
4
解决办法
4897
查看次数

当'[]是[]'并且'{}是{}'返回False时,为什么'()是()'返回True?

根据我的意识,使用[], {}()实例化对象会分别返回一个list, dict或新的实例tuple; 具有新标识的新实例对象.

这对我来说非常清楚,直到我实际测试它并且我注意到() is ()实际返回True而不是预期False:

>>> () is (), [] is [], {} is {}
(True, False, False)
Run Code Online (Sandbox Code Playgroud)

正如所料,与创建对象时,这种行为还表现list(),dict()tuple()分别为:

>>> tuple() is tuple(), list() is list(), dict() is dict()
(True, False, False)
Run Code Online (Sandbox Code Playgroud)

我可以在状态文档中tuple()找到的唯一相关信息:

[...]例如,tuple('abc')退货('a', 'b', 'c')tuple([1, 2, 3])退货(1, 2, 3).如果没有给出参数,构造函数会创建一个新的空元组().

可以说,这还不足以回答我的问题.

那么,为什么空元组具有相同的身份,而其他像列表或词典不具有相同的身份?

python identity tuples python-3.x python-internals

47
推荐指数
1
解决办法
3853
查看次数

Python'是'vs JavaScript ===

Python使用'is'似乎与JavaScript'==='类似,但并不完全相同.

在这里,他们谈论确切的实例:http: //www.learnpython.org/en/Conditions

在这里(对于JS),他们谈论"相同和相同的类型". http://www.w3schools.com/js/js_comparisons.asp

你可以有两个不同的(例如)一串"Bob"的实例,当使用'is'进行比较时,它们不会返回true吗?或者它与===相同?

我猜这与严格与非严格类型的语言有关....

javascript python

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

为什么空格会影响相等字符串的身份比较?

我注意到为相同的字符串添加空格使得它们比较不相等is,而非空间版本比较相等.

a = 'abc'
b = 'abc'
a is b
#outputs: True

a = 'abc abc'
b = 'abc abc'
a is b
#outputs: False
Run Code Online (Sandbox Code Playgroud)

我已经阅读了关于将字符串与==和进行比较的问题is.我认为这是一个不同的问题,因为空格字符正在改变行为,而不是字符串的长度.看到:

a = 'abc'
b = 'abc'
a is b # True

a = 'gfhfghssrtjyhgjdagtaerjkdhhgffdhfdah'
b = 'gfhfghssrtjyhgjdagtaerjkdhhgffdhfdah'
a is b # True
Run Code Online (Sandbox Code Playgroud)

为什么在字符串中添加空格会改变此比较的结果?

python

15
推荐指数
1
解决办法
1827
查看次数

python何时选择实习字符串

>>> s1 = "spam"
>>> s2 = "spam"
>>> s1 is s2
True
>>> q = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> r = 'asdalksdjfla;ksdjf;laksdjfals;kdfjasl;fjasdf'
>>> q is r
False
Run Code Online (Sandbox Code Playgroud)

应该s1 is s2给多少个角色False?限制在哪里?即,我问在python开始制作单独的副本之前,字符串必须有多长.

python string-interning

14
推荐指数
3
解决办法
1654
查看次数

id(float)的值相同

据我所知,一切都是Python中的对象,而id()应该(我是对的吗?)为每个对象返回一个不同的数字.

在我的例子中,id(1)返回4298178968,id(2)返回,4298178944但我得到所有浮点类型,id(1.1)返回4298189032,id(2.2)也返回4298189032等相同的值.

为什么我为所有浮点值得到相同的id

python

13
推荐指数
2
解决办法
1661
查看次数

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
查看次数

Python字符串标识:`is`和`in`语句

我有一些问题让这个工作:

# Shortened for brevity
def _coerce_truth(word):
    TRUE_VALUES = ('true','1','yes')
    FALSE_VALUES = ('false','0','no')

    _word = word.lower().strip()
    print "t" in _word
    if _word in TRUE_VALUES:
        return True
    elif _word in FALSE_VALUES:
        return False
Run Code Online (Sandbox Code Playgroud)

我发现:

In [20]: "foo" is "Foo".lower()
Out[20]: False

In [21]: "foo" is "foo".lower()
Out[21]: False

In [22]: "foo" is "foo"
Out[22]: True

In [23]: "foo" is "foo".lower()
Out[23]: False
Run Code Online (Sandbox Code Playgroud)

为什么是这样?我理解身份与平等不同,但身份何时形成?False除非由于字符串的静态性质,否则声明22应该是id == eq.在这种情况下,我对陈述23感到困惑.

请提前解释并表示感谢.

python string

6
推荐指数
1
解决办法
512
查看次数

字符串如何存储在python内存模型中

我来自 c 背景和 python 初学者。我想知道在python的情况下字符串实际上是如何存储在内存中的。

我做了类似的事情

s="foo"

id(s)=140542718184424

id(s[0])= 140542719027040
id(s[1])= 140542718832152
id(s[2])= 140542718832152
Run Code Online (Sandbox Code Playgroud)

我不明白每个字符是如何存储在内存中的,以及为什么 s 的 id 不等于 s[0] 的 id(就像它曾经在 c 中一样)以及为什么 s1 和 s2 的 id 相同?

python

5
推荐指数
1
解决办法
4198
查看次数

Python:'是'和'=='之间有什么区别?

我正在尝试下一个代码:

x = 'asd'
y = 'asd'
z = input() #write here string 'asd'. For Python 2.x use raw_input()
x == y # True.
x is y # True.
x == z # True.
x is z # False.
Run Code Online (Sandbox Code Playgroud)

为什么我们在最后一个表达中有错?

python

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

是否缓存了字符串?

>>> a = "zzzzqqqqasdfasdf1234"
>>> b = "zzzzqqqqasdfasdf1234"
>>> id(a)
4402117560
>>> id(b)
4402117560
Run Code Online (Sandbox Code Playgroud)

>>> c = "!@#$"
>>> d = "!@#$"
>>> id(c) == id(d)
False
>>> id(a) == id(b)
True
Run Code Online (Sandbox Code Playgroud)

为什么只在赋值字符串时得到相同的id()结果?

编辑:我用"字符串"替换"ascii字符串".感谢您的反馈

python string

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

python对象:深入挖掘

大家好我知道这段代码的作用:

1.]我的第一个问题

x = 4 
y = x
Run Code Online (Sandbox Code Playgroud)

但是这个呢.为什么同样的地址甚至是这种情况?

x = 4
y = 4
id(x)
12345678
id(y)
12345678
Run Code Online (Sandbox Code Playgroud)

2.]我的第二个问题

x = 42 
y = x 
x = x + 1 
print x  # Prints 43
print y  # Prints 42


x = [1, 2, 3]
y = x
x[0] = 4
print x # Prints [4, 2, 3]
print y # Prints [4, 2, 3]
Run Code Online (Sandbox Code Playgroud)

但为什么在名单的情况,都xy得到了由命令突变在一起x[0] = 4.
在这样的行为中,列表有什么不同?
是什么让他们表现得像这样?
最重要的是,这种行为的好处是什么?
为什么不能列出,变量,元组具有彼此的所有属性?

python

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

Python可变对象中的引用与赋值

分配:

>>> a = ['spam']
>>> b = ['spam']
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)

参考:

>>> c = ['spam']
>>> d = c
>>> c is d
True
Run Code Online (Sandbox Code Playgroud)
  1. 以上两者有什么区别?
  2. 为何分配结果False
  3. 为何参考结果True

python reference variable-assignment

2
推荐指数
1
解决办法
127
查看次数