我们可以在列表中传递函数吗?

时间:2020-05-13 16:17:45

标签: python list dictionary

请参见以下代码:

list1 = ["in", "france", "germany"]
list2 = ["NAMASTE", "VANAKAM"]
list3 = ["fr1", "fr2", "fr3"]
list4 = ["gem1","gem2", "gem3","gem4"]

def list2(): 
    return list2
def list3():    
    return list3
def list4(): 
    return list4

list5 = [list2(), list3(), list4()]
list = []
for item in range(len(list1)):
      list.append({list1[item]:list5[item]}) 
print(list)

以上代码的输出为:

[{'in':函数list2在| 0x7f7b5dd3be60},{'france':函数列表3位于0x7f7b5dd53170},{'德国':函数list4位于0x717b5dcd8050}]

我期待着这个输出:

[{“ in”:[“ NAMASTE”,“ VANAKAM”]},{“ france”:[“ fr1”,“ fr2”,“ fr3”]},{“德国”:[“ gem1”, “ gem2”,“ gem3”,'gem4']}]

为什么我没有得到这个输出?

2 个答案:

答案 0 :(得分:0)

正如@KonradRudolph所说,您正在用函数名称覆盖列表名称。您可以通过更正函数名称来解决此问题。

list1 = ["in", "france", "germany"]
list2 = ["NAMASTE", "VANAKAM"]
list3 = ["fr1", "fr2", "fr3"]
list4 = ["gem1","gem2", "gem3","gem4"]

def list_2():
    return list2
def list_3():
    return list3
def list_4():
    return list4

list5 = [list_2(), list_3(), list_4()]
list = []
for item in range(len(list1)):
      list.append({list1[item]:list5[item]})
print(list)

输出:

[{'in': ['NAMASTE', 'VANAKAM']}, {'france': ['fr1', 'fr2', 'fr3']}, {'germany': ['gem1', 'gem2', 'gem3', 'gem4']}]

下面的代码可能有助于更好地理解

list2 = ["NAMASTE", "VANAKAM"]

def list2():
    return list2

list5 = [list2()]

print (id(list2))
print (id(list2()))

print(id(list2) == id(list2()))

输出:

59855176
59855176
True

这意味着两个项目的内存地址相同,因此不会调用该函数。

答案 1 :(得分:0)

您应该修复以下棉绒问题。它们都是编码错误:

  1. 函数已定义第2行[6,1]
  2. 函数已定义第3行[8,1]
  3. 函数已定义第4行[10,1]
  4. 重新定义内置的“列表” [14,1]
  5. 缩进错误。找到6个空格,预期为4 [16,1]