almost 3 years ago

Use None and Docstrings to Specify Dynamic Default Arguments

這個算是 Python 初學者的地雷之一,連 Python tutorial 都特別提出來。

下面的程式有問題,因為 只會執行一次。

from time import sleep
from datetime import datetime

def log(message,
    print('%s: %s' % (when, message))

解決方式是不要用 mutable 當預設值,一般是使用 None,然後將用法寫清楚 (docstrings)

def log(message, when=None):
    """Log a message with a timestamp.
        message: Message to print.
        when: datetime of when the message occurred.
            Defaults to the present time.
    when = if when is None else when
    print('%s: %s' % (when, message))


Python 慣用語 - 11 避免用 mutable 預設引數

← Effective Python 心得筆記: Item 19 Effective Python 心得筆記: Item 21 →
comments powered by Disqus