我听说 Python 中的函数就像列表、字典等一样是对象。但如果要使用函数进行类似的操作,有什么类似的方法呢?
# Assigning empty list to 'a'
a = list()
# Assigning empty function to 'a'
a = lambda: pass
# ???
你会如何做到这一点?此外,这是否是必要的或适当的? 下面是我想更好地使用它以获得上下文的意义:
我有一个 QListWidget
,用于选择与字典中的键相关联的项目。此字典中的值也是字典,其中包含某些项目的特定属性,我可以添加这些特定属性作为键,并通过调用不同的函数来初始化或更新其值。 因此,我在窗口中存储了一个变量,当按下按钮时,该变量将被更新,以告诉此脚本要更新哪个属性。
正如您所见,我希望存储该函数以根据情况使用正确的函数将数据映射到函数。
# Get selection from the list
name = selected_item
# Initialize an empty function
f = lambda: pass
# Use property that is being added now, which was updated by the specific button that was pushed
property_list = items[name][self.property_currently_being_added]
if self.property_currently_being_added == "prop1":
f = make_property1()
elif self.property_currently_being_added == "prop2":
f = make_property2()
elif self.property_currently_being_added == "prop3":
f = make_property3()
elif self.property_currently_being_added == "prop4":
f = make_property4()
# map the certain function to the data which was retrieved earlier
added_property = map(f, data)
property_list.append(added_property)
else: raise ValueError
等方式。如果self.property_currently_being_added == None
或其他情况下,似乎你不希望这个函数继续执行。 - Adam Smithdef f(): pass
,效果是一样的。lambda 表示法只有在以下情况下才有必要使用:(a) 你不想给这个函数命名(但本例中你把它直接赋值给f
了);(b) 你需要在一个表达式中定义它,而不是一个语句中(但本例中你直接在赋值语句中使用它);或者 (c) 你在上 Scheme 课,教授讨厌 Python,宁愿教 Scheme(本例中可能不适用)。 - abarnertc = types.CodeType(0, 0, 0, 0, 0, b'', (), (), (), '<main>', 'f', 0, b'')
,然后f = types.FunctionType(c, {})
。当然,这个函数调用时只会引发一个SystemError
……但是你期望一个空函数有多有用呢? :) - abarnert