Meh*_*dad 59 python variable-assignment while-loop
我刚看到这段代码
while 1:
line = data.readline()
if not line:
break
#...
Run Code Online (Sandbox Code Playgroud)
并且认为,必须有一个更好的方法来做到这一点,而不是使用无限循环break
.
所以我尝试过:
while line = data.readline():
#...
Run Code Online (Sandbox Code Playgroud)
并且,显然,有一个错误.
有没有办法避免break
在那种情况下使用?
理想情况下,你想避免说readline
两次......恕我直言,重复甚至比仅仅更糟糕break
,特别是如果声明很复杂.
小智 40
尝试这个,适用于打开的文件 open('filename')
for line in iter(data.readline, b''):
Run Code Online (Sandbox Code Playgroud)
Ned*_*der 25
如果你没有对数据做任何更好的事情,比如稍后阅读更多行,总会有:
for line in data:
... do stuff ...
Run Code Online (Sandbox Code Playgroud)
dfb*_*dfb 16
这不是更好,但这是我通常这样做的方式.Python不像其他语言(例如Java)那样在变量赋值时返回值.
line = data.readline()
while line:
# ... do stuff ...
line = data.readline()
Run Code Online (Sandbox Code Playgroud)
Xav*_*hot 14
从开始Python 3.8
,并引入赋值表达式(PEP 572)(:=
运算符),现在可以data.readline()
将while循环的条件值()捕获为变量(line
),以便在循环体内重复使用它:
while line := data.readline():
do_smthg(line)
Run Code Online (Sandbox Code Playgroud)
喜欢,
for line in data:
# ...
Run Code Online (Sandbox Code Playgroud)
?它很大程度上取决于data
对象的readline语义的语义.如果data
是一个file
对象,那就行了.
for line in data:
... process line somehow....
Run Code Online (Sandbox Code Playgroud)
将迭代 中的每一行file
,而不是使用while
. 根据我的经验(在 Python 中),这是读取文件任务的更常见的习惯用法。
事实上,data
不一定是一个文件,而只是提供一个迭代器。
从 python 3.8(实现PEP-572)开始,此代码现在有效:
while line := data.readline():
# do something with line
Run Code Online (Sandbox Code Playgroud)