Bor*_*lis 20 python variable-assignment while-loop
关于Python语法的一个简单问题.我想在while循环的条件期间将函数的值赋给变量.当函数返回的值为false时,循环应该中断.我知道如何在PHP中完成它.
while (($data = fgetcsv($fh, 1000, ",")) !== FALSE)
Run Code Online (Sandbox Code Playgroud)
但是,当我在Python中尝试类似的语法时,我得到一个语法错误.
Mar*_*ers 29
您不能在表达式中使用赋值.赋值本身就是一个语句,你不能组合Python语句.
这是语言设计者的明确选择; 很容易意外地使用一个=并分配,你打算使用两个==并测试相等性.
将赋值移动到循环中,或在循环之前分配,并在循环本身中分配新值.
对于您的具体示例,Python csv模块为您提供了更高级别的API,而您将循环使用它csv.reader():
with open(csvfilename, 'rb') as csvfh:
reader = csv.reader(csvfh)
for row in reader:
Run Code Online (Sandbox Code Playgroud)
如果有的话,我很少需要在循环结构中进行分配.通常有一种(更好)解决手头问题的方法.
Rem*_*ich 18
你不能在Python中做到这一点,在表达式中没有赋值.至少这意味着你不会意外地键入==而不是=或反过来并让它工作.
传统的Python风格只是在True和break时使用:
while True:
data = fgetcsv(fh, 1000, ",")
if not data:
break
# Use data here
Run Code Online (Sandbox Code Playgroud)
但是现在我把它放在一台发电机里:
def data_parts(fh):
while True:
data = fgetcsv(fh, 1000, ",")
if not data:
break
yield data
Run Code Online (Sandbox Code Playgroud)
所以在使用该文件的代码中,丑陋隐藏起来:
for data in data_parts(fh):
# Use data here
Run Code Online (Sandbox Code Playgroud)
当然,如果它实际上是您正在进行的CSV读取,请使用csv模块.
Python 3.8 pep-0572现在使用新的符号来解决这种情况:=。看一看 :)
例如:
while chunk := file.read(8192):
process(chunk)
Run Code Online (Sandbox Code Playgroud)