Do not use mutables as default values!
authorChris Glass <tribaal@gmail.com>
Wed, 25 Jun 2014 15:43:45 +0000 (17:43 +0200)
committerChris Glass <tribaal@gmail.com>
Wed, 25 Jun 2014 15:43:45 +0000 (17:43 +0200)
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/

electrum
lib/blockchain.py
lib/daemon.py
lib/network.py

index 15edf60..e63803d 100755 (executable)
--- a/electrum
+++ b/electrum
@@ -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()
index 81b9405..ac5ea14 100644 (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
index 8ed0a36..f34159e 100644 (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
index a6be0a4..f07846a 100644 (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