2. Mosky:
● The examples and the PDF version are available at:
– j.mp/mosky-programming-with-python.
● It is welcome to give me any advice of this slide or
ask me the answers of the challenges.
– mosky.tw
2
5. Topics
● Basic Topics ● Adv. Topics
– Python 2 or 3? – Module and Package
– Environment – Typing
– hello.py – Comprehension
– Common Types – Functional Technique
– Flow Control – Object-oriented Prog.
– File I/O – Useful Libraries
– Documentation ● Final Project
– Scope – A Blog System
5
6. An Investigation
Do you know _________ ?
– any other programming language
– Object-oriented
– Static Typing; Strong and Weak Typing
– Dynamic Typing
– Functor; Closure
– Functional Programming
– Web development
6
8. Python 2 or 3?
● Python 2.x ● Python 3.x
– status quo – present & future
– 2.7 is end-of-life release – under active development
– harder for newcomers – easier for newcomers
– more third-party lib. – less third-party lib.
– 2to3.py – 3to2.py
– backported features: – new features:
● What's News in Python 2.6 ● What's News in Python 3.0
docs.python.org/release/2.6.4/whatsnew/2.6.html docs.python.org/py3k/whatsnew/3.0.html
● What's News in Python 2.7
docs.python.org/dev/whatsnew/2.7.html
8
9. Python 2 or 3? (cont.)
● Use Python 3 if you can.
● Decide Python 2 or 3 by the libraries you will use.
● Today, we will go ahead with Python 2.
And introduce you to the changes in Python3.
9
11. On Linux or Mac
● Python is built-in on Linux or Mac.
● All you have to do is check the version.
Type "python" in any terminal.
Python 2.7.3 (default, Sep 26 2012, 21:51:14)
[GCC 4.7.2] on linux2
Type "help", "copyright", "credits" or "license"
for more information.
>>>
11
12. On Windows
● Download the installer from:
"http://python.org/download"
● Install it.
● Add the Python's PATH.
– Computer → System Properties → Advanced system
settings → Advanced tab → Environment Variables →
System Variables → find PATH.
– "...;C:Python27"
12
13. Editor / IDE
● The Editors ● The IDE
– Sublime Text 2 – IDLE
www.sublimetext.com
● Debian-base:
– VIM sudo apt-get install idle
wiki.python.org/moin/Vim ● Windows:
– Gnome Text Editor Use the Start Menu to
(gedit) search "IDLE"
– Notepad++
● The others:
notepad-plus-plus.org – wiki.python.org/moin/PythonEditors
– ...
13
14. The Python Shell
● Type "python" in terminal.
– >>>
– ...
● Leaving a shell:
– exit()
– Linux or Mac: Ctrl+D
– Windows: Ctrl+Z<Enter>
14
15. The python Command
● Enter Python shell without arguments.
● python hello.py
● python -c 'print "Hello, World!"'
● python -m SimpleHTTPServer
15
17. hello.py
#!/usr/bin/env python
● #! the shebang.
# -*- coding: utf-8 -*- ● # -*- defines the encoding
# file: hello.py of this file.
● # means the comments.
def hello(name=None):
if name:n ● : starts a block.
return 'Hello, %s!' %
name
else: ● A block uses 4-space indent.
return 'Hello, Python!' ● A statement ends with n.
17
18. hello.py (cont.)
if __name__ == '__main__':
● __name__, the name of
module.
import sys
if len(sys.argv) >= 2: ● import is important.
print The usage:
hello(sys.argv[1])
else:
● import sys
print hello() ● from sys import argv
● … as alias
18
20. The print Statement
print 'End with a new line char.'
print 'Print', 'multiple', 'strings.'
print 'End with a space.',
print # print a new line char
20
21. The print function in Python 3
print('End with a new line char.')
print('Print', 'multiple', 'strings.')
print('End with a space.', end=' ')
print() # print a new line char
print('End with a space.', end='')
print('a', 'b', 'c', seq=',')
21
37. List and Tuple
List (mutable seq.) Tuple (seq.)
– [] – tuple()
– ['item'] – ('item', )
– ['s', 100, u'unicode'] – ('s', 100, u'unicode')
– list('abc') – tuple('abc')
– 'a b c'.split(' ')
– 'n'.join(['spam', – 'n'.join(('spam',
'eggs']) 'eggs'))
– x, y = [1, 2] – x, y = (1, 2)
– x, y = [y, x] – x, y = (y, x)
37
38. Sequence
Sequence Mutable Seq.
– s[i] = x
– x in s # performance? – s[i:j] = t
– x not in s – del s[i:j]
– s + t – s[i:j:k] = t
– s * n, n * s – s.append(x)
– s.insert(i, x)
– s[i] – s.pop([i])
– s[i:j] – s.remove(x) # performance?
– s[i:j:k] – s.extend(t)
in-place
– len(s)
– s.sort([cmp[, key[, reverse]]])
– s.index(x) – s.sort([key[, reverse]]) # Py 3
– s.count(x) – s.reverse()
38
41. Sequence (cont.)
Slicing and Slice object:
– s = range(10) – s = 'I am a str.'
– t = s – s[:-3]
– t[0] = 'A'
– print s – s.reverse()
– t is s → TypeError
– s[::-1]
– t = s[:] – ''.join(reversed(s))
– t is s
– slice(None, None, -1)
41
42. Mapping
Dict. (mutable map.)
– len(d)
– {}
– d[k]
– {'A ': 1, 'B': 2, 'C': 3} – d[k] = v
– dict({...}) – del d[k]
– dict(A=1, B=2, C=3) – k in d, k not in d
– d.copy()
– d.get(key[, default])
– k = 'ABC' – d.setdefault(key[, default])
– v = [1, 2, 3] – d.items(), d.keys(), d.values()
– pairs = zip(k, v) – d.pop(key[, default)
– dict(pairs) – d.update([other])
...
42
43. Set
Set (mutable set)
– len(s)
– set() – x in s, x not in s
– {'A', 'B', 'C'} # Py3 – s.copy()
– s.add(elem)
– set('ABC') – s.discard(elem)
– set(['A','B','C']) – s.pop()
– s |= other
– s &= other
– s | other | ...
– s & other & ...
– s < | <= | == | > = | > other
...
43
45. The if Statement
if [condition 1]:
…
elif [condition 2]:
…
elif [condition 3]:
…
else:
…
[exp. if true] if [condition] else [exp. if false]
45
46. Truth Value Testing
They are same as False in a boolean context:
– None
– False
– Zeros (ex. 0, 0.0, 0L, 0j)
– Empty containers (ex. '', [], {})
– __nonzero__() or __len__() returns 0 or False
46
47. Truth Value Testing (cont.)
● if not None: ...
● if not []: ...
● if [0]: ...
● if [[]]: ...
● if "": ...
● if {}: ...
● if not {0: False}: …
…
47
48. The for Statement
for [item] in [iterable]: for i in [0, 1, 2]:
… print i
for i in range(3): for i in xrange(3):
print i print i
48
49. The for Statement in Python 3
for [item] in [iterable]: for i in [0, 1, 2]:
… print i
for i in range(3): for i in xrange(3):
print i print i
49
50. The for Statement (cont.)
for i in range(1, 3): for i in range(3, -1, -1):
print i print i
s = [1, 2, 3] s = [...]
t = 'xyz' for i, item in enumerate(s):
print i, item
for i, j in zip(s, t):
print i, j
50
51. The for Statement (cont.)
● It is like for … each in other language.
– Note: Python hasn't other for loop.
● It can iterate all of iterable object.
– In other words, the object which defined __iter__.
– ex. sequence, mapping, set, ...
51
52. Challenge 1: A Pyramid
● Use for loop to build a *
pyramid on right. ***
– without limit. *****
– limit: in two lines *******
● hint: string formatting
52
53. Challenge 2-1: Count the Chars
● Use for loop to count "Please count the
the sentence on right. characters here."
– without limit.
– limit: without if
● hint: use get
{'P': 1, ...}
53
54. Challenge 2-2: Collect the Chars
● Use for loop to collect "Here are UPPERCASE
the chars. and lowercase chars."
– limit: use setdefault
{'c': ['C', 'c',
'c'], ...}
54
55. The while Statement
tasks = [...]
while tasks: while 1:
… …
● It leaves the loop once ● A infinite loop.
the tasks is empty. ● It is better to use block
mechanism in a loop.
– ex. I/O block
55
56. The break, continue Statement
loop …: loop …:
if …: break if …: continue
● It terminates a loop. ● It continues with the
next iteration.
56
57. The break, continue Statement (cont.)
● They do the same thing in both C and Python.
● Using break or continue is encouraged.
– take the place of the complicated condition in a while.
– faster, because Python is interpreted.
● Just use them.
57
59. The else Clause on Loops
loop …:
…
else:
…
● No a clause on the if statement!
● If the loop isn't broken by any break statement, the
else block is executed.
● It replaces the flags we usually used.
59
60. Challenge 3-1: The Primes
● Try to filter the primes [2, 3, 5, 7, 11, 13,
from [2, 100). 17, 19, 23, 29, 31,
37, 41, 43, 47, 53,
– without limit. 59, 61, 67, 71, 73,
– limit: use loop's else 79, 83, 89, 97]
60
62. The try Statement in Python 3
try:
…
except LookupError as e:
…
except (IndexError, KeyError) as e:
…
else:
…
finally:
…
62
63. The try Statement (cont.)
● For avoiding to catch the exception we don't expect, you should:
– reduce your code in try block.
●
move them to else block.
– make the exception precise in except statement.
● Avoid using Exception.
● ref: docs.python.org/2/library/exceptions.html#exception-hierarchy
● Release the resource in finally block.
– or use context manager
– ex. file, socket, …
● raise SomeError
63
69. The def Statement (cont.)
def f(): pass
def g(): pass
d = {'x': f, 'y': g}
d['x']()
● Python functions are first-class functions.
– It means you can pass functions as arguments, and
assign functions to variables.
– It is like the function pointers in C.
69
70. An Example of Using while, try and def.
# file: ex_try.py $ python ex_try.py
def take_int(prompt='Give me a int: '):
Give me a int: str
while 1:
try:
It is not a int!
user_input = int(raw_input(prompt)) Give me a int: abc
except ValueError, e:
print 'It is not a int!' It is not a int!
else:
return user_input Give me a int: 100
if __name__ == '__main__':
I got a int from user:
x = take_int() 100
print 'I got a int from user: %d' % x
$
70
71. A Trap of the Default Value
# file: ex_defval_trap.py ● Because the list is
created when the
def f(items=[]): function is defined.
items.append(1)
return items
● Avoid to use the
mutable types as the
if __name__ == '__main__': default value.
print f() # -> [1]
print f() # -> [1, 1]
print f() # -> [1, 1, 1]
71
72. Challenge 4: A BMI Calculator
● BMI: Body Mass Index Enter your height (M):
– BMI = weight (KG) ÷ height (M)2 1.63
– < 18.5 → Underweight
Enter your weight (KG):
– [18.5, 25) → Normal weight
– [25, 30) → Overweight 49
– >= 30 → Obesity ---
● Write a BMI calculator.
Your BMI is:
– without limit.
– limit: only one if
18.44 (Underweight)
● hint: use loop Ideal weight is between:
49.15 ~ 66.42
72
74. The file Object
f = open('input.txt') f =
print f.read() open('output.txt',
'w')
f.seek(0)
f.write('a line.n')
for line in f:
f.close()
print line,
f.close()
74
75. The Context Manager
with open('input.txt') as f:
for line in f:
print line,
f.close()
● Python 2.5↑
– Python 2.5.x: from __future__ import with_statement
– Python 2.6↑: It is mandatory.
75
76. Challenge 2: Count the Chars (cont.)
– limit 3: with the files The path of input:
input.txt
The path of output:
output.txt
---
The result was
written.
76
77. The csv Moudle
#!/usr/bin/env python 1, apple
# -*- coding: utf-8 -*- 2, orange
# file: ex_csv.py
3, watermelon
import csv
['1', ' apple']
with open('ex_csv.csv') as f:
['2', ' orange']
for row in csv.reader(f):
print row ['3', ' watermelon']
77
78. The os.path Moudle
# file: ex_os_path.py $ python ex_os_path.py
from os import walk
from os.path import join
It requires a path as
def list_files(path):
paths = []
argument.
for root, dir_names, file_names in walk(path):
for file_name in file_names:
paths.append(join(root, file_name))
$ python ex_os_path.py .
return paths
…/1
if __name__ == '__main__':
import sys
…/b/4
from os.path import abspath, dirname
if len(sys.argv) == 2:
…/a/2
path = abspath(dirname(sys.argv[1]))
for path in list_files(path): …/a/3
print path
else:
print 'It requires a path as argument.'
78
80. The help Function
● In Python shell: ● In terminal:
– help(open) – $ pydoc SimpleHTTPServer
– dir(open) – $ pydoc csv
– $ pydoc os.path
– 'n'.join(dir(open))
80
81. Your Documentation
$ pydoc ex_doc
# file: ex_doc.py Help on module ex_doc:
'''module-level doc.''' NAME
ex_doc - module-level doc.
def f(x): FILE
'''A short sentence describes
this function. /home/mosky/programming-with-python/ex_doc.py
FUNCTIONS
About the parameters, return f(x)
value or any other detail ... A short sentence describes this
''' function.
pass
About the parameters, return value or
any other detail ...
81
83. Scope
# file: ex_scope.py $ python ex_scope.py
global
x = 'global'
local
def f():
$
if 1:
x = 'local'
return x
● Scopes are decided by
functions.
if __name__ == '__main__':
print x
print f()
83
84. The LEGB Rule
# file: ex_LEGB.py ● return …
global_var = 100 – Local (in function)
def f():
enclosed_var = 10
– Enclosed
def g():
– Global
local_var = 1
return sum([local_var, enclosed_var,
– Built-in
global_var])
return g()
if __name__ == '__main__':
print f() # -> 111
84
86. Challenge 5: Mix All
● You have many $ python mix.py pyramid 10
functions now. …
$ python mix.py primes 100
Try to write a CLI
…
program to trigger your
$ python mix.py bmi 1.63 49
functions.
…
– without limit
$ python mix.py blah blah
– limit: without if. Please check your args.
86