2017-08-24 72 views
1

我有一個for -loop,它在熊貓數據框df_drinks內取行,並將它們用作參數來調用另一個函數order()order()從模塊restaurant.py導入。如何正確地將本地變量分配給python中的for-loop?

df_drinks中的行一起,我想提交一個commentorder(),它在for-loop之外指定。

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 

第一次運行/行,一切都很好,因爲一個print產量:

讓我們爲了喝1

然而,對於第二次運行/行,print收益率:

訂單收到2杯飲料而不是讓訂單2飲料

據我所知,我有兩個不同的事物相同的變量名statement。仍然,我很困惑,因爲order()restaurant.py只返回ready_drinks而不是statement

如何正確地將本地變量分配給python中的for-loop?

+1

沒有更多的細節很難幫助。你所顯示的內容不能改變for循環中的'statement'。 – AChampion

+0

你是否想把'order'賦給調用者的'statement'變量? Python不能這樣工作。它可能有助於閱讀[快速解釋Python變量如何工作](https://nedbatchelder.com/text/names.html)。 – user2357112

+0

請提供[mcve] –

回答

0

我不確定你想問什麼,但看起來這可能是由於縮進,如果我正確理解你在說什麼,所以代碼變成。

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) 
0

statement =「order received」是一個局部變量,statement =「Lets order」是一個全局變量。您不重寫for循環中的值。可能是下面的代碼可以幫助你

df_drinks = 「喝1」, 「2飲」]#簡化,每行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 
0

非常感謝您的答案。我過分簡化了。最初應該提到的是statement不是原始代碼中的字符串,而是一個熊貓df。根據我的理解,這導致了有關Pandas: Chained assignments 的問題。

statement數據幀在第一個代碼的for循環中的第一行之後經過restaurants.py中的幾個inplace = True處理步驟。這導致for循環的所有其他行中的上述變化。

如果別人以後可能遇到類似問題,我想添加如何防止這種情況:爲restaurants.py中的操作組創建一個單獨的數據框副本,如here所述。

statement2 = statement.copy(deep=False) 
相關問題