Бизли 4e P.E.R: Square(x), но он передает **kwargs внутри обертки?Python

Программы на Python
Ответить
Anonymous
 Бизли 4e P.E.R: Square(x), но он передает **kwargs внутри обертки?

Сообщение Anonymous »

Этот пример взят из книги Бизли, Python Essential Reference 4e,
стр. 101.
Как у него дела:
func(*args, **kwargs)

где func — это квадратичная функция, принимающая 1 аргумент? Ранее в этой главе он писал о том, как позиция и количество аргументов должны совпадать в вызове/определении, иначе возникнет ошибка TypeError.
Кроме того,
@trace
def square(x):
...
square = trace(square)

trace возвращает «calf», так что это эквивалентно записи: Square = callf
что нормально, поскольку, поскольку Square относится к новому объекту-функции, вы можете
вызвать его с помощью *args, **kwargs. Но затем в callf он выполняет func(*args...
Учитывая, что мы только что сделали 'square' ссылкой на какой-то другой объект, как исходный квадрат доступен внутри? Какой механизм вступает в игру?
@trace
def square(x):
return x*x

enable_tracing = True
if enable_tracing:
debug_log = open("debug.log","w")

def trace(func):
if enable_tracing:
def callf(*args,**kwargs):
debug_log.write("Calling %s: %s, %s\n" %
(func.__name__, args, kwargs))
r = func(*args,**kwargs) #????????
debug_log.write("%s returned %s\n" % (func.__name, r))
return r
return callf
else:
return func


Подробнее здесь: https://stackoverflow.com/questions/144 ... he-wrapper
Ответить

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

Вернуться в «Python»