[英]Passing List Comprehension to a function in Python
我有一個函數,希望將列表理解作為輸入傳遞給我。 我收到有關未定義my_list的錯誤。 我知道我可以將my_list
放在函數之外,但實際上,列表是作為函數的一部分生成的。
實際定義很復雜,因此這里是簡化示例:
def my_def(list_comp):
global my_list
my_list = [[1,2],[3,4]]
list_comp_output = list_comp
return list_comp_output
print my_def([x[1] for x in my_list])
實際上, 我們在Python中擁有的只是運行時。 不存在單獨的編譯時間 1 (在解釋器范圍內)。 並且功能也不例外。
因此,您在此處所做的就是將my_list
定義為全局變量,並在python未定義此類內容時嘗試在列表理解中使用它。
您可以只運行函數1次,然后使用該列表理解:
def my_def(list_comp):
global my_list
my_list = [[1,2],[3,4]]
list_comp_output = list_comp
return list_comp_output
my_def([])
print my_def([x[1] for x in my_list])
[2,4]
另外我在這里看不到任何邏輯的東西:)如果您想使用全局變量,只需定義是否在模塊范圍內(在函數之外並將其傳遞給函數)。
def my_def(list_comp):
# do stuff with list_comp
return list_comp_output
my_list= # a costume list
li=[x[1] for x in my_list]
print my_def(li)
或者更優雅地在函數中進行列表理解:
def my_def(list_comp):
return [x[1] for x in list_comp]
1. Mark Lutz學習Python
那是因為未定義my_list;)
首先,您必須意識到函數定義中的主體(但是,如果有默認參數,則它們將立即被評估)直到實際調用該函數時才執行,但是在調用該函數之前先評估它的參數。
它的前兩個語句首先說符號my_list
是此函數中全局范圍的符號。 第二個表示將符號[[1,2],[3,4]]
分配給該符號(在全局范圍內)。 但這確實沒有提到在調用函數之前發生(因此,在函數定義之后,它仍然沒有定義)。
這樣的結果是,您嘗試在my_list
定義或分配給my_list
之前(在函數體內)求值。
您可以嘗試通過首先調用my_def([])
來實現它,該方法將定義my_list
,但是正確的方法可能是將my_list
的定義放在函數定義之外:
my_list = [[1,2],[3,4]]
def my_def(list_comp):
list_comp_output = list_comp
return list_comp_output
print my_def([x[1] for x in my_list])
給出答案:
[2, 4]
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.