Software Freedom Celebration
SMVDU
Speaker
Parbhat Puri (@parbhat)
Nick: appaparbhatpuri17@gmail.com
http://parbhat.github.io/
http://www.github.com/parbhat
Software Freedom Day is a worldwide celebration of Free and Open Source Software (FOSS). Our goal in this celebration is to educate you about the benefits of using high quality FOSS in education, in government, at home, and in business -- in short, everywhere!
What is Open Source ?
What is Python ?
This is Python....

History
Over six years ago, in December 1989, I was looking for a "hobby" programming project that would keep me occupied during the week around Christmas. My office ... would be closed, but I had a home computer, and not much else on my hands. I decided to write an interpreter for the new scripting language I had been thinking about lately: a descendant of ABC that would appeal to Unix/C hackers. I chose Python as a working title for the project, being in a slightly irreverent mood (and a big fan of Monty Python's Flying Circus).
- Salute this guy : Guino Van Rossum
 - Python conceived in late 1980s
 
- Implementation was started in Dec 1989
 
WHAT IS PYTHON?
- 
A dynamic, interpreted, high-level language
 - 
Does not require declaring the types of variables or parameters or methods
 - 
Extremely readable
 - 
Used for solving a really wide range of problems
 - 
Object-oriented
 - 
Does not force Object-orientation
 - 
Has and requires common sense
 
Who all are using Python?











 
and the list goes on...
Why Python?
- Used by many companies across the world including Google, Rackspace, Industrial Light and Magic, Flickr and many others.
 - A thriving community of developers and contributors and third party application developers.
 - PyPI (Python Package Index) lists about 33500 third-party software projects*... You name an area, there must be a Python package in it and mostly opensource and free!
 - Interpreted, dynamically typed, clean syntax, very easy to learn.
 - 
Learn Python in an Afternoon ;) - http://docs.python.org/2/tutorial/
 
Where ?
Show me the Money ?
- IT salaries are up
 - Python is top growing skills last year
 - Average starting python programmer salary 440K INR
 
How to start ?
Hello, world
How it's done with Java and C++
public class HelloWorld {
    public static void main(String[] args) {
        System.out.println("Hello, World");
    }
} #include 
main()
{
    cout << "Hello World!";
    return 0;
}  
Requires a LOT more than just common sense.
The Pythonic way
Common sense: When you want to print a string, just print it.
In Python interpreter
 >>> print "Hello, world."As a script
Open your favorite editor and type
#! /usr/bin/env python
print "Hello, world."and save it as hello.py. And then execute it from command line as below
$ python hello.py
VARIABLES & DATATYPES
- Identifiers
 - Keywords
 - Assignments
 - Operators & Expressions
 
IDENTIFIERS
identifier ::= (letter|"_") (letter | digit | "_")*letter ::= lowercase | uppercaselowercase ::= "a"..."z"uppercase ::= "A"..."Z"digit ::= "0"..."9"
So, while abc is a valid identifier, 1abc is not :)
KEYWORDS
and del from not whileas elif global or withassert else if pass yieldbreak except import printclass exec in raisecontinue finally is returndef for lambda try
Assignments
In Python, we don't declare what kind of data we want to put in a variable.
>>> a = 12>>> b = 23>>> a + b>>> 35
Examples
Multiple assignments
>>> a, b = 10, 12>>> print a10>>> print b12
Python is fun
Let's try to swap 2 numbers
# The usual way>>> a = 10>>> b = 20>>> c = b>>> b = a>>> a = c>>> print a, b20 10
# The Pythonic way>>> a, b = 10, 20>>> a, b = b, a>>> print a, b20 10
DATATYPES
# Integer>>> a = 10# Float>>> b = 2.35# String>>> c = "Hello"# List>>> d = [1, 2, 'blah', 3.2]# Dictionary>>> f = {'a': 1, 'b': 2.3, 'c': "foo"}>>> f['b']2.3
Operators
- 
Arithmetic: +, -, /, *, %, //
 - 
Relational: >, <, >=, <=, ==, !=
 - 
Logical: and, or
 - 
Shorthand: +=, /=, -=, *=
 
Arithmetic operators
>>> 2 + 3 5 >>> 23 - 3 20 >>> 22.0 / 12 1.8333333333333333>>> 14 % 32>>> 4.0 // 3 1.0 >>> 4.0 / 3 1.3333333333333333
Logical operators
To do logical AND , OR we use and ,*or* keywords. x and y returns False if x is False else it returns evaluation of y. If x is True, it returns True.
>>> 1 and 4
4
>>> 1 or 4
1
>>> -1 or 4
-1
>>> 0 or 4
4 Shorthand Operators
x op = expression is the syntax for shorthand operators. It will be evaluated like x = x op expression , Few examples are
>>> a = 12
>>> a += 13
>>> a
25
>>> a /= 3
>>> a
8
>>> a += (26 * 32)
>>> a
840 Expressions
Expressions are made of operators and operands. An expression is like 2 + 3 .
Generally while writing expressions we put spaces before and after every operator so that the code becomes clearer to read, like
a = 234 * (45 - 56.0 / 34) How expressions are evaluated
(6 + 3) - 12 / 3 + 3 * 2 -1
9 - 12 / 3 + 3 * 2 -1
9 - 4 + 3 * 2 - 1
9 - 4 + 6 - 1
5 + 6 - 1
11 - 1
10
Type Conversions
- 
float(string) -> float value
 - 
int(string) -> integer value
 - str(integer) or str(float) -> string representation
 
>>> a = 8.126768
>>> str(a)
'8.126768' If-else , the control flow
if expr1:
    do this
elif expr2:
    do that
...
...
...
else:
   do whatever 
    
        Truth value testing
    
        
            
                DO
            
        
    
    if x:
    pass 
        
            
                DON'T
            
        
    
    if x == True:
    pass  
    
     
Functions
Defining a function
def functionname(params):
    statement1
    statement2 Sum of 2 integers
            >>> def sum(a, b):
        
        
            ...     return a + b
        
    
            >>> res = sum(234234, 34453546464)
        
        
            >>> res
        
        
            34453780698L
        
    Local & global variables
#!/usr/bin/env python
def change(b):
    a = 90
    print a
a = 9
print "Before the function call ", a
print "inside change function",
change(a)
print "After the function call ", a 
               The output
$ ./local.py
Before the function call  9
inside change function 90
After the function call  9 
    An example for global variable usage
#!/usr/bin/env python
def change(b):
    global a
    a = 90
    print a
a = 9
print "Before the function call ", a
print "inside change function",
change(a)
print "After the function call ", a 
Default argument value
>>> def test(a , b=-99):
...     if a > b:
...         return True
...     else:
...         return False 
>>> test(12, 23)
False
>>> test(12)
True Keyword arguments
>>> def func(a, b=5, c=10):
...     print 'a is', a, 'and b is', b, 'and c is', c
...
>>> func(12, 24)
a is 12 and b is 24 and c is 10
>>> func(12, c = 24)
a is 12 and b is 5 and c is 24
>>> func(b=12, c = 24, a = -1)
a is -1 and b is 12 and c is 24 
Guess the output of this ;)
>>> def func(a, b=13, v):
...     print a, b, v
... 
Lists
>>> a = [23, 45, 1, -3434, 43624356, 234] 
# Append
>>> a.append(45)>>> a
[23, 45, 1, -3434, 43624356, 234, 45] 
# Insert
>>> a.insert(0, 1) # 1 added at the 0th position of the list
>>> a
[1, 23, 45, 1, -3434, 43624356, 234, 45] >>> a.insert(0, 111)
>>> a
[111, 1, 23, 45, 1, -3434, 43624356, 234, 45]# Count the length of the list
>>> a.count(45)
2 # Remove a element from the list
>>> a.remove(234) 
>>> a
[111, 1, 23, 45, 1, -3434, 43624356, 45] # Reverse a list
>>> a.reverse() >>> a
[45, 43624356, -3434, 1, 45, 23, 1, 111] # Append a list into another list
>>> b = [45, 56, 90]
>>> a.append(b) >>> a
[45, 43624356, -3434, 1, 45, 23, 1, 111, [45, 56, 90]]
>>> a[-1]
[45, 56, 90] # Extend a into b
>>> a.extend(b) #To add the values of b not the b itself
>>> a
[45, 43624356, -3434, 1, 45, 23, 1, 111, [45, 56, 90], 45, 56, 90]
>>> a[-1]
90 # Sort a list
>>> a.sort()
>>> a
[-3434, 1, 1, 23, 45, 45, 45, 56, 90, 111, 43624356, [45, 56, 90]] # Delete a element in list
>>> del a[-1]
>>> a
[-3434, 1, 1, 23, 45, 45, 45, 56, 90, 111, 43624356] # Basic Data Structure
>>> a = [1, 2, 3, 4, 5]
>>> a.append(1)
>>> a
[1, 2, 3, 4, 5, 1]
>>> a.pop(0)
1
>>> a.pop(0)
2
>>> a
[3, 4, 5, 1] List Comprehensions
# List Comprehensions 
>>> a = [1, 2, 3]
>>> [x ** 2 for x in a]
[1, 4, 9]
>>> z = [x + 1 for x in [x ** 2 for x in a]]
>>> z
[2, 5, 10]
Looping
While Loop
while condition:
    statement1
    statement2 
>>> n = 0>>> while n < 11: ... print n ... n += 1 ... 0 1 2 3 4 5 6 7 8 9 10
For Loop
>>> a = ['Python', 'is', 'powerful'] 
>>> for x in a:
...     print x,
...
Python is powerful 
>>> range(1, 5)
[1, 2, 3, 4]
>>> range(1, 15, 3)
[1, 4, 7, 10, 13]
>>> range(10)
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> range(10, 1, -2)
[10, 8, 6, 4, 2]
For...else...
>>> for i in range(0, 5):
...     print i
... else:
...     print "Bye bye"
...
0
1
2
3
4
Bye bye
Sets
# Set: Another data-structure with no duplicate items
>>> a = set('abcthabcjwethddda')
>>> a
set(['a', 'c', 'b', 'e', 'd', 'h', 'j', 't', 'w']) # Set Operations
>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  # unique letters in a
set(['a', 'r', 'b', 'c', 'd'])>>> a - b                              # letters in a but not in b
set(['r', 'd', 'b'])>>> a | b                              # letters in either a or b
set(['a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'])>>> a & b                              # letters in both a and b
set(['a', 'c']) >>> a ^ b                              # letters in a or b but not both
set(['r', 'd', 'b', 'm', 'z', 'l']) 
>>> a
set(['a', 'c', 'b', 'e', 'd', 'h', 'j', 'q', 't', 'w'])
>>> a.add('p')
>>> a
set(['a', 'c', 'b', 'e', 'd', 'h', 'j', 'q', 'p', 't', 'w']) Strings
>>> s = "I am Indian"
>>> s
'I am Indian'
>>> s = 'I am Indian'
>>> s = "Here is a line \
... splitted in two lines"
>>> s
'Here is a line split in two lines'
>>> s = "Here is a line \n split in two lines"
>>> s
'Here is a line \n split in two lines'
>>> print s
Here is a line
split in two lines 
>>> s = """ This is a
... multiline string, so you can
... write many lines"""
>>> print s
This is a
multiline string, so you can
write many lines # String Methods
>>> s = "We all love Python" 
>>> s.split(" ")
['We', 'all', 'love', 'Python']
>>> x = "Nishant:is:waiting"
>>> x.split(':')
['Nishant', 'is', 'waiting']>>> "-".join("GNU/Linux is great".split(" "))
'GNU/Linux-is-great' >>> s = "  abc\n "
>>> s.strip()
'abc' >>> s = "faulty for a reason"
>>> s.find("for")
7>>> s.find("fora")
-1 
>>> s.startswith("fa") #To check if the string startswith fa or not True>>> s.endswith("reason") # True
>>> s = "sayan chowdhury"
>>> s.title()
'Sayan Chowdhury' >>> z = s.upper()
>>> z
'SAYAN CHOWDHURY'
>>> z.lower()
'sayan chowdhury'
>>> s = "I am A pRoGraMMer"
>> s.swapcase()
'i AM a PrOgRAmmER'File-Handling
>>> f = open('foo.txt', 'w') >>> 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 = open('foo.txt') 
>>> f.readlines()
['1\n', '2\n'] >>> f.close()Modules
An example
"""
Bars Module
============
This is an example module with provide different ways to print bars.
"""
def starbar(num):
    """
    Prints a bar with *
    :arg num: Length of the bar
    """
    print '*' * num
def hashbar(num):
    """
    Prints a bar with #
    :arg num: Length of the bar
    """
    print '#' * num
def simplebar(num):
    """
    Prints a bar with -
    :arg num: Length of the bar
    """
    print '-' * num >>> import bars>>> bars.hashbar(10)##########
Importing modules
>>> from bars import simplebar, starbar >>> simplebar(10) >>> ----------# NEVER DO THIS>>> from bars import *
Submodules
We can have many submodules inside a module.
mymodule
|-- bars.py
|-- __init__.py
`-- utils.py Default modules
help:
>>> help(str) os:
>>> import os
>>> os.getpid()
14875
>>> os.getcwd()
'/Users/rtnpro'
>>> os.chdir('/tmp')
>>> os.getcwd()
'/tmp' Example
def view_dir(path='.'):
    """
    This function prints all files and directories in the given directory.
    :args path: Path to the directory, default is current directory
    """
    names = os.listdir(path)
    names.sort()
    for name in names:
        print name, Using the view_dir() example:
>>> view_dir('/')
.readahead bin boot dev etc home junk lib lib64 lost+found media mnt opt
proc root run sbin srv sys tmp usr var Fun exercise
Let's find all Pycon US 2013 videos' download links :)
Are you ready for the challenge?
Solution
from BeautifulSoup import BeautifulSoup 
import requests 
 
url = 'http://pyvideo.org/category/33/pycon-us-2013/files' 
req = requests.get(url) 
data = req.text 
soup = BeautifulSoup(data) 
 
for link in soup.findAll('a', href=True): 
    # if link['href'].startswith(
	#'http://s3.us.archive.org/nextdayvideo/psf/pycon2013/'):
    if link.get('href', '').startswith(
            'http://s3.us.archive.org/nextdayvideo/psf/pycon2013/'): 
        #print link.get('href') 
        print link.get('href').split('?Signature')[0]
Python fun
Check my university result 
--> In just 32 lines of code 
Friend result scrap by enrollment number
--> In just 20 lines of code
Ti zen application 
--> In just 300 lines of code 
Railway site check tickets booked
--> In just 70 lines of code 
Python Fun
Flipkart price change monitor 
--> In just 55 lines of code
Friend want galaxy S near x amount 
--> Wrote it in just 50 lines of code. 
Product reviews
--> Wrote in just 150 lines of code 
Get photos of my friends 
--> Wrote it in just 80 lines of code 
Merged bloggers
--> Wrote in just 70 lines of code 
Python Fun
Script to transfer file from pc to mobile 
--> In just 1 line 
python -m SimpleHTTPServer 8000
Python file downloader 
--> In just 5 line of code 
Cricket live score
--> In just 6 lines of code 
Flipkart check if my product came or not 
--> In just 50 lines of code 
Wanted 50-60 images to test gallery 
--> In just 7 lines of code. 
Links you can use
- http://pypi.python.org - Python Package Index
 - http://docs.python.org/2/tutorial/ - The “official” Python tutorial
 - http://wiki.python.org/moin/MostPopularPythonProjects - 
 - MostPopularPythonProjects
 - http://www.python.org/community/workshops/ - Python 
 - Conferences and Workshops
 - http://wiki.python.org/moin/ - The Python “MoinMoin” Wiki
 - http://docs.python.org/devguide/ - All about developing Python
 - 
http://mail.python.org/mailman/listinfo - A list of all Python
 - http://pymbook.readthedocs.org/en/latest/ - Python for you & me
 - http://pythonbooks.revolunet.com/
 
Thank You
Any questions ?
Copy of SFD Python Workshop
By Rushal Verma
Copy of SFD Python Workshop
Python Workshop organised in Software Freedom Day 2014.
- 1,529