In many posts, I could find some very elegant way of attacking the problem that I had never thought of. It was clear that there are nuggets of wisdom buried in "stack overflow" and mostly it would be difficult to go back and look at them. So I started by collecting weekly wisdoms on topic of my interest which usually is "Python programing". The good thing is that they are going to be unrelated snippets and bad thing is that their isn't any central theme to these posts.
Starting with this post, I will try to pull some neat solutions provided there for reference and later perusal.
#1 : round-up numbers to two decimal points
anFloat = 1234.55555 print round(anFloat, 2) # Output : 1234.5599999999999 rounded = "%.2f" % round(anFloat, 2) print rounded # Output: '1234.56'
#2: subprocess.Popen and shell nuances
The following gives an error, even if it looks like you are doing normal operation.
subprocess.Popen('export http_proxy=' + options)
The issue here is that the export is not truly an executable or command. It is a built-in command of shell like bash.
By default Popen does an os.execvp() to spawn a new process. If you want to use shell intrinsic commands then you should be doing the following
subprocess.Popen('export http_proxy=' + options, shell=True)
#3: Pair list elements
Consider a list : [1, 2, 3, 4, 5]. How do you work with successive pairs like (1,2), (2,3), (3,4) ....
A variation of zip which pairs two elements of a list.
def pairs(it): it = iter(it) prev = next(it) for v in it: yield prev, v prev = v a = [1,2,3,4,5] for prev, cur in pairs(a): print prev, cur
#4: Repeating elements in list comprehension
Try generating a list like [0, 0, 1, 1, 2, 2] using list comprehension
m = 3 #the list of integers n = 2 # of repetitions [x for x in range(m) for y in range(n)]
#5: Printing a stack trace without raising a exception
import traceback def f(): def g(): traceback.print_stack() g() f()
#6: Mixing global and local variable names
Consider the following :
def f(): x = 12 #this is a local variable global x #this is a global I declared before x = 14 #changes global x # How do you access the local x? import dis print dis.dis(f)
The global keyword isn't there at all. Assignment statement gets compiled as STORE_GLOBAL.
The local variable can not be accessed any more.