Browse Source

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/
283
Chris Glass 11 years ago
parent
commit
8997c760a2
  1. 7
      electrum
  2. 4
      lib/blockchain.py
  3. 4
      lib/daemon.py
  4. 4
      lib/network.py

7
electrum

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

4
lib/blockchain.py

@ -241,7 +241,9 @@ class Blockchain(threading.Thread):
return h 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 max_target = 0x00000000FFFF0000000000000000000000000000000000000000000000000000
if index == 0: return 0x1d00ffff, max_target if index == 0: return 0x1d00ffff, max_target

4
lib/daemon.py

@ -34,7 +34,9 @@ class NetworkProxy(threading.Thread):
# connects to daemon # connects to daemon
# sends requests, runs callbacks # 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) threading.Thread.__init__(self)
self.daemon = True self.daemon = True
self.config = SimpleConfig(config) if type(config) == type({}) else config self.config = SimpleConfig(config) if type(config) == type({}) else config

4
lib/network.py

@ -72,7 +72,9 @@ from simple_config import SimpleConfig
class Network(threading.Thread): 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) threading.Thread.__init__(self)
self.daemon = True self.daemon = True
self.config = SimpleConfig(config) if type(config) == type({}) else config self.config = SimpleConfig(config) if type(config) == type({}) else config

Loading…
Cancel
Save