我有以下的通用調試器:從函數聲明收集帕拉姆名稱
def debugger(method):
def dec(*args, **kwargs):
print("\ndebugging '{name}':\n".format(name=method.__name__))
FOUR_SPACES = " " * 4
EIGHT_SPACES = " " * 8
if args:
print("{four}args:\n".format(four=FOUR_SPACES))
for arg in args:
print("%s%s" % (EIGHT_SPACES, arg))
if kwargs:
for key, value in kwargs.items():
print("{four}{key}:\n{eight}{value}\n".format(
four=FOUR_SPACES,
key=key,
eight=EIGHT_SPACES,
value=value
))
if args or kwargs:
print("\n")
result = method(*args, **kwargs)
return result
return dec
@debugger
def generate_minutes_in_timespan(start, end, cutoff_date=None):
# cutoff_date is just example of kwarg
minutes_delta = (end - start).seconds/60
datetimes = []
delta_range = range(0, minutes_delta + 1)
return [start + timedelta(minutes=i) for i in delta_range]
調試器會做:
debugging 'generate_minutes_in_timespan':
args:
2017-08-31 17:19:00
2017-09-01 12:05:00
這讓我高興略有下降,但發現我錯過了真實的信息。
我要的是:
debugging 'generate_minutes_in_timespan':
args:
start = 2017-08-31 17:19:00
end = 2017-09-01 12:05:00
*args:
not allowed
kwargs:
cutoff_date = None
*kwargs:
not allowed
那些ARGS有語義,並且可以作爲start
和end
......他們不是*args
。
有很深的Python標準庫,我可以讀這個方法generate_minutes_in_timespan
和採摘關報關,名稱和所需位置參數的個數順序,任何宣稱kwargs(類似於聲明cutoff_date=None
還名稱的方式,我會想知道cutoff_date
作爲kwarg提供,vs可選**kwargs
...)
我爲{'args': [('start', 'the value given'), ('end', 'the user given value')], 'star_args': None, 'kwargs': {'cutoff_date': None}, 'star_kwargs': None}
拍攝了完整的調試信息。
謝謝
我覺得用戶是在PY 2,因爲他們依靠'/'一個整數除法。對於py 3用戶,這絕對是比我更好的答案。 – wim