DEV Community

aabidsofi19
aabidsofi19

Posted on

Python Anti-pattern you should avoid .

Python Antipattern : Impure(IO) Default Arguments

One of most liked features of python functions is default arguments . We use them
every day . But there is gotcha that you need to take care .

Function default arguments are evaluated at module load time rather than function invocation time .
Which helps with perfomance benefits when the default arguments are static and deterministic .

So if your function is non-deterministic or has side-effects, you could run into trouble.
As the example shows, the printed time is frozen; it was set once when the code was first evaluated.

 # Antitpattern and buggy def current_datetime(dt = datetime.datetime.now()): print(dt) >>> current_datetime() 2021-10-09 16:09:43.009959 >>> current_datetime() 2021-10-09 16:09:43.009959 # do this instead  def current_datetime(dt=None) : if dt is None : dt = datetime.datetime.now() print(dt) current_datetime() >> 2022-07-24 16:07:16.435203 current_datetime() >> 2022-07-24 16:08:16.635203 
Enter fullscreen mode Exit fullscreen mode

Top comments (0)