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 автоматическое преобразование? Если да, то каково общее правило?
Я искал в Интернете, но не мог получить ничего полезного.
Да, Python автоматически выполняет преобразование; это фактически многозначное назначение, см., например, http://stackoverflow.com/a/29676756/3001761. Обратите внимание, что этот синтаксис [больше не действует в 3.x] (https://docs.python.org/3.0/whatsnew/3.0.html#removed-syntax). – jonrsharpe
BTW, автор также имеет книгу онлайн для Python 3 в [diveintopython3.net] (http://www.diveintopython3.net/). –
@ AnttiHaapala Да, я понял, что после того, как я был более чем на полпути в старую книгу. Я решил закончить то, что начал, потому что новая книга, казалось, была построена совершенно по-другому, поэтому мне пришлось бы начать новую с самого начала. – q126y