Ich versuche, das Dienstprogramm der Dekoratoren in Python zu testen. Wenn ich die folgenden Codes zu schreiben, gibt es einen Fehler:Python Decorator: TypeError: Funktion nimmt 1 Positionargument, aber 2 wurden gegeben
TypeError: fizz_buzz_or_number() takes 1 positional argument but 2 were given
I log_calls(fn)
als
def log_calls(fn):
''' Wraps fn in a function named "inner" that writes
the arguments and return value to logfile.log '''
def inner(*args, **kwargs):
# Call the function with the received arguments and
# keyword arguments, storing the return value
out = fn(args, kwargs)
# Write a line with the function name, its
# arguments, and its return value to the log file
with open('logfile.log', 'a') as logfile:
logfile.write(
'%s called with args %s and kwargs %s, returning %s\n' %
(fn.__name__, args, kwargs, out))
# Return the return value
return out
return inner
Nachdem die eine Funktion ersten definieren, I log_calls verwenden eine andere Funktion als dekorieren:
@log_calls
def fizz_buzz_or_number(i):
''' Return "fizz" if i is divisible by 3, "buzz" if by
5, and "fizzbuzz" if both; otherwise, return i. '''
if i % 15 == 0:
return 'fizzbuzz'
elif i % 3 == 0:
return 'fizz'
elif i % 5 == 0:
return 'buzz'
else:
return i
Wenn ich den folgenden Code ausführen
for i in range(1, 31):
print(fizz_buzz_or_number(i))
Der Fehler TypeError: fizz_buzz_or_number() takes 1 positional argument but 2 were given
kommt.
Ich weiß nicht, was mit diesem Dekorateur falsch ist, und wie man das beheben kann.
Ich sehe was du meinst. Ich habe es nach deinem Vorschlag noch einmal versucht, es funktioniert jetzt. Danke vielmals. – Luhuimiaomiao