将列表传递给函数期望相同长度的元组

时间:2016-03-06 16:13:34

标签: python list type-conversion tuples python-2.x

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是否会自动进行转换?如果是,那么一般规则是什么?

我在网上搜索,但无法获得任何有用的信息。

2 个答案:

答案 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)