【问题标题】:Python call method by list value only during iteration through list [duplicate]仅在通过列表迭代期间通过列表值调用Python方法[重复]
【发布时间】:2018-02-07 13:31:25
【问题描述】:

我确实有地图:

foo_map = {
'func1': sky()
'func2': tree()
'fnuc3': ground()
}

我确实有一个foobar_list = ['func2', 'fnuc3']

我也有方法:

d

ef sky():
    print "sky"

def tree():
    print "tree"

def ground():
    print "ground"

我确实想做如下:

for element in foobar_list:
    foo_map[element]

预期结果是调用分配给'func2''fnuc3' 所以tree()ground() 的方法而不调用sky()。虽然,sky()ground()tree() 在创建 foo 变量时被调用,因为我知道为这个变量对象分配了内存,因此调用被执行。

如何在不调用sky()的情况下实现以上功能???

编辑:

我的问题与突出显示的重复问题不重复。我的问题是用不同的关键字提出的,并且当我输入我的问题时,不建议将重复的问题作为建议的答案。从技术上讲,这两个问题是相同的,但从自然语言的角度来看,问题并不相同。

【问题讨论】:

  • 不要把()放在你的dict里面的函数名之后。 调用函数。您只想引用它们。
  • 谢谢。这个答案太牛了。这么简单的事情让我很头疼。 PS。我不同意标记为重复的人,因为我一直在寻找答案,但由于缺乏知识而找不到正确的关键字来搜索问题。所以,我很感谢@khelwood 的帮助并让我重回正轨。我不尊重任何标记它并为我设置惩罚的人,因为那个人根本没有帮助,我不了解那个人行为背后的目标。干杯。
  • 无法找到副本并不意味着它不是副本。像这样关闭它是正确的。
  • 嘿 khelwood,我不是无法在迭代后执行函数调用。按照下面 deceze 的建议,我仍然缺少 ()。
  • @deceze,您是否建议:如果 questionA =/= questionB 和对 questionA 的回答是对 questionB => questionA == questionB 的回答?我对您的回答是:不,即使问题 A 的答案包含在问题 B 的答案中,问题 A 也不同于问题 B。所以,我的问题与您引用的问题不重复。

标签: python


【解决方案1】:

虽然,sky()ground()tree() 在创建 foo 变量时被调用,因为我知道为这个变量对象分配了内存,因此调用被执行。

不,它们被执行是因为您通过编写 sky() 执行了它们。您想要的只是在 dict 中存储对该函数的引用,然后再调用它:

foo_map = {'func1': sky, ...}
                       ↑
foo_map[element]()
                ↑↑

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-27
    • 2015-03-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多