Я использую pdb для отладки программы. Я последовательно ударяю 'c', чтобы запустить код, и на каждом шаге pdb показывает мне, какая строка выполняется.python Что происходит при вызове функции?
Допустим, у нас есть этот код:
def foo(bar):
print(bar)
foo('hey')
Во-первых, линия 4 вызова функции Foo. Затем pdb показывает мне линию
def foo(bar)
Выполнено.
Почему? Разве это не просто линия ярлыка? Что происходит до выполнения «print (bar)»? (что приходит с чужим ударом)
EDIT: Я экспериментировал, что что-то сделано, чтобы действительно проверить определение. Фактически, в случае, если foo был генератором (который не может быть вызван таким образом), python все еще получает и затем решает рассматривать его как генератор (или функцию, зависящую от случая ...).
Хороший вопрос! Я с нетерпением жду ответа. Я бы сказал, однако, что было бы еще более удивительно, если бы он пропустил. Как еще он будет проверять параметры и т. Д.? (Если он пропустил, как бы он знал, чтобы жаловаться, если вы вызвали 'foo (1, 2)??) – vroomfondel
Да, но мне нужно точно знать, что там происходит. Возможно, вы @rogaos правы. Однако в случае, когда вы предположили, что pdb останавливает свое исполнение в foo (1,2) и никогда не получает строку def. Поэтому, когда мы видим линию def, она уже приняла/соответствовала функции. Обратите внимание, что следующее «попадание» попадает на линию печати и, как всегда, останавливается ** до ** выполнения строки. Таким образом, вы можете проверить стек/кучу, прежде чем что-либо произойдет в функции. –