Difference between revisions of "Programming:Python/Tips"

From WhyAskWhy.org Wiki
Jump to: navigation, search
(Exported tips/notes related content from main Python page)
 
m (Replaced pre tags with syntaxhighlight)
 
Line 20: Line 20:
 
=== Generating GUIDs ===
 
=== Generating GUIDs ===
  
<pre>
+
<syntaxhighlight lang="python">
 
   import uuid
 
   import uuid
 
   uuid.uuid4()
 
   uuid.uuid4()
</pre>
+
</syntaxhighlight>
  
 
=== Functions ===
 
=== Functions ===
Line 36: Line 36:
  
  
<pre>
+
<syntaxhighlight lang="python">
 
def f(a, L=[]):
 
def f(a, L=[]):
 
     L.append(a)
 
     L.append(a)
Line 44: Line 44:
 
print f(2)
 
print f(2)
 
print f(3)
 
print f(3)
</pre>
+
</syntaxhighlight>
  
 
This will print:
 
This will print:
  
<pre>[1]
+
<syntaxhighlight lang="python">
 +
[1]
 
[1, 2]
 
[1, 2]
 
[1, 2, 3]
 
[1, 2, 3]
</pre>
+
</syntaxhighlight>
  
 
If you don’t want the default to be shared between subsequent calls, you can write the function like this instead:
 
If you don’t want the default to be shared between subsequent calls, you can write the function like this instead:
  
<pre>
+
<syntaxhighlight lang="python">
 
def f(a, L=None):
 
def f(a, L=None):
 
     if L is None:
 
     if L is None:
Line 61: Line 62:
 
     L.append(a)
 
     L.append(a)
 
     return L
 
     return L
</pre>
+
</syntaxhighlight>
  
 
=== Mutable defaults trap ===
 
=== Mutable defaults trap ===

Latest revision as of 19:42, 16 July 2012


My notes on Python

Module Structure and Layout

From Core Python Programming , 2E (3.4.1)

  1. Startup line (Unix)
  2. module documentation
  3. module imports
  4. variable declarations (Global)
  5. class declarations
  6. function declarations
  7. "main" body

Generating GUIDs

  import uuid
  uuid.uuid4()

Functions

Default Arguments

Evaluated only once

From the official Python documentation:

Important warning: The default value is evaluated only once. This makes a difference when the default is a mutable object such as a list, dictionary, or instances of most classes. For example, the following function accumulates the arguments passed to it on subsequent calls:


def f(a, L=[]):
    L.append(a)
    return L

print f(1)
print f(2)
print f(3)

This will print:

[1]
[1, 2]
[1, 2, 3]

If you don’t want the default to be shared between subsequent calls, you can write the function like this instead:

def f(a, L=None):
    if L is None:
        L = []
    L.append(a)
    return L

Mutable defaults trap

From: Python Gotchas, Mutable defaults for function/method arguments

You should never, never, NEVER use a list or a dictionary as a default value for an argument to a class method. Unless, of course, you really, really, REALLY know what you're doing