Поправьте меня, если я ошибаюсь, но ваше замешательство - это синтаксис типа name = "what"
?Это просто говорит о том, что функция, в данном случае web.input
, принимает параметр с именем name
, а вы присваиваете его непосредственно "what"
.То же самое с render.index(greeting = greeting)
, он принимает параметр greeting
, которому вы присваиваете значение локальной переменной greeting
, которая была оценена в строке над оператором return
.
Так что, не глядя наметод, я бы сказал, нет гарантии, что return render.index(greeting)
совпадает с render.index(greeting = greeting)
.Возьмем, к примеру, этот фрагмент кода, взятый из здесь , но без бесконечного цикла, который я только что заметил:
# Default Values
def multiprint(n=5, txt=""):
i = 0
while i < n:
print txt
i++
Затем можно вызвать эту функцию следующим образом:
>>> multiprint()
>>> multiprint(1)
>>> multiprint(1,"hi")
hi
>>> multiprint(txt="hi")
hi
hi
hi
hi
hi
Где в последней строке мы не указали n
, первый параметр, но указали txt
.Я также согласен с вами, что greeting = greeting
сбивает с толку.Это похоже на милый маленький трюк, но мне все равно.Имя параметра greeting
, как в нашем примере txt
, а локальная переменная greeting
.Лично я бы назвал локальную переменную как-нибудь еще, а затем получил бы render.index(greeting = myGreetingText)
или что-то в этом роде.