Every Python programmer knows to avoid mutable default arguments:def fn(mutable=): mutable.append('elem') print mutable fn() fn() $ python test.py ['elem'] ['elem', 'elem']
However, many are not clear that this is due to arguments being evaluated at import time, rather than the first time the function is evaluated.
This results in related quirks such as:def never_called(error=1/0): pass $ python test.py Traceback (most recent call last): File "test.py", line 1, in <module> ZeroDivisionError: integer division or modulo by zero
... and an—implementation-specific—quirk caused by naive constant folding:def never_called(): 99999999 ** 9999999 $ python test.py [hangs]
I suspect that this can be used as denial-of-service vector.
As Theresa May moves from the Home Office to Number 10, it is perhaps timely to reflect on public attitudes to surveillance as evidenced in Liberty’s campaign film “Show me yours” in April of this year. In the film (shown below), comedian Olivia Lee pursues members of the public with the intention of taking details from their mobile phones of all their recent communications or browsing activity. The reactions of the people approached speak for themselves. Unfortunately, Liberty research suggests that 75% of adults in the UK had never heard of the impending legislation laid out in the Investigatory Powers Bill.
The following contributors got their Debian Developer accounts in the last two months:
The following contributors were added as Debian Maintainers in the last two months: