Do not use mutables as default values!

This blog article explains why (just an example, many other articles
discuss this ad nauseam):
http://pythonconquerstheuniverse.wordpress.com/2012/02/15/mutable-default-arguments/
This commit is contained in:
Chris Glass 2014-06-25 17:43:45 +02:00
parent fff3ed9b77
commit 8997c760a2
4 changed files with 12 additions and 7 deletions

View File

@ -103,16 +103,15 @@ def print_help_cb(self, opt, value, parser):
print_help(parser)
def run_command(cmd, password=None, args=[]):
import socket
def run_command(cmd, password=None, args=None):
if args is None:
args = [] # Do not use mutables as default values!
if cmd.requires_network and not options.offline:
network = NetworkProxy(config)
if not network.start(start_daemon= (True if cmd.name!='daemon' else False)):
print "Daemon not running"
sys.exit(1)
if wallet:
wallet.start_threads(network)
wallet.update()

View File

@ -241,7 +241,9 @@ class Blockchain(threading.Thread):
return h
def get_target(self, index, chain=[]):
def get_target(self, index, chain=None):
if chain is None:
chain = [] # Do not use mutables as default values!
max_target = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
if index == 0: return 0x1d00ffff, max_target

View File

@ -34,7 +34,9 @@ class NetworkProxy(threading.Thread):
# connects to daemon
# sends requests, runs callbacks
def __init__(self, config = {}):
def __init__(self, config=None):
if config is None:
config = {} # Do not use mutables as default arguments!
threading.Thread.__init__(self)
self.daemon = True
self.config = SimpleConfig(config) if type(config) == type({}) else config

View File

@ -72,7 +72,9 @@ from simple_config import SimpleConfig
class Network(threading.Thread):
def __init__(self, config = {}):
def __init__(self, config=None):
if config is None:
config = {} # Do not use mutables as default values!
threading.Thread.__init__(self)
self.daemon = True
self.config = SimpleConfig(config) if type(config) == type({}) else config