如何正确地将局部变量分配给 python 中的 for 循环?
How to correctly assign local variables to a for-loop in python?
我有一个 for
循环,它获取 pandas 数据帧 df_drinks
中的行,并将它们用作参数来调用另一个函数 order()
。 order()
是从模块 restaurant.py
导入的。
连同 df_drinks
中的行,我想提交一个 comment
到 order()
,它在 for 循环之外指定。
from restaurant import order
statement = "Lets order"
df_drinks = ["1 drink", "2 drink"] # simplified, 1 item per row, many columns
for index, row in df_drinks.iterrows():
print ("%s, %s" % (statement, row))
item = row
response = order(statement, item)
...
模块如下所示:
# restaurant.py
def order(statement, item):
listen(statement)
statement = "order received"
ready_drinks = prepare(item)
...
return ready_drinks
对于第一个 run/row 一切都很好,因为 print
产生:
让我们点 1 杯饮料
然而,对于第二个 run/row,print
产生:
订单收到 2 杯饮料 而不是 让我们订购 2 杯饮料。
我知道我对两个不同的事物使用相同的变量名 statement
。尽管如此,我还是很困惑,因为 restaurant.py
中的 order()
只做 return ready_drinks
而不是 statement
.
如何正确地将局部变量分配给 python 中的 for 循环?
我不确定你想问什么,但如果我正确理解你在说什么,那么代码就变成了缩进。
from restaurant import order
statement = "Lets order"
df_drinks = ["1 drink", "2 drink"] # simplified, 1 item per row, many columns
for index, row in df_drinks.iterrows():
print ("%s, %s" % (statement, row))
item = row
response = order(statement, item)
statement="order received"是局部变量,statement="Lets order"是全局变量。您无法覆盖 for 循环中的值。可能下面的代码对你有帮助
df_drinks = ["1 drink", "2 drink"] # 简化,每行 1 项,多列
for row in df_drinks:
statement = "Lets order"
print ("%s, %s" % (statement, row))
item = row
ready_drinks,statement = order(statement, item)
print ("%s, %s" % (statement, row))
def order(statement, item):
listen(statement)
statement = "order received"
ready_drinks = prepare(item)
...
return ready_drinks,statement
非常感谢您的回答。我过度简化了。最初应该提到的是 statement
在原始代码中不是字符串,而是 pandas df
。据我了解,这导致了有关 Pandas 的问题:链式赋值
。
statement
数据帧在第一个代码的 for
循环中的第一行之后的 restaurants.py
中经历了几个 inplace = True
处理步骤。这导致 for
循环的所有其他行发生上述变化。
如果其他人将来可能会遇到类似的问题,我想添加如何防止这种情况发生:为 restaurants.py
中的操作组创建一个单独的数据帧副本,如所述 here.
statement2 = statement.copy(deep=False)
我有一个 for
循环,它获取 pandas 数据帧 df_drinks
中的行,并将它们用作参数来调用另一个函数 order()
。 order()
是从模块 restaurant.py
导入的。
连同 df_drinks
中的行,我想提交一个 comment
到 order()
,它在 for 循环之外指定。
from restaurant import order
statement = "Lets order"
df_drinks = ["1 drink", "2 drink"] # simplified, 1 item per row, many columns
for index, row in df_drinks.iterrows():
print ("%s, %s" % (statement, row))
item = row
response = order(statement, item)
...
模块如下所示:
# restaurant.py
def order(statement, item):
listen(statement)
statement = "order received"
ready_drinks = prepare(item)
...
return ready_drinks
对于第一个 run/row 一切都很好,因为 print
产生:
让我们点 1 杯饮料
然而,对于第二个 run/row,print
产生:
订单收到 2 杯饮料 而不是 让我们订购 2 杯饮料。
我知道我对两个不同的事物使用相同的变量名 statement
。尽管如此,我还是很困惑,因为 restaurant.py
中的 order()
只做 return ready_drinks
而不是 statement
.
如何正确地将局部变量分配给 python 中的 for 循环?
我不确定你想问什么,但如果我正确理解你在说什么,那么代码就变成了缩进。
from restaurant import order
statement = "Lets order"
df_drinks = ["1 drink", "2 drink"] # simplified, 1 item per row, many columns
for index, row in df_drinks.iterrows():
print ("%s, %s" % (statement, row))
item = row
response = order(statement, item)
statement="order received"是局部变量,statement="Lets order"是全局变量。您无法覆盖 for 循环中的值。可能下面的代码对你有帮助
df_drinks = ["1 drink", "2 drink"] # 简化,每行 1 项,多列
for row in df_drinks:
statement = "Lets order"
print ("%s, %s" % (statement, row))
item = row
ready_drinks,statement = order(statement, item)
print ("%s, %s" % (statement, row))
def order(statement, item):
listen(statement)
statement = "order received"
ready_drinks = prepare(item)
...
return ready_drinks,statement
非常感谢您的回答。我过度简化了。最初应该提到的是 statement
在原始代码中不是字符串,而是 pandas df
。据我了解,这导致了有关 Pandas 的问题:链式赋值
。
statement
数据帧在第一个代码的 for
循环中的第一行之后的 restaurants.py
中经历了几个 inplace = True
处理步骤。这导致 for
循环的所有其他行发生上述变化。
如果其他人将来可能会遇到类似的问题,我想添加如何防止这种情况发生:为 restaurants.py
中的操作组创建一个单独的数据帧副本,如所述 here.
statement2 = statement.copy(deep=False)