Python Tips and Tricks

2 minute read

Install Python packages on Windows 10

Preferably install python 3.7 (64 bit) and Git bash.

# If there is a file requirements.txt you can install the packages using this command:
$ pip3 install -r requirements.txt
# Otherwise install the dependencies individually
$ pip3 install numpy
$ pip3 install scipy
$ pip3 install pandas
$ pip3 install jupyter
$ pip3 install notebook
$ pip3 install matplotlib

To install pytorch, go to this page and generate the command easily.

# The generated command looks like this:
$ pip install torch==1.4.0+cpu torchvision==0.5.0+cpu -f

Command line options for python

Option to disabling assertions : -o

python -o

This makes the code run faster and more important, keep on executing. However, you have to make a decision between these 2 questions:

  • Do the users want the code dead? or
  • Do the users want the code to produce wrong results?

Configure Test Coverage framework (on Ubuntu)

sudo pip install coverage
sudo apt-get install python-dev
sudo apt-get install python3-dev
coverage --version

Use coverage run to run the program and gather data:

# if you usually do:
# $ python arg1 arg2
# then do:
$ coverage run arg1 arg2

Use coverage report to report the results.

coverage report -m

Or, for a nicer presentation, use:

coverage html

A Reminder on how to use python slice with negative numbers

>>> l = ['abc', 'def', 'ghi', 'jkl', 'mno', 'pqr', 'stu', 'vwx', 'yz&']

# I want a string up to 'def' from 'vwx', all in between
# from 'vwx' so -2;to 'def' just before 'abc' so -9; backwards all so -1.
>>> l[-2:-9:-1]
['vwx', 'stu', 'pqr', 'mno', 'jkl', 'ghi', 'def']

# For the same 'vwx' 7 to 'def' just before 'abc' 0, backwards all -1
>>> l[7:0:-1]
['vwx', 'stu', 'pqr', 'mno', 'jkl', 'ghi', 'def']

How to define a 3 dimension list in python

# to create l[6][5][4] filled with zero
>>> l = [[[0 for z in range(4)]for col in range(5)] for row in range(6)]

Utilizing Just in-time compiler (JIT)

import random
from numba import jit

def monte_carlo_pi(nsamples):
    acc = 0
    for i in range(nsamples):
        x = random.random()
        y = random.random()
        if (x**2 + y**2) < 1.0:
            acc += 1
    return 4.0 * acc / nsamples

And then run the function by simply call it. The original function can still be called by .py_func attribute.

nsamples = 100000