b'';Python iter()中的sentinel平均值?
假设我有一个进程,它返回一堆行,我想迭代这些行:b'';Python iter()中的sentinel平均值?,python,Python,假设我有一个进程,它返回一堆行,我想迭代这些行: import subprocess myCmd = ['foo', '--bar', '--baz'] myProcess = subprocess.Popen(myCmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT) for myLine in iter(myProcess.stdout.readline, b''): print myLine 在本例中,我将值b''传递给se
import subprocess
myCmd = ['foo', '--bar', '--baz']
myProcess = subprocess.Popen(myCmd, stdout=subprocess.PIPE, stderr=subprocess.STDOUT)
for myLine in iter(myProcess.stdout.readline, b''):
print myLine
在本例中,我将值
b''
传递给sentinel参数,该参数执行什么操作?我想我自己就理解了'
——我不再在空行上重复——但我不知道b'
是什么意思 在python3中,字符串是byteliteral。在Python2中被忽略。我将尽最大努力比目前所读的内容更精确。(略为修订的版本)
Python符号b'string'
表示Python版本中支持的字节字符串文本。Python2引入了这种表示法,作为向unicode支持迁移的一个步骤。电流和电流同时变化。然而,PEP358是为Python2.6设计的,我看到的所有Python2.6解释器都接受它
随着向Python 3的迁移,字符串文本的默认值从字节更改为unicode。然而,引入了新的方法来简化迁移。下面说明了与字符串文字有关的效果
Python 2.6.6 (r266:84292, Dec 26 2010, 22:31:48)
[GCC 4.4.5] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> 'abc'
'abc'
>>> b'abc'
'abc'
>>> from __future__ import unicode_literals
>>> 'abc'
u'abc'
>>> b'abc'
'abc'
我希望我能激发以下陈述的有限有效性:
- 在Python3中,这表示字节文字:是的,但在Python2中也是如此,至少从2.6版开始
- 在Python2中,这个符号被忽略了:更重要的是,如果您有一个已经支持它的Python2版本,并且只有在您不关心与Python3的兼容性的情况下,您(或您看到的外来代码)才导入
\uuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuuu(每个人都应该考虑,这通常是针对第三方软件)。
这是字符串文本的前缀,强制使用字节表示法而不是unicode表示法,在Python 2.6中引入,并没有更改Python 2的Python默认值(但如果可以看到来自未来导入的
,则值得注意).我一直在编写Python 2.x脚本,所以我不会抓住这个细节。谢谢你的快速回答!我通常也会使用Python 2。只是在处理字符值为0-255而不是UTF符号的字符串时遇到了这个问题。我想指出,这样做是不正确的。请教育我们@ClassStackerI have pro提供了另一个答案。我希望@Alex Reynolds对此表示赞赏。