import re
import string
def buildRule((pattern, search, replace)):
return lambda word: re.search(pattern, word) and re.sub(search, replace, word) 1
def plural(noun, language='en'): 2
lines = file('rules.%s' % language).readlines() 3
patterns = map(string.split, lines) 4
rules = map(buildRule, patterns) 5
for rule in rules:
result = rule(noun) 6
if result: return result
来自:http://www.diveintopython.net/dynamic_functions/stage5.html
上面的代码按预期工作。但buildRule
期望元组,但传递的行列表注释为5,上面。
python是否会自动进行转换?如果是,那么一般规则是什么?
我在网上搜索,但无法获得任何有用的信息。
答案 0 :(得分:2)
这称为元组参数解包。尽管它的名字,它适用于任何类型的迭代具有完全多少元素。
在3.0版本中从Python中删除了元组参数解包。在PEP 3113中讨论了弃用的原因。
最好不要在Python 2中使用这种语法。
实际上在这种情况下它甚至没有那么有用; buildRule
可以定义为
def buildRule(pattern, search, replace):
return lambda word: re.search(pattern, word) and re.sub(search, replace, word) 1
如果第5行被替换为
rules = itertools.starmap(buildRule, patterns)
答案 1 :(得分:1)
您还可以将列表转换为元组。请参阅以下示例。
list_array = [1, 2, 3]
tuple_array = tuple(list_array)