В дополнение к хорошему ответу iBug вы говорите, почему первый аргумент может работать с нестроковым объектом, это также относится к timeit
и другим вещам.
Также, lambda
s эквивалентны функциям, так что в основном вы помещаете функцию, даже если вы сделали функцию вручную и поместили в нее имя функции, она будет работать.
Примечание: есть не-regex no-moduleспособ сделать это:
' '.join([rep.get(i,i) for i in text.split()])
Демо:
>>> rep = {"hi": "hello", "ya": "you"}
>>> text = 'hi how are ya'
>>> ' '.join([rep.get(i,i) for i in text.split()])
'hello how are you'
>>>