lecture 1: elements of python - uni-bonn.delaotzu.bit.uni-bonn.de/ipec_slides/lecture1.pdfpython...
TRANSCRIPT
Programming with Python
IPEC Winter School 2015B-IT
Dr. Tiansi Dong & Dr. Joachim Köhler
Lecture 1: Elements of Python
Python Types
● Numbers 1234,3.1324, 1+8j, 1e3
● Strings 'spam', “hello world”, b'a\x01c'
● Lists [1,[2,3],[3,'three']]
● Dictionaries {'name': 'Bush','firstname':'Geoge W.'}
● Tuples (1, 'X')
● Files mfile = open('script0.py', 'r')
● Sets x = set('abc'), x={'a', 'b', 'c'}
● Other core types Booleans, types, None
● Program unit types Functions, modules, classes
● Implementation-related types Compiled code,stack traceback
Python Types: Strings 1
● Python strings are read-only sequences of chars.
>>>S = 'hello world!'
>>>len(S)
12
>>>S[11]
'!'
>>>S[-1]
'!'
>>>S[1:111]
'ello world!'
>>>S[:-1]
'hello world'
>>>S[-1:2]
''
>>>S.find('h')
0
>>>S.replace('o', 'OO')
hellOO wOOrld!
Python Types: Strings 1
● Python strings are read-only sequences of chars.
>>>S
hello world!
>>>S[0]='H'
Traceback (most recentcall last):
File "<pyshell#6>",line 1, in <module>
S[0]='H'
TypeError: 'str' objectdoes not support itemassignment
>>>S = 'H' + S[1:]
'Hello world!'
>>>dir(S)
Python Types: Strings 3
>>>S.split('o')
['Hell', 'w', 'rld!']
>>>S.upper()
HELLO WORLD!
>>>'hello %s %s' % ('world', '!')
hello world !
>>>'hello {0}{1}'.format('world','!')
hello world!
Python Types: Strings 2
● String structure in Python
h e l l o w o r l d ! \n
0 1 2 3 4 -2 -1
[: :]
Python Types: Strings 3
>>>help(S.replace)
help on built-in function replace:
replace(...)
S.replace(old, new[, count]) -> str
Return a copy of S with all occurrences ofsubstring old replaced by new. If the optionalargument count is given, only the first countoccurrences are replaced.
Python Types: Strings 5
● String format
%[(name)][flags][width][.precision]typecode
+|- s|d|f|...
% - 5 d
>>>'%-5d'%12
'12 '
>>>'%5d'%12
' 12'
>>>reply = “Hello %(name)s! Your bonus is %(bonus)s”
>>>value = {'name':'Bob', 'bonus':1000}
>>>replay % value
'Hello Bob! Your bonus is 1000'
Python Types: Strings 6
● String formatting method call
>>>template = '{0}, {1}, {2}'
>>>template.format('hello','world','!')
'hello, world, !'
>>>template = 'hello {name}, your bonus is {bonus}'
>>>template.format(name='Bob', bonus=1000)
'hello Bob, your bonus is 1000'
>>>import sys
>>>'My {1[pc]} runs {0.platform}'.format(sys, {'pc':'MAC'})
'My MAC runs darwin'
Python Types: Strings 7
● String formatting method call
>>>'My {config[pc]} runs {sys.platform}'.format(sys=sys,config={'pc':'MAC'})
'My MAC runs darwin'
>>>'Hello {0:<8}, your bonus is {1:-=10}'.format('Bob',1000)
'Hello Bob , your bonus is ------1000'
>>> 'Hello {0:^8}, your bonus is {1:-^10}'.format('Bob',1000)
'Hello Bob , your bonus is ---1000---'
>>> 'Hello {0:>8}, your bonus is {1:->10}'.format('Bob',1000)
'Hello Bob, your bonus is ------1000'
Python Types: List 1
List is an important data structure in AI. It is readable, writable, and canbe nested with any object
● List is recursively defined
>>> Lst = []
>>> Lst = [1,2,3,'a','b','c']
>>> Lst[:-1]
[1,2,3,'a','b']
>>> Lst + ['hello']
>>> Lst.append('world')
>>>Lst
[1,2,3,'a','b','c','world']
Python Types: List 2
>>>Lst.reverse()
['world', 'c', 'b', 'a', 3, 1]
>>>Lst.sort()
Traceback (most recent call last):
File "<pyshell#43>", line 1, in <module>
Lst.sort()
TypeError: unorderable types: str() < int()
>>>L = ['c','b','a']
>>> L.sort()
>>> L
['a', 'b', 'c']
Python Types: List 3
● Nested list representing Matrixes or multidimensional arrays
>>>M = [[1,2,3],[4,5,6],[7,8,9]]
>>>M[1]
[4,5,6]
>>>M[1][2]
6
● List Comprehension is an easy way to construct new lists
Syntax: '[ f(x) for x in <list>]'
>>>[c*2 for c in 'hello']
['hh', 'ee', 'll', 'll', 'oo']
>>>[row[1] for row in M]
[2,5,8]
Python Types: Tuple 1
● Tuples are read-only lists
>>>Tpl = (1,2,3,4)
>>>len(Tpl)
4
>>>Tpl[0]
1
>>>Tpl.index(4)
3
>>>Tpl0 = (1,2,3, [11,22])
>>>Tpl0[3][1]
22
Python Types: Tuple 2
● Tuples are read-only lists
>>>Tpl0.append(4)
Traceback (most recent call last):
File "<pyshell#87>", line 1, in <module>
Tpl0.append(4)
AttributeError: 'tuple' object has no attribute'append'
Python Types: Set 1
● A mathematical set is an unordered collection with unique elements
● A Python set is an unordered collection with unique and hashable elements, to simulate mathematical set operations
● What does hash mean in computer science?
– A mapping from something into numbers
Python Types: Set 2
● Why Python sets only allow hashable elements?
– Set operations are expensive
– In Python, sets are mapped (hashed) to sets of numbers, so thatoperations on sets are achieved much faster.
– The pre-condition is that original sets are read-only.
Python Types: Set 3
● Set operations in Python 2.6
>>>S0 = set('abc')
>>>S0
{'a', 'c', 'b'}
>>>S1 = set('abxyz')
>>>S1
{'a', 'b', 'y', 'x', 'z'}
>>>'a' in S0
True
>>>S0 – S1
{'c'}
Python Types: Set 4
● Set operations in Python 2.6
>>>S2 = set('abcd')
>>>S0 < S2
True
>>>S0.intersection(S1)
{'a', 'b'}
>>>S0.union(S1)
{'a', 'c', 'b', 'y', 'x','z'}
>>> S0.remove('a')
Python Types: Set 5
● Set operations in Python 2.6
>>> S0
{'c', 'b'}
>>> S0.remove('x')
Traceback (most recent call last):
File "<pyshell#11>", line 1, in <module>
S0.remove('x')
KeyError: 'x'
Python Types: Set 6
● Set operations in Python 3.0
>>>{1,2,3} & {1,2}
{1,2}
>>>{1,2,3} | {3,4}
{1,2,3,4}
>>>{1} – {1}
set()
● Set comprehension
>>>{x **2 for x in [1,2,3]}
{1,9,4}
>>>{x **2 for x in {1,2,3}}
{1,9,4}
Python Types: Dictionaries 1
● The Python Dictionary can be understood as an extension of the Pythonset, such that each set element is mapped into an object
>>>Dic1 = {'name':'Bob', 'job':'no', 'age':10}
>>>Dic2 = {'name':{'first':'Marie','last':'Curie'}, 'affiliation':'Sorbonne'}
>>>Dic1['name']
'Bob'
>>> list(Dic1.keys())
['age', 'job', 'name']
>>> Ks = list(Dic1.keys())
Python Types: Dictionaries 2
>>> for key in Ks:
print(key, '=>', Dic1[key])
age => 10
job => no
name => Bob
Python Types: Dictionaries 3
>>>Dic1.['address']
Traceback (most recent call last):
File "<pyshell#25>", line 1, in <module>
Dic1['address']
KeyError: 'address'
>>>Dic1.get['address', 0]
0
>>>Dic1['address'] if 'address' in D else 0
0
>>>dir(Dic1)
Python Types: Numbers 1
● Try first:
>>> 123+222
345
>>> 2 ** 3 #2 to the power 3
8
>>> len(str(2 ** 5)) #how many digits
2
>>>import math
>>>math.pi
3.141592653589793
Python Types: Numbers 2
● Try first:
>>>import random
>>>random.random()
0.9311179915010321
>>>dir(random)
Python Types: Numbers 3
● Why do we introduce Python numeric types now, after we introduced strings,lists, tuples, sets, dictionaries?
● Python numeric Types
– Integers 1,2,3
– Floating-point numbers 1.0, 3.1415, 1.414, 4.0e+12
– Complex numbers 3+4j, 3.1+4.2j
– Fixed-precision decimal numbers decimal.Decimal('0.1')
– Rational fraction numbers fractions.Fraction(1,3)
– Sets {1,2,3}, {'a', 'b', 3}
– {} is not the empty set
Python Types: Numbers 4
● Python numeric Types
– Booleans True, False True + 1, False -1
– A variety of numeric built-ins and modules,
● Pow, abs, round, int, hex, bin, ...
● math, NumPy, SciPy, random, ...
Python Types: Numbers 5
● Python expressions
– X if Y else Z
– X or Y
– X and Y
– not X
– X in Y, X not in Y
– X is Y, X is not Y
– X < Y, X <= Y, X == Y, X > Y, X >= Y, X != Y
– X | Y, X ^ Y, X & Y
– X << Y, X >> Y
– X + Y, X – Y, X * Y, X % Y, X / Y, X // Y
– int(3.1415), int('123'), float(3), str(1234)
Python Types: Numbers 6
● Numeric accuracy
>>>0.1+0.1+0.1-0.3
5.551115123125783e-17
>>>from fractions import Fraction
>>>Fraction(1,10)+Fraction(1,10)+Fraction(1,10)-Fraction(3,10)
Fraction(0,1)
>>>(3.1415).as_integer_ratio()
(7074029114692207, 2251799813685248)
>>>from fractions import Fraction
>>> Fraction.from_float(1.75)
Fraction(7, 4)
Python Types: Numbers 7
● Numeric accuracy
>>> Fraction.from_float(5.4)
Fraction(3039929748475085, 562949953421312)
>>> Fraction.from_float(5.4).limit_denominator(10)
Fraction(27, 5)
>>> 5.4 + Fraction(7.4)
12.8
Python Types: Files 1
● Files are a core type of Python, is created using the built-in open function:
>>>mfile = open('first_file.txt', 'w')
● The second parameter of is the processing mode, whose values can be'r', 'w', 'a'(open and append text to the end of the file), 'b'(binary), 't'(text),'+'(read and write), 'U'(universal newline mode )
● The default mode is 'rt' (open for text reading).
● For binary random access, the mode 'w+b' opens and truncates the fileto 0 bytes. 'r+b' opens the file without truncation.
● Basic file operations
>>>mfile.write('hello\n')
6
>>>txt = mfile.read()
Python Types: Files 2
>>>str = mfile.read() #read whole file into a string
>>>str = mfile.read(N) #read maximum N chars
>>>str = mfile.readline() #read next line
>>>lst = mfile.readlines() #read whole file into a #list of line strings
>>>mfile.writelines(aList) #write all line strings in #a list into the file
>>>mfile.flush() #flush output buffer
>>>mfile.close()
>>>open('file0.txt', encoding='latin-1') #python 3.0
Python Types: Files 3
● Python's standard library pickle is an tool that allows as to storealmost any Python object into files directly.
>>>Dic = {'a': 123, 'b'=3.1415}>
>>>dFile=open('Dic.pk', 'wb')
>>>import pickle
>>>pickle.dump(Dic,dFile)
>>>dFile.close()
>>>dic_file=open('Dic.pk', 'rb')
>>>mDic=pickle.load(dic_file)
>>>mDic
{'a': 123, 'b'=3.1415}
>>>dic_file.close()
Python Dynamic Typing 1
● No declaration statements in Python
>>>a = 3
>>>a = 'hello world!'
● Garbage-collection is performed automatically
a 3
a hello world!
3
Python Dynamic Typing 2
● Shared references in Python
>>>a = 3
>>>b = a
● Variables are pointers to values; assignment variable a to variable b adds a new pointer b to the value pointed by a.
● Assignment introduces references, not copy
a 3
b
Python Dynamic Typing 3
● Object copy in Python
>>>L1 = [2,3,4]
>>>L3 = L1
>>>L2 = L1[:]
>>>L1[0]= 234
>>>L1
[234,3,4]
>>>L2
[2,3,4]
>>>import copy
>>>L4 = copy.copy(L1)
● == vs. is
>>> L1 == L3
True
>>> L1 is L2
False
>>> L1 is L4
False
● >>> L1 == L3
True
>>> L1 is L3
True
Python Dynamic Typing 4
● Small integers and strings arecached and reused
>>>X = 12
>>>Y = 12
>>>X is Y
True
● To get the object's referencenumber
>>>import sys
>>>sys.getrefcount(L3)
3
>>>sys.getrefcount(1)927