相关疑难解决方法(0)

cpython的字符串实习有哪些规则?

在python 3.5中,是否可以预测何时获得实习字符串或何时获得副本?在阅读了有关此问题的一些Stack Overflow答案后,我发现这个答案最有帮助但仍然不全面.比我查看Python文档,但默认情况下不保证实习

通常,Python程序中使用的名称会自动实现,而用于保存模块,类或实例属性的字典具有实习键.

所以,我的问题是关于内部intern()条件,即决策(是否实习生字符串字面与否):为什么同样的代码工作在一个系统上,而不是在一个又一个,什么规则做了回答笔者就提到的话题平均值说的时候

何时发生这种情况的规则相当复杂

string cpython string-interning

11
推荐指数
1
解决办法
205
查看次数

Python不等于运算符

我来自ac风格的语言,所以我很自然地使用!=不相等,但当我来到Python时,从我阅读的文档中,我了解到为此目的使用了<>运算符.

最近,我看到很多代码使用!=,所以我的问题是,如果其中一个优先于另一个,或者其中一个被弃用.

另外,我想知道它们之间是否有任何区别.

python deprecated not-operator

10
推荐指数
2
解决办法
7968
查看次数

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

Pylint抱怨将字符串与文字与'is'进行比较

请考虑以下代码段:

my_string = 'asdf'
print(my_string is 'xfje') #R0123
Run Code Online (Sandbox Code Playgroud)

Pylint R0123在第二行返回推荐,我在错误消息wiki上找不到.不过,在这部分文档中提到了它:

文字比较(R0123):

与文字的比较在将对象与文字进行比较时使用,这通常是您不想做的事情,因为您可以比较不同于预期的文字.

这个解释对我没有任何帮助.我知道is用于两个字符串对象之间的比较可能会导致与预期不同的结果,但是为了将对象与文字进行比较,它与之相同==.使用时==,错误消失.

我为什么不在is这里使用?

python equality pylint python-3.x

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

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

检查False的正确方法是什么?

哪个更好?(为什么?)

if somevalue == False:
Run Code Online (Sandbox Code Playgroud)

要么

if somevalue is False:
Run Code Online (Sandbox Code Playgroud)

如果somevalue是字符串,你的答案会改变吗?

python boolean boolean-expression

7
推荐指数
1
解决办法
7046
查看次数

Python字符串乘法与“ is”的比较不一致

我知道python的“是”比较使用对象的ID进行比较,但是在比较与自身串联的字符串时,它的行为似乎不一致。最多20个字符,对于单个字符str,返回True,然后返回False:

>>>'a'*20 is 'a'*20
True
>>>'a'*21 is 'a'*21
False
Run Code Online (Sandbox Code Playgroud)

对于不同长度的字符串,似乎总字符串超过21的地方都会发生:

>>>'abcdefghijk'*2 is 'abcdefghijk'*2
False
>>>'abcdefghijk'*1 is 'abcdefghijk'*1
True
Run Code Online (Sandbox Code Playgroud)

但这不适用于已经超过21个字符的字符串:

>>>'abcdefghijklmnopqrstuvwxyz'*1 is 'abcdefghijklmnopqrstuvwxyz'*1
True
Run Code Online (Sandbox Code Playgroud)

python在做什么导致这种行为改变?

编辑:我正在使用Python 3.6.5

python string

7
推荐指数
0
解决办法
119
查看次数

具有特殊字符的相等字符串的不同存储位置

我是python的新手,我正在探索它的一些核心功能.

你能解释一下为什么下面的例子总是在带有特殊字符的字符串时返回false:

>>> a="x"
>>> b="x"
>>> a is b
True
>>> a="xxx"
>>> b="xxx"
>>> a is b
True
>>> a="xü"
>>> b="xü"
>>> a is b
False
>>> a="ü"
>>> b="ü"
>>> a is b
True
>>> #strange: with one special character it works as expected
Run Code Online (Sandbox Code Playgroud)

我知道每个赋值中具有特殊字符的字符串的存储位置不同,我已经使用id()函数检查了它,但是为什么python以这种不一致的方式处理字符串?

python python-2.7

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

python如何做魔术?

今天我被一个字符串比较困惑:似乎python重用了字符串(这是一个明智的做法,因为它们是不可变的).为了检查这个事实,我做了以下事情:

>>> a = 'xxx'
>>> b = 'xxx'
>>> a == b
True
>>> a is b
True
>>> id(a)
140141339783816
>>> id(b)
140141339783816
>>> c = 'x' * 3
>>> id(c)
140141339783816
>>> d = ''.join(['x', 'x', 'x'])
>>> id(d)
140141339704576
Run Code Online (Sandbox Code Playgroud)

这有点令人惊讶.一些问题:

  • python在定义新字符串时是否检查其字符串表的全部内容?
  • 字符串大小有限制吗?
  • 这个机制是如何工作的(比较字符串的哈希值?)
  • 它似乎并不用于所有类型的生成字符串.这里的规则是什么?

python string python-internals

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

Python解释器字符串池优化

在看到这个问题它的重复的问题仍然存在对我来说.

如果我跑,我会得到什么is,==做什么以及为什么

a = "ab"
b = "ab"

a == b
Run Code Online (Sandbox Code Playgroud)

我得到True.这里的问题是为什么会发生这种情况:

a = "ab"
b = "ab"
a is b # Returns True
Run Code Online (Sandbox Code Playgroud)

所以我做了我的研究,我找到了这个.答案说Python解释器使用字符串池.因此,如果它看到两个字符串相同,则将它们分配id给新字符串以进行优化.

直到这里一切都好,并回答.我真正的问题是为什么这个池只发生在一些字符串上.这是一个例子:

a = "ab"
b = "ab"
a is b # Returns True, as expected knowing Interpreter uses string pooling

a = "a_b"
b = "a_b"
a is b # Returns True, again, as expected knowing Interpreter uses string …
Run Code Online (Sandbox Code Playgroud)

python string string-pool

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