我正在看这样一个案例:
def parse_item(self, response):
item = MetrocItem()
def ver(string):
if string:
return string
else:
return 'null'
item['latitude'] = ver(response.xpath('//input[@id="latitude"]/@value').extract_first())
Run Code Online (Sandbox Code Playgroud)
它有效,但有没有更好的方法来做到这一点?
正如@Graipher 在评论中提到的,这在某些情况下当然是有效的,但在您的特定情况下,这是不必要的。如果您的函数依赖于局部变量,那么您将返回一个每次调用该方法时都需要重建的闭包。但在您的情况下,每次调用该方法时,该函数都会以相同的方式运行,因此将其全局定义为私有方法,甚至在您的情况下定义为 lambda 更有意义。
ver = lambda x: x if x else 'null'
Run Code Online (Sandbox Code Playgroud)
但首选的方法是简单地在全局范围内定义它,并用下划线开始名称以明确其意图。
def _ver(string):
...
Run Code Online (Sandbox Code Playgroud)