Quick reference for Python Scripting

Article to blaze through reference for Python Scripting

·

11 min read

Quick reference for Python Scripting

Photo by Alex Chumak on Unsplash

Introduction to Python

  • Interpreted language
  • Multiparadigm

    Arithmetic Operations

    azhercan@azhercan-MacBook:~/codes/python/hacknight$ python
    Python 2.7.3 (default, Aug  1 2012, 05:14:39)
    [GCC 4.6.3] on linux2
    Type "help", "copyright", "credits" or "license" for more information.
    >>>
    >>> print "Let's learn Python"
    Let's learn Python
    Numbers
    >>> 23 + 43
    66
    >>> 23 - 45
    -22
    >>> 23 * 45
    1035
    >>> 23 ** 4
    279841
    >>> 23 / 4
    5
    >>> 23 / 4.0
    5.75
    >>> 7 % 2
    1
    Expressions
    >>> 3 < 2
    False
    >>> 3 > 2
    True
    >>> 3 > 2 < 1
    False
    >>> (3 > 2) and (2 < 1)
    False
    >>> 3 > 2 > 1 > 0
    True
    >>> (3 > 2) and (2 > 1) and (1 > 0)
    True
    >>> 1 or 2
    1
    >>> 2 or 1
    2
    >>> 1 + 2 + 3 * 4 + 5
    20
    1 + 2 + 3 * 4 + 5
    
    3   + 3 * 4 + 5
            
    3   +   12  + 5
        
        15      + 5
                
               20
    >>> "python" > "perl"
    True
    >>> "python" > "java"
    True
    Variables
    >>> a = 23
    >>> print a
    23
    >>> a = "Python"
    >>> print a
    Python
    Parallel Assignment
    >>> language, version = "Python", 2.7
    >>> print language, version
    Python 2.7
    >>> x = 23
    >>> x = 23
    >>> y = 20
    >>> x, y = x, x + y
    >>> print x, y
    23 43
    Swap Variable
    >>> x = 12
    >>> y = 21
    >>> x, y = y, x
    >>> print x, y
    21 12
    >>>
    

String Operations

>>> language = "Python"
>>> print language
Python
>>> language = 'Python'
>>> print language
Python
>>> language = """Python"""
>>> print language
Python
>>> description = """Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability.
... It is an expressive language which provides language constructs intended to enable clear programs on both a small and large scale.
... Python supports multiple programming paradigms, including object-oriented, imperative and functional programming styles.
... """
>>> print description
Python is a general-purpose, high-level programming language whose design philosophy emphasizes code readability.
It is an expressive language which provides language constructs intended to enable clear programs on both a small and large scale.
Python supports multiple programming paradigms, including object-oriented, imperative and functional programming styles.
>>>
Condition
>>> a = 12
>>> b = 23
>>> if a > b:
...     print "a is greater than b"
... else:
...     print "b is greater than a"
...
b is greater than a
>>> if a > 0:
...     print "a is positive"
... elif a == 0:
...     print "a is zero"
... elif a < 0:
...     print "a is negative"
...
a is positive

First Python Program

#! /usr/bin/env python
#! -*- coding: utf-8 -*-
# Write a program to get integer from user and find it is positive or negative or zero.
number = int(raw_input("Enter a number:"))
if number > 0:
    print "number %d is positive" % (number)
elif number == 0:
    print "number %d is zero" % (number)
elif number < 0:
    print "number %d is negative" % (number)
azhercan@azhercan-MacBook:~/codes/python/python-training/examples$ ./first.py
Enter a number:23
number 23 is positive
azhercan@azhercan-MacBook:~/codes/python/python-training/examples$ python first.py
Enter a number:23
number 23 is positive

Python Data Structure

List
  • List is a collection of heterogenous data types like integer, float, string.
    >>> a = [1, 2, 3]
    >>> b = ["Python", 2.73, 3]
    >>> len(a)
    3
    >>> len(b)
    3
    >>> a[0]
    1
    >>> a[-1]
    3
    >>> b[2]
    3
    >>> [1, 2] + [3, 4]
    [1, 2, 3, 4]
    >>> all = [a, b]
    >>> all[0]
    [1, 2, 3]
    >>> all[-1]
    ['Python', 2.73, 3]
    >>> all[3]
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    IndexError: list index out of range
    >>> all.append("Bangalore")
    >>> all
    [[1, 2, 3], ['Python', 2.73, 3], 'Bangalore']
    >>> del all[-1]
    >>> all
    [[1, 2, 3], ['Python', 2.73, 3]]
    >>> all[1] = "insert"
    >>> all
    [[1, 2, 3], 'insert']
    >>> all
    [[1, 2, 3], 'insert']
    >>> 'insert' in all
    True
    >>> range(10)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> range(10, 2)
    []
    >>> range(10, 0, -1)
    [10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
    >>> range(0, 12, 1)
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11]
    range() -> range([start,] stop[, step]) -> list of integers
    Accessing list elements
    >>> for item in all:
    ...     print item
    ...
    [1, 2, 3]
    insert
    >>> for number in range(10):
    ...     print number
    ...
    0
    1
    2
    3
    4
    5
    6
    7
    8
    9
    Find all odd numbers from 0 to 9
    >>> for number in range(0, 10):
    ...     if number % 2:
    ...         print number
    ...
    1
    3
    5
    7
    9
    

Inbuilt functions

>>> help([])
>>> min([1, 2, 3])
1
>>> max([1, 2, 3])
3
>>> sum([1, 2, 3])
6
>>> pow(2, 3)
8

Tuples

  • Tuple is a sequence type just like list, but it is immutable.
  • A tuple consists of a number of values separated by commas.
    >>> t = (1, 2)
    >>> t
    (1, 2)
    >>> t[0]
    1
    >>> t[0] = 1.1
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object does not support item assignment
    >>> t = 1, 2
    >>> t
    (1, 2)
    >>> del t[0]
    Traceback (most recent call last):
    File "<stdin>", line 1, in <module>
    TypeError: 'tuple' object doesn't support item deletion
    >>> for item in t:
    ...     print item
    ...
    1
    2
    Slicing
    >>> l = range(10)
    >>> t = tuple(range(10))
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> t
    (0, 1, 2, 3, 4, 5, 6, 7, 8, 9)
    >>> l[1:]
    [1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> t[:3]
    (0, 1, 2)
    >>> l[0:8:2]
    [0, 2, 4, 6]
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> l[0:8:3]
    [0, 3, 6]
    >>> l[::2]
    [0, 2, 4, 6, 8]
    >>> l[::]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> l
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> l[::-1]
    [9, 8, 7, 6, 5, 4, 3, 2, 1, 0]
    >>>
    

Sets

  • Sets are unordered collection of unique elements.
    >>> x = set([1, 2, 1])
    >>> x
    set([1, 2])
    >>> x.add(3)
    >>> x
    set([1, 2, 3])
    >>> x = {1, 3, 4, 1}
    >>> x
    set([1, 3, 4])
    >>> 1 in x
    True
    >>> -1 in x
    False
    >>>
    Again Lists
    >>> even_numbers = []
    >>> for number in range(0, 9):
    ...     if number % 2 == 0:
    ...         even_numbers.append(number)
    ...
    >>> even_numbers
    [0, 2, 4, 6, 8]
    As a programmer your job is write lesser code
    List Comprehensions
    >>> [x for x in range(10)]
    [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
    >>> [x + 1 for x in range(10)]
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> numbers = []
    >>> for x in range(10):
    ...     numbers.append(x + 1)
    ...
    >>> print numbers
    [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
    >>> even_numbers = [x for x in range(10) if x %2 == 0]
    >>> even_numbers
    [0, 2, 4, 6, 8]
    >>> [(x, y) for x in range(5) for y in range(5) if (x+y)%2 == 0]
    [(0, 0), (0, 2), (0, 4), (1, 1), (1, 3), (2, 0), (2, 2), (2, 4), (3, 1), (3, 3), (4, 0), (4, 2), (4, 4)]
    >>>
    

Dictionaries

>>> d = {'a': 1, 'b': 2, 'c': 3}
>>> d['a']
1
>>> d.get('a')
1
>>> d['z']
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
KeyError: 'z'
>>> d.get('z')
>>>
>>> d['a'] = 2
>>> d
{'a': 2, 'c': 3, 'b': 2}
>>> d['z'] = 26
>>> d
{'a': 2, 'c': 3, 'b': 2, 'z': 26}
>>> d.keys()
['a', 'c', 'b', 'z']
>>> d.values()
[2, 3, 2, 26]
>>> d.items()
[('a', 2), ('c', 3), ('b', 2), ('z', 26)]
>>> type(d.items())
<type 'list'>
>>> d = {'a': 2, 'b': 2, 'c': 3, 'z': 26}
>>> for key in d:
...     print key
...
a
c
b
z
>>> for key, value in d.items():
...     print key, value
...
a 2
c 3
b 2
z 26
>>> 'a' in d
True
>>> d.has_key('a')
True

Function

  • Just like a value can be associated with a name, a piece of logic can also be associated with a name by defining a function.
    >>> def square(x):
    ...     return x * x
    ...
    >>> square(2)
    4
    >>> square(2+1)
    9
    >>> square(x=5)
    25
    >>> def dont_return(name):
    ...     print "Master %s ordered not to return value" % name
    ...
    >>> dont_return("Python")
    Master Python ordered not to return value
    >>> def power(base, to_raise=2):
    ...     return base ** to_raise
    ...
    >>> power(3)
    9
    >>> power(3, 3)
    27
    >>> def power(to_raise=2, base):
    ...     return base ** to_raise
    ...
    File "<stdin>", line 1
    SyntaxError: non-default argument follows default argument
    >>> square(3) + square(4)
    25
    >>> power(base=square(2))
    16
    >>> def sum_of_square(x, y):
    ...     return square(x) + square(y)
    ...
    >>> sum_of_square(2, 3)
    13
    >>> s = square
    >>> s(4)
    16
    >>> def fxy(f, x, y):
    ...     return f(x) + f(y)
    ...
    >>> fxy(square, 3, 4)
    25
    Variable Scopes
    >>> i = 0
    >>> def scope():
    ...     print i
    ...
    >>> scope()
    0
    >>> def scope():
    ...     i = 2
    ...     print i
    ...
    >>> scope()
    2
    >>> x, y = 0, 0
    >>> def incr(x):
    ...     y = x + 1
    ...     return y
    ...
    >>> incr(5)
    6
    >>> print x, y
    0 0
    >>> numcalls = 0
    >>> def echo(message):
    ...     global numcalls
    ...     print "Message: %s" %(message)
    ...     numcalls += 1
    ...
    >>> echo("Welcome")
    Message: Welcome
    >>> print numcalls
    1
    >>> echo("Is Python Driving you nuts?")
    Message: Is Python Driving you nuts?
    >>> print numcalls
    2
    >>>
    

Methods

  • Methods are special kind of functions that work on an object.
    >>> lang = "Python"
    >>> type(lang)
    <type 'str'>
    >>> dir(lang)
    ['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__',
    '__getitem__', '__getnewargs__', '__getslice__', '__gt__', '__hash__', '__init__', '__le__', '__len__', '__lt__',
    '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__',
    '__sizeof__', '__str__', '__subclasshook__', '_formatter_field_name_split', '_formatter_parser',
    'capitalize', 'center', 'count', 'decode', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'index', 'isalnum',
    'isalpha', 'isdigit', 'islower', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'partition',
    'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines',
    'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']
    >>> lang.upper()
    'PYTHON'
    >>> help(lang.upper)
    >>> lang.startswith('P')
    True
    >>> help(lang.startswith)
    >>> lang.startswith('y', 1)
    True
    Files
    >>> f = open('foo.txt', 'w')
    >>> help(f)
    >>> f.write("First line")
    >>> f.close()
    >>> f = open('foo.txt', 'r')
    >>> f.readline()
    'First line'
    >>> f.readline()
    ''
    >>> f = open('foo.txt', 'a')
    >>> f.write('Second line')
    >>> f.close()
    >>> f = open('foo.txt', 'r')
    >>> f.readline()
    'First lineSecond line'
    >>> f = open('foo.txt', 'a')
    >>> f.write("New line\n")
    >>> f.write("One more new line")
    >>> f.close()
    >>> f = open('foo.txt', 'r')
    >>> f.readline()
    'First lineSecond lineNew line\n'
    >>> f.readline()
    'One more new line'
    >>> f.readline()
    ''
    >>> f.close()
    >>> f = open('foo.txt')
    >>> f.readlines()
    ['First lineSecond lineNew line\n', 'One more new line']
    >>> f = open('foo.txt', 'w')
    >>> f.writelines(["1\n", "2\n"])
    >>> f.close()
    >>> f.readlines()
    >>> f = open('foo.txt')
    >>> f.readlines()
    ['1\n', '2\n']
    >>> f.close()
    

Exception Handling

>>> f = open('a.txt')
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IOError: [Errno 2] No such file or directory: 'a.txt'
>>> try:
...     f = open('a.txt')
... except:
...     print "Exception occured"
...
Exception occured
>>> try:
...     f = open('a.txt')
... except IOError, e:
...     print e.message
...
>>> e
IOError(2, 'No such file or directory')
>>> dir(e)
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__getslice__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', 'args', 'errno', 'filename', 'message', 'strerror']
>>> e.strerror
'No such file or directory'
>>> try:
...     print l[4]
... except IndexError, e:
...     print e
...
list index out of range
>>> raise Exception("error message")
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
Exception: error message
>>> try:
...     print "a"
...     raise Exception("doom")
... except:
...     print "b"
... else:
...     print "c"
... finally:
...     print "d"
...
a
b
d

Object Oriented Programming

>>> class BankAccount:
        def __init__(self):
            self.balance = 0
def withdraw(self, amount):
            self.balance -= amount
            return self.balance
def deposit(self, amount):
            self.balance += amount
            return self.balance
>>> a = BankAccount()
>>> b = BankAccount()
>>> a.deposit(200)
200
>>> b.deposit(500)
500
>>> a.withdraw(20)
180
>>> b.withdraw(1000)
-500
>>> class MinimumBalanceAccount(BankAccount):
...    def __init__(self, minimum_balance):
...        BankAccount.__init__(self)
...        self.minimum_balance = minimum_balance
...
...    def withdraw(self, amount):
...        if self.balance - amount < self.minimum_balance:
...            print "Sorry, you need to maintain minimum balance"
...        else:
...            return BankAccount.withdraw(self, amount)
>>> a = MinimumBalanceAccount(500)
>>> a
<__main__.MinimumBalanceAccount instance at 0x7fa0bf329878>
>>> a.deposit(2000)
2000
>>> a.withdraw(1000)
1000
>>> a.withdraw(1000)
Sorry, you need to maintain minimum balance
>>> class A:
...     def f(self):
...         return self.g()
...     def g(self):
...         return "A"
...
>>> a = A()
>>> a.f()
'A'
>>> a.g()
'A'
>>> class A:
...     def __init__(self):
...         self._protected = 1
...         self.__private = 2
...
>>> a = A()
>>> a._protected
1
>>> a.__private
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
AttributeError: A instance has no attribute '__private'
Sample Python Program
#! /usr/bin/env python
#! -*- coding: utf-8 -*-
class BankAccount:
    def __init__(self):
        self.balance = 0
def withdraw(self, amount):
        self.balance -= amount
        return self.balance
def deposit(self, amount):
        self.balance += amount
        return self.balance
class MinimumBalanceAccount(BankAccount):
    def __init__(self, minimum_balance):
        BankAccount.__init__(self)
        self.minimum_balance = minimum_balance
def withdraw(self, amount):
        if self.balance - amount < self.minimum_balance:
            print "Sorry, you need to maintain minimum balance"
        else:
            return BankAccount.withdraw(self, amount)
def __repr__(self):
        return "MinimuBalanceAccount, Balance: %d" %(self.balance)
if __name__ == "__main__":
    a = MinimumBalanceAccount(500)
    print a.deposit(5000)
    print a.withdraw(4500)
    print a.withdraw(500)