# python course
## Mark@ucom
### (https://bit.ly/2QgWXW3)
### python
### quit
### pip list
### pip install numpy
### for 4G 32-bit
```
-Xms512m
-Xmx1024m
```
### pip install jupyter
#### demo2
```
import numpy
l1 = [1, 2, 3]
l2 = [4, 5, 6]
print(type(l1), type(l2))
print(l1 + l2)
a1 = numpy.array(l1)
a2 = numpy.array(l2)
print(type(a1), type(a2))
print(a1 + a2)
```
### demo3
```
mkdir notebook
cd notebook
jupyter-notebook
```
```
jupyter-notebook --generate-config
```
```
c = get_config()
c.NotebookApp.notebook_dir="C:\\Users\\Admin\\notebook"
import webbrowser
webbrowser.register('chrome',None,
webbrowser.GenericBrowser('C:\\Program Files (x86)\\Google\\Chrome\\Application\\chrome.exe'))
c.NotebookApp.browser='chrome'
```
### demo6
```
def fib(n):
a, b = 0, 1
while a < n:
print(a, end=' ')
a, b = b, a + b
print()
fib(1000)
```
### About path
```
import sys
print(sys.path)
```
```
>>> import numpy
>>> numpy.__name__
'numpy'
>>> import sys
>>> sys.path
```
```
python demo7.py
```
```
import os
import sys
print(sys.executable)
print(sys.argv)
print(os.getcwd())
```
```
python demo8.py -a -b c=d efg
```
* [https://chromedriver.storage.googleapis.com/index.html?path=78.0.3904.70/](https://chromedriver.storage.googleapis.com/index.html?path=78.0.3904.70/)
```
from selenium.webdriver import Chrome
browser = Chrome()
browser.get("http://www.python.org")
```
```
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
browser = Chrome()
browser.get("http://www.python.org")
element1 = browser.find_element_by_name('q')
element1.clear()
element1.send_keys("tensorflow")
element1.send_keys(Keys.RETURN)
time.sleep(10)
browser.close()
```
```
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
browser = Chrome()
browser.get("https://shopping.pchome.com.tw/")
element1 = browser.find_element_by_id('keyword')
element1.clear()
element1.send_keys("洗衣粉")
element1.send_keys(Keys.RETURN)
time.sleep(10)
browser.close()
```
```
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
browser = Chrome()
browser.get("http://www.python.org")
element1 = browser.find_element_by_name('q')
element1.clear()
element1.send_keys("tensorflow")
element1.send_keys(Keys.RETURN)
result = browser.find_elements_by_css_selector(".list-recent-events.menu")
allItems = result[0].find_elements_by_tag_name("li")
for r in allItems:
content = r.find_elements_by_tag_name("a")
print(content[0].text)
#time.sleep(10)
browser.close()
```
```
# Python course
## Last modified:15-Nov-2019
### Install
* Python
* pycharm
* jupyter
```
```
from selenium.webdriver import Chrome
from selenium.webdriver.common.keys import Keys
import time
browser = Chrome()
browser.get("http://www.python.org")
element1 = browser.find_element_by_name('q')
element1.clear()
element1.send_keys("tensorflow")
element1.send_keys(Keys.RETURN)
result = browser. \
find_element_by_css_selector(".list-recent-events.menu")
allItems = result.find_elements_by_tag_name("li")
for r in allItems:
content = r.find_elements_by_tag_name("a")
print(content[0].text)
# time.sleep(10)
browser.close()
```
```
v1 = 0
v2 = 100
v3 = -3000
print(type(v1), type(v2), type(v3))
print(v1+100, v1-100, v1*100, v1/100)
print(2**3, 3**2)
print(2**512)
v4 = 37
print(f"v4 = {v4}, as binary:{v4:b}")
print(f"v4 as Oct = {v4:o}, as hex={v4:x}")
b5 = 0b100
b6 = 0o100
b7 = 0x100
b8 = 100
print(b5, b6, b7, b8)
```
```
from decimal import Decimal
a1 = Decimal(1.5)
print(a1)
a2 = Decimal(1.4)
print(a2)
a3 = Decimal(2.968)
print(a3)
a4 = Decimal('2.968')
print(a4)
a5 = Decimal(2968) * Decimal(0.001) - Decimal(2.968)
print(a5)
a6 = Decimal(2968) * Decimal('0.001') - Decimal('2.968')
print(a6)
from decimal import ROUND_HALF_UP
a7 = Decimal(2.5)
result7 = Decimal(a7.quantize(Decimal(1),
rounding=ROUND_HALF_UP))
print(a7, result7)
a8 = Decimal(3.5)
result8 = Decimal(a8.quantize(Decimal(1),
rounding=ROUND_HALF_UP))
print(a8, result8)
```
```
from decimal import Decimal
a1 = Decimal(1.5)
print(a1)
a2 = Decimal(1.4)
print(a2)
a3 = Decimal(2.968)
print(a3)
a4 = Decimal('2.968')
print(a4)
a5 = Decimal(2968) * Decimal(0.001) - Decimal(2.968)
print(a5)
a6 = Decimal(2968) * Decimal('0.001') - Decimal('2.968')
print(a6)
from decimal import ROUND_HALF_UP, ROUND_HALF_DOWN, ROUND_HALF_EVEN
digits = [1.5, 2.5, 3.5, 4.5]
rounds = [ROUND_HALF_DOWN, ROUND_HALF_EVEN, ROUND_HALF_UP]
for d in digits:
for r in rounds:
result = Decimal(Decimal(d).quantize(Decimal(1),
rounding=r))
print(f"{d} using {r} ==> {result}")
```
```
a1 = '500'
a2 = '3.14'
a3 = '8-7j'
a4 = 'True'
a5 = 'False'
r1 = int(a1)
print(r1, type(r1))
r2 = float(a2)
print(r2, type(r2))
r3 = float(a1)
print(r3, type(r3))
r4 = complex(a1)
print(r4, type(r4))
r5 = complex(a3)
print(r5, type(r5))
r6 = bool(a4)
r7 = bool(a5)
print(r6, r7, type(r6), type(r7))
```
```
l1 = []
l2 = ['a', 'b']
l3 = list('abc')
l4 = [1, 2, 3, 4]
l5 = [1, 2, 3, 'd', 'e']
l6 = list()
l7 = ['a', 'b', 'c']
lists = [l1, l2, l3, l4, l5, l6]
for l in lists:
print(type(l), len(l), l)
print(l3 == l7, l3 != l7)
print(l3 == l2, l3 != l2)
print(l3[0] == l2[0]), print(l3[1] != l2[1])
#print(l1[1]) # OOR Error
print(l5[1.0])
t
```
```
list1 = list('ABCDEFG1234567abcdefg')
print(list1[0], list1[len(list1) - 1])
print(list1[-1], list1[-len(list1)])
print(list1[2:6], list1[-5:-2])
print(list1[:5], list1[5:])
print(list1[:-5], list1[-5:])
print(list1[:5], list1[-1:-6:-1])
```
```
list1 = [5, 6, 7]
total = 0
for number in list1:
total += number
print('total=%d' % total)
list2 = ['apple', 'banana', 'orange','watermelon']
s1 = "today, we have:"
for fruit in list2:
s1 += "%s," % (fruit)
print(s1)
fruit_length=[]
for f in list2:
fruit_length.append(len(f))
print(fruit_length)
fruit_length2 = [len(f) for f in list2]
print(fruit_length2)
# part2
```
```
list1 = [5, 6, 7]
total = 0
for number in list1:
total += number
print('total=%d' % total)
list2 = ['apple', 'banana', 'orange', 'watermelon']
s1 = "today, we have:"
for fruit in list2:
s1 += "%s," % (fruit)
print(s1)
fruit_length = []
for f in list2:
fruit_length.append(len(f))
print(fruit_length)
fruit_length2 = [len(f) for f in list2]
print(fruit_length2)
# part2
print('apple' in list2, 'kiwi' in list2)
print('apple' not in list2, 'kiwi' not in list2)
a1, a2, a3, a4 = list2
print(a1, a3, a4, a2)
list2.append('passion fruit')
print(list2)
```
```
l1 = ['red', 'blue']
l2 = ['red', 'blue']
l3 = ['red', 'blue']
# l1.append('brown')
# l2.extend('brown')
# l3 += 'brown'
l1.append(['brown'])
l2.extend(['brown'])
l3 += ['brown']
print(l1)
print(l2)
print(l3)
```
```
a1 = True
a2 = False
b1 = True
b2 = False
b3 = None
b4 = 3.14
b5 = 'hello world'
print(a1 and b1, a1 and b2, a1 and b3, a1 and b4, a1 and b5)
print(a2 and b1, a2 and b2, a2 and b3, a2 and b4, a2 and b5)
print(a1 or b1, a1 or b2, a1 or b3, a1 or b4, a1 or b5)
print(a2 or b1, a2 or b2, a2 or b3, a2 or b4, a2 or b5)
```
```
l1 = list('ABCXZ')
print(l1.index('C'), l1.index('Z'))
#print(l1.index('Q'))
print(l1.count('Q'), l1.count('C'), l1.count('Z'))
l2 = list('ASDFGHJKL')
for l in l2:
print(l in l1 and l1.index(l), end=', ')
```
```
fruits = [('banana', 60, 30), ('apple', 80, 40), ('kiwi', 50, 99),
('melon', 200, 10), ('orange', 30, 20)]
fruits.sort()
print(fruits)
fruits.sort(key=lambda row: row[0])
print(fruits)
fruits.sort(key=lambda r: r[1])
print(fruits)
fruits.sort(key=lambda r: r[2])
print(fruits)
```
```
fruits = [('banana', 60, 30), ('apple', 80, 40),
('kiwi', 50, 99),
('melon', 200, 10), ('orange', 30, 20)]
def sortByThirdColumn(x):
return x[2]
fruits.sort()
print(fruits)
fruits.sort(key=lambda row: row[0])
print(fruits)
fruits.sort(key=lambda r: r[1])
print(fruits)
fruits.sort(key=sortByThirdColumn)
print(fruits)
```
```
x1 = 'apple'
x2 = 'banana'
x1, x2 = x2, x1
print(x1, x2)
x3 = 3.14
x4 = None
x3, x4 = x4, x3
print(x3, x4)
v1 = ['a', 'b', 'c']
t1 = ('a', 'b', 'c')
v1.append('d')
print(v1)
# t1.append('d')
t2 = tuple(v1)
v2 = list(t1)
v2.append('d')
print(type(t2), type(v2), v2)
```
```
animals = ['alpaca', 'baboon']
def addAnimal(x):
x.append('zebra')
print(hex(id(animals)), animals)
addAnimal(animals)
print(hex(id(animals)), animals)
animals2 = ('alpaca', 'baboon')
def addAnimal2(x):
x += ('zebra',)
print('inside, x={}'.format(x))
print(hex(id(animals2)), animals2)
addAnimal2(animals2)
print(hex(id(animals2)), animals2)
```
```
animals = ['alpaca', 'baboon']
def addAnimal(x):
x.append('zebra')
print(hex(id(animals)), animals)
addAnimal(animals)
print(hex(id(animals)), animals)
animals2 = ('alpaca', 'baboon')
y = 3.14
z = 500
def addAnimal2(x):
x += ('zebra',)
print('inside, x={},{},{}'.format(x, y, z))
print(f'inside, x={x},{y},{z}')
print('inside, x=%s,%f,%d' % (x, y, z))
print(hex(id(animals2)), animals2)
addAnimal2(animals2)
print(hex(id(animals2)), animals2)
```
```
import copy
l1 = list('ABCDE')
l2 = l1
l3 = l1[:]
l4 = list(l1)
print(l1, l2, l3, l4)
l5 = copy.copy(l1)
l6 = copy.deepcopy(l1)
print(l5, l6)
print(hex(id(l1)))
print(hex(id(l5)))
print(hex(id(l6)))
l1[0] = 'a'
l2[1] = 'b'
print(l1, l2, l3)
print(l4, l5, l6)
import numpy
a1 = numpy.array([1, 2, 3, 4, 5])
a2 = a1
a3 = a1.copy()
print(a1, a2, a3)
a1*=2
print(a1, a2, a3)
print(hex(id(a1)))
print(hex(id(a2)))
print(hex(id(a3)))
```
```
import copy
player1 = [['A', 'K'], ['Q', 'J']]
player2 = player1
player3 = copy.copy(player1)
player4 = copy.deepcopy(player1)
print(f"p1:{player1},p2:{player2}")
print(f"p3:{player3},p4:{player4}")
player1.append('JOKER')
print(f"[II]p1:{player1},p2:{player2}")
print(f"[II]p3:{player3},p4:{player4}")
player1[0][0]='10'
print(f"[III]p1:{player1},p2:{player2}")
print(f"[III]p3:{player3},p4:{player4}")
player4[1][1]='8'
print(f"[IV]p1:{player1},p2:{player2}")
print(f"[IV]p3:{player3},p4:{player4}")
```
```
course1 = {'name': 'python', 'instructor': 'mark'}
course2 = {'instructor': 'mark', 'name': 'python'}
print(course1 == course2)
print(course2)
print(course1['name'])
print(course2['instructor'])
course1['duration'] = 20
print(course1)
course3 = dict(name='python', instructor='mark')
print(type(course3), course3)
course4 = dict([('name', 'python'), ('instructor', 'mark')])
print(course4)
```
```
course1 = {'id': 'POOP', 'duration': 30, 'point': 5.5,
'schedule': ['Saturday', 'Sunday'], 'date': '1-Dec-2019',
'instructor': '何孟翰'}
print('language' in course1, '何孟翰' in course1, 'id' in course1)
for k in course1:
print(f'key={k},value={course1[k]}')
print([f'key={k},value={course1[k]}' for k in course1.keys()])
```
```
v1 = ()
print(type(v1))
v2 = []
print(type(v2))
v3 = {}
print(type(v3))
course1 = {'id': 'POOP', 'duration': 30, 'point': 5.5,
'schedule': ['Saturday', 'Sunday'], 'date': '1-Dec-2019',
'instructor': '何孟翰'}
print('language' in course1, '何孟翰' in course1, 'id' in course1)
for k in course1:
print(f'key={k},value={course1[k]}')
print([f'key={k},value={course1[k]}' for k in course1.keys()])
for v in course1.values():
print(v)
for i in course1.items():
print(type(i), i)
for i, j in course1.items():
print(f"key={i},value={j}")
# print(course1['price'])
print(course1.get('price'))
```
```
sales = ['S', 'M', 'L', 'S', 'L', 'M', 'L', 'S', 'L', 'S', 'L', 'M', 'L']
statistics = {}
for r in sales:
statistics.setdefault(r, 0)
statistics[r] += 1
print(statistics)
sales2 = [('S', 20), ('M', 30),
('L', 15), ('S', 20),
('L', 8), ('M', 13),
('L', 14), ('S', 9),
('L', 15), ('S', 4),
('L', 3), ('M', 8), ('L', 12)]
statistics2 = {}
for r, q in sales2:
statistics2.setdefault(r, 0)
statistics2[r] += q
print(statistics2)
```
```
class Course:
def __init__(self, name, duration):
self.name = name
self.duration = duration
def __str__(self):
return f'[{self.name}]{self.duration}'
def __repr__(self):
return f'[{self.name}]{self.duration}'
c1 = Course('POOP', 35)
c2 = c1
c3 = Course('POOP', 35)
c4 = Course('BDPY', 35)
s1 = {c1}
print(type(s1), s1)
s1.add(c2)
print(s1)
s1.add(c3)
print(s1)
s1.add(c4)
print(s1)
```
```
class Course:
def __init__(self, name, duration):
self.name = name
self.duration = duration
def __eq__(self, other):
return self.name == other.name and \
self.duration == other.duration
def __hash__(self):
return hash((self.name, self.duration))
def __str__(self):
return f'[{self.name}]{self.duration}'
def __repr__(self):
return f'[{self.name}]{self.duration}'
c1 = Course('POOP', 35)
c2 = c1
c3 = Course('POOP', 35)
c4 = Course('BDPY', 35)
s1 = {c1}
print(type(s1), s1, hex(hash(c1)))
print(hex(hash(c2)), hex(hash(c3)), hex(hash(c4)))
s1.add(c2)
print(s1)
s1.add(c3)
print(s1)
s1.add(c4)
print(s1)
```
```
def judge(inputScore):
return 'good' if inputScore >= 80 else 'bad'
scores = [70, 80, 90]
for s in scores:
print(judge(s))
def judege2(inputScore):
# (negative, positive)
return ('bad', 'good')[inputScore >= 80]
for s in scores:
print(judege2(s))
def judge3(inputScore):
if inputScore >= 80:
return 'good'
else:
return 'bad'
for s in scores:
print(judge3(s))
def judge4(x):
if x >= 90:
return 'A'
elif x>=80:
return 'B'
elif x>=70:
return 'C'
elif x>=60:
return 'D'
else:
return 'fail'
for s in scores:
print(judge4(s))
```
```
l1 = [3, 1, 4, 5, 9, 24, 15, 30]
sum = 0
for l in l1:
sum += l
print("sum={}".format(sum))
numbers = [6, -5, 3, -8, 4, -2, 5, -4, 11]
for n in numbers:
if n < 0:
numbers.remove(n)
print(numbers)
numbers2 = [6, -5, 3, -8, 4, -2, 5, -4, 11]
for n in numbers2[:]:
if n < 0:
numbers2.insert(0, n)
print(numbers2)
```
```
a1 = range(10)
print(a1, type(a1), len(a1), list(a1))
print([x for x in a1])
a2 = range(5, 10)
print([x for x in a2])
a3 = range(50, 100, 2)
print([x for x in a3])
for i in range(10):
print('*', end="")
print()
for _ in range(10):
print('*', end='')
print()
import math
a4 = range(0, int(math.pi))
print([x for x in a4])
import numpy
a5 = numpy.arange(10)
print([x for x in a5])
a6 = numpy.arange(0, 1, 0.1)
print([x for x in a6])
a7 = numpy.arange(0, numpy.pi, 0.1)
print([x for x in a7])
a8 = numpy.linspace(0, numpy.pi)
print(len(a8), a8)
```
```
import sys
text = ''
while 1:
c = sys.stdin.read(1)
text = text + c
if c == '\n':
break
pass
pass
print(f'text={text}')
```
```
data1 = [[1, 2, 3, -4, 5],
[6, 7, 9, 0, 10],
[1, 3, 5, 7, 9],
[2, 4, -6, 8, 10]]
for r in data1:
sum = 0
for c in r:
if c < 0:
print('got an outlier:%d' % c)
continue
#break
#else:
sum += c
else:
print('summation=%d' % sum)
```
```
file1 = open('data\\testfile1','w')
print("this line may exception")
file1.write('write something')
print("file will be closed")
file1.close()
```
```
try:
file1 = open('data2\\testfile1','w')
print("this line may exception")
file1.write('write something')
except FileNotFoundError:
print("something wrong")
else:
print("file will be closed")
file1.close()
print("do something else")
```
```
def divide(x, y):
try:
result = x / y
# except FileNotFoundError:
except ZeroDivisionError:
print("divide by zero")
else:
print(f"result={result}")
finally:
print("calculate finished")
divide(5, 3)
divide(0, 8)
divide(8, 0)
divide(0, 0)
divide('3', '2')
```
```
def myException(level):
if level < 1:
raise Exception('reason', 'detail')
try:
myException(4)
except Exception as e:
print(f'exception as {e}')
else:
print('normal execution')
```
```
class MyError(Exception):
def __init__(self, value):
self.value = value
def __str__(self):
return repr(self.value)
try:
raise MyError(2 * 2)
except MyError as error:
print('my error as value=%d' % error.value)
```
```
def something():
"""
Demo function for help purpose
:return:
"""
return 'awesome'
print(something())
print(help(something))
```
```
def outer(num1):
def inner_increment(x):
return x + 1
num2 = inner_increment(num1)
print(num1, num2)
#inner_increment(40)
outer(50)
```
```
def factorial(number):
if not isinstance(number, int):
raise TypeError("Sorry, number should be int")
if not number >= 0:
raise ValueError("sorry, number should positive")
def inner_factorial(number):
if number <= 1:
return 1
return number * inner_factorial(number - 1)
return inner_factorial(number)
print(factorial(8))
```
```
x = 'global'
def foo():
print(f'[foo]x={x}')
foo()
y = 'global2'
def bar():
y = 'local2'
print(f'[bar]y={y}')
bar()
z = 5
def calculate():
global z
#z = 3
print('[calculate1]z=%d' % z)
z *= 2
print('[calculate2]z=%d' % z)
calculate()
print('outside, z=%d'%z)
```
```
x = 'global'
def foo():
print(f'[foo]x={x}')
foo()
y = 'global2'
def bar():
y = 'local2'
print(f'[bar]y={y}')
bar()
z = 5
def calculate():
global z
# z = 3
print('1[calculate]z=%d' % z)
z *= 2
print('2[calculate]z=%d' % z)
calculate()
print('outside, z=%d' % z)
p = [5]
def calculate2():
print('1[calculate2]p=%d' % p[0])
p[0] *= 2
print('2[calculate2]p=%d' % p[0])
print('outside, p=%d' % p[0])
calculate2()
print('outside, p=%d' % p[0])
class DemoObject:
def __init__(self, value):
self.value = value
q1 = DemoObject(5)
def calculate3(obj):
print('1[calculate3]q=%d' % obj.value)
obj.value *= 2
print('2[calculate3]q=%d' % obj.value)
print('q1.value=%d'%q1.value)
calculate3(q1)
print('q1.value=%d'%q1.value)
```
```
def foo():
y = "local"
print('inside y=%s' % y)
foo()
# print(y)
x = 5
def bar():
x = 10
print("local x=%d" % x)
bar()
print("x=%d" % x)
```
```
def foo():
y = "local"
print('inside y=%s' % y)
foo()
# print(y)
x = 5
def bar():
x = 10
print("local x=%d" % x)
bar()
print("x=%d" % x)
def outer():
x2 = "local"
def inner():
nonlocal x2
x2 = "non local"
print(f"inner:{x2}")
print(f"outer1:{x2}")
inner()
print(f"outer2:{x2}")
outer()
```
```
import math
def square_root(x):
return math.sqrt(x)
print(square_root(5))
def square_root2(x): return math.sqrt(x)
print(square_root2(3))
l1 = lambda x: math.sqrt(x)
print(type(l1), l1(5))
```
```
def make_increment(n):
return lambda x: x + n
print(type(make_increment))
print(type(make_increment(5)))
f = make_increment(10)
print(f(10), f(20))
def make_increment_detail(n):
def becomeLamda(x):
return x + n
return becomeLamda
g = make_increment_detail(10)
print(g(10), g(20))
```
```
def make_increment(n):
return lambda x: x + n
print(type(make_increment))
print(type(make_increment(5)))
f = make_increment(10)
print(f(10), f(20))
def make_increment_detail(n):
def becomeLamda(x):
return x + n
return becomeLamda
g = make_increment_detail(10)
print(g(10), g(20))
def make_tuple(p):
return lambda x: (x, 'p' * p)
g2 = make_tuple(5)
print(g2(1), g2(2), g2(3))
```
```
class Counter(object):
def __init__(self, low, high):
print('object construct')
self.current = low
self.high = high
def __iter__(self):
print('prepare to iterate')
return self
def __next__(self):
print('next')
if self.current > self.high:
raise StopIteration
else:
self.current += 1
return self.current - 1
c = Counter(1,10)
print(type(c))
print([l for l in c])
```
```
def my_oreo(func):
def wrapper():
print("upper side chocolate")
func()
print("lower side chocolate")
return wrapper
def add_filling():
print("butter_cream!")
get_oreo = my_oreo(add_filling)
get_oreo()
```
```
def my_oreo(func):
def wrapper():
print("upper side chocolate")
func()
print("---lower side chocolate---")
return wrapper
def add_regular_filling():
print("butter_cream!")
def add_peanut():
print("peanut_butter")
fillings = [add_regular_filling, add_peanut, add_peanut,
add_regular_filling]
for f in fillings:
get_oreo = my_oreo(f)
get_oreo()
```
```
def my_oreo(func):
def wrapper():
print("upper side chocolate")
func()
print("---lower side chocolate---")
return wrapper
@my_oreo
def add_regular_filling():
print("butter_cream!")
add_regular_filling()
```
```
def variable_arguements(fix1, fix2, *args):
print('fix1={}, fix2={}'.format(fix1, fix2))
for arg in args:
print('variable part:{}'.format(arg))
variable_arguements("hello",'world')
variable_arguements('hi','again',300)
variable_arguements('it\'s me','again',300, 3.14, None)
fruits = ['apple','banana','orange']
variable_arguements('buy some','fruit', fruits)
variable_arguements('buy some','fruit', *fruits)
```
```
def my_oreo(func):
def wrapper(*x):
print("upper side chocolate")
func(*x)
print("---lower side chocolate---")
return wrapper
@my_oreo
def add_regular_filling(*fills):
for f in fills:
print("%s_cream!"%f)
add_regular_filling('cherry')
fillings = ['apple','chocolate','blueberry']
add_regular_filling(*fillings)
```
```
def my_oreo(func):
def wrapper(x):
print("upper side chocolate")
print('filling=%s'%func(x))
print("---lower side chocolate---")
return wrapper
@my_oreo
def add_regular_filling(fill):
return "%s_cream" % fill
add_regular_filling('chocolate')
```
```
import functools
def my_oreo(func):
@functools.wraps(func)
def wrapper():
print("upper side chocolate")
func()
print("---lower side chocolate---")
return wrapper
@my_oreo
def add_regular_filling():
print("butter_cream!")
print(repr(my_oreo))
print(repr(add_regular_filling))
```
```
def variable_key_value_function(fix, **kwargs):
print(f'fix part={fix}')
for k, v in kwargs.items():
print(f"parameter name={k}, value={v}")
variable_key_value_function("parameter alone")
variable_key_value_function('POOP',name='python programming' )
variable_key_value_function('POOP',name='python programming',
duration=35,level='beginning')
```
```
import functools
import time
def timer(func):
def wrapper_timer(*args, **kwags):
startTime = time.perf_counter()
value = func(*args, **kwags)
endTime = time.perf_counter()
runTime = endTime - startTime
print("finished{!r} in {:.4f} seconds".format(
func.__name__, runTime))
return value
return wrapper_timer
```
```
import functools
import time
def timer(func):
def wrapper_timer(*args, **kwags):
startTime = time.perf_counter()
value = func(*args, **kwags)
endTime = time.perf_counter()
runTime = endTime - startTime
print("finished{!r} in {:.4f} seconds".format(
func.__name__, runTime))
return value
return wrapper_timer
@timer
def spend_time_to_calculate(num_times):
result = 0
for _ in range(num_times):
result = sum([i ** 2 for i in range(10000)])
return result
print(spend_time_to_calculate(1000))
```
```
class Car:
vendor = 'lexus'
valid = True
c1 = Car()
c2 = Car()
print(c1.vendor, c2.vendor, Car.vendor)
Car.isImport = True
print(c1.isImport, c2.isImport, Car.isImport)
c1.passenger = 4
c2.color='red'
print(c1.passenger, c1.vendor, c1.valid, c1.isImport)
print(c2.color, c2.vendor, c2.valid, c2.isImport)
c3 = Car()
print(c3.vendor, c3.valid, c3.isImport)
```
```
class Car:
def __init__(x, speed=0, color=''):
x.speed = speed
x.color = color
def run(self, speed):
self.speed = speed
def query(self):
return self.speed
c1 = Car(90)
print(c1.query())
c1.run(80)
print(c1.query())
c2 = Car()
print(c2.query())
c3 = Car(color='pink')
print(c3.color)
c4 = Car(speed=40)
print(c4.speed, c4.color)
c5 = Car(color='brown', speed=120)
print(c4.speed, c5.color)
```
```
class Car:
max = 20000
def __init__(x, speed=0, color=''):
x.speed = speed
x.color = color
def run(self, speed):
self.speed = speed
def query(self):
return self.speed
@classmethod
def getMax(cls):
return cls.max * 0.8
@staticmethod
def insuranceRate(year, price):
return (1 - (0.8 * year)) * price
print(Car.getMax())
print(Car.insuranceRate(2, 200000))
c1 = Car(90)
print(c1.query(), c1.getMax(), c1.max)
c1.run(80)
print(c1.query())
c2 = Car()
print(c2.query())
c3 = Car(color='pink')
print(c3.color)
c4 = Car(speed=40)
print(c4.speed, c4.color)
c5 = Car(color='brown', speed=120)
print(c4.speed, c5.color)
```
```
class Employee(object):
def __init__(self):
self.work_content = 'work'
def doWork(self):
print('working on %s' % self.work_content)
e1 = Employee()
e1.doWork()
class RD(Employee):
def doWork(self):
print("repeat & debug")
rd1 = RD()
rd1.doWork()
class FAE(Employee):
def doWork(self):
print("collaborate customers")
fae1 = FAE()
fae1.doWork()
class Scientist(Employee):
def doWork(self):
print("build models")
s1 = Scientist()
s1.doWork()
rd2 = RD()
fae2 = FAE()
s2 = Scientist()
```
```
class Employee(object):
def __init__(self):
self.work_content = 'work'
def doWork(self):
print('working on %s' % self.work_content)
e1 = Employee()
e1.doWork()
class RD(Employee):
def doWork(self):
print("repeat & debug")
rd1 = RD()
rd1.doWork()
class FAE(Employee):
def doWork(self):
print("collaborate customers")
fae1 = FAE()
fae1.doWork()
class Scientist(Employee):
def doWork(self):
print("build models")
s1 = Scientist()
s1.doWork()
rd2 = RD()
fae2 = FAE()
s2 = Scientist()
employees = [rd1, None, 3.14, 'hello world',
rd2, s1, fae1, s2, fae2]
for e in employees:
if isinstance(e, Employee):
e.doWork()
```
```
class Employee(object):
def __init__(self):
self.work_content = 'work'
def doWork(self):
print('working on %s' % self.work_content)
class RD(Employee):
def __init__(self):
self.work_content = "Research*Development"
rd1 = RD()
rd1.doWork()
```
```
import logging
class LoggingDictionary(dict):
def __setitem__(self, key, value):
logging.info(f'setting {value} to {key}')
super().__setitem__(key, value)
logging.basicConfig(filename='logs\\demo83.log',
level=logging.INFO)
l1 = LoggingDictionary()
l1['ken']='iOS'
l1['frank']='oracle'
print(l1)
```
```
from collections import UserList
class MyOwnList(UserList):
def __setitem__(self, key, value):
if key == len(self.data):
self.data.append(value)
else:
self.data[key] = value
def square(self):
for key in range(0, len(self.data)):
self.data[key] = self.data[key] ** 2
l1 = MyOwnList()
for p in range(10):
l1[p] = 2 * p
l1.square()
print(l1)
```
from collections import UserDict
class MyOwnDict(UserDict):
def __init__(self, data={}, **kwargs):
super().__init__()
self.update(data)
self.update(kwargs)
def __add__(self, other):
self.data.update(other)
return self
x1 = {'name': 'pyoo'}
x2 = {'duration': 35}
# print(x1+x2)
y1 = MyOwnDict(codeName='PYOO')
y2 = MyOwnDict(duration=35)
y3 = MyOwnDict(instructor='MarkHo')
y4 = MyOwnDict(recommand={'follow': "BDPY"})
print(y1)
print(y1 + y2)
print(y1+y2+y3)
print(y1+y2+y3+y4)
```
```
from abc import ABC, abstractmethod
class A1(ABC):
def __init__(self, value):
super().__init__()
self.value = value
pass
@abstractmethod
def doSomething(self):
pass
class B1(A1):
def doSomething(self):
print('value={}'.format(self.value))
b1 = B1(300)
#a1 = A1(400)
print(type(b1),)
b1.doSomething()
```
```
class SimpleMeta(type):
#def __new__(cls, *args, **kwargs):
def __new__(cls, className, superClasses,
attributeDict):
print(f"類別名稱是:{className}")
print(f'父類別是:{superClasses}')
print(f"其餘屬性:{attributeDict}")
return type.__new__(cls, className,superClasses,
attributeDict)
class S:
def __init__(self, name, age):
self.name = name
self.age = age
s1 = S('James',20)
print(type(s1), s1.__class__, s1.__class__.__bases__)
print(s1.name, s1.age)
```
```
class SimpleMeta(type):
# def __new__(cls, *args, **kwargs):
def __new__(cls, className, superClasses,
attributeDict):
print(f"類別名稱是:{className}")
print(f'父類別是:{superClasses}')
print(f"其餘屬性:{attributeDict}")
return type.__new__(cls, className, superClasses,
attributeDict)
class S:
def __init__(self, name, age):
self.name = name
self.age = age
class A(S, metaclass=SimpleMeta):
pass
s1 = S('James', 20)
print(type(s1), s1.__class__, s1.__class__.__bases__)
print(s1.name, s1.age)
print('now, will prepare a1')
a1 = A('Mark', 43)
print('now, a1 generated')
print(a1.name, a1.age)
print(type(a1), a1.__class__, a1.__class__.__bases__)
```
```
class SimpleMeta(type):
# def __new__(cls, *args, **kwargs):
def __new__(cls, className, superClasses,
attributeDict):
print(f"類別名稱是:{className}")
print(f'父類別是:{superClasses}')
print(f"其餘屬性:{attributeDict}")
return type.__new__(cls, className, superClasses,
attributeDict)
def __call__(self, *args, **kwargs):
print('parameter passed in:')
for a in args:
print(a)
return super().__call__(*args, **kwargs)
class S:
def __init__(self, name, age):
print("init in S")
self.name = name
self.age = age
class A(S, metaclass=SimpleMeta):
pass
a1 = A("Mark", 43)
```
```
class SimpleMeta(type):
# def __new__(cls, *args, **kwargs):
def __new__(cls, className, superClasses,
attributeDict):
print(f"類別名稱是:{className}")
print(f'父類別是:{superClasses}')
print(f"其餘屬性:{attributeDict}")
return type.__new__(cls, className, superClasses,
attributeDict)
def __call__(self, *args, **kwargs):
print('parameter passed in:')
for a in args:
print(a)
return super().__call__(*args, **kwargs)
class S:
def __init__(self, name, age):
print("init in S")
print("customize in S")
self.name = name
self.age = age
class A(S, metaclass=SimpleMeta):
def __init__(self, name, age):
print("init in A")
super().__init__(name, age)
print("customize in A")
pass
a1 = A("Mark", 43)
#a1 = A()
#print(a1.name, a1.age)
```
```
class MetaSingleton(type):
_instances = {}
def __call__(self, *args, **kwargs):
print('inside metaclass singleton')
if self not in self._instances:
print("object not yet created")
print("create one")
self._instances[self] = \
super().__call__(*args, **kwargs)
print('return instance')
return self._instances[self]
class SingletonClass(metaclass=MetaSingleton):
def __init__(self):
print(f'SC id={hex(id(self))}')
x1 = SingletonClass()
x2 = SingletonClass()
print(x1==x2, hex(id(x1)), hex(id(x2)))
```
```
class SingletonParent(object):
_instance = None
def __init__(self):
print('init is called')
def __new__(cls, *args, **kwargs):
print('new is called')
if not cls._instance:
cls._instance = object.__new__(cls, *args, **kwargs)
return cls._instance
class SingleClass(SingletonParent):
pass
s1 = SingleClass()
s2 = SingleClass()
print(hex(id(s1)), hex(id(s2)), s1 == s2)
class NormalClass():
pass
s3 = NormalClass()
s4 = NormalClass()
print(hex(id(s3)), hex(id(s4)), s3 == s4)
```
```
output1 = open("data\\output1.txt", 'w')
linesToWrite = ["Hi, I am Mark\n","I would like to re-write"]
output1.writelines(linesToWrite)
output1.close()
for _ in range(50):
output2 = open('data\\output2.txt', 'a')
nextLines = ['\n add something']
output2.writelines(nextLines)
output2.close()
```
```
import glob
import os
paths = 'c:/windows'
print(paths)
allDirs = os.path.join(paths, '*/*.dll')
print(allDirs)
```
```
import glob
import os
paths = 'c:/windows'
print(paths)
allDirs = os.path.join(paths, '*/*.dll')
print(allDirs)
for dll in glob.glob(allDirs):
print(dll)
```
```
import os
myPath = "c:/windows/system32"
for currentFolder, subFolders, fileNames in os.walk(myPath):
print(currentFolder, subFolders)
for f in fileNames:
print('F', os.path.join(currentFolder, f))
```
```
photos = ['data\\photo1.png',
'data\\photo2.png',
'data\\photo3.png']
archives = ['data\\rar1.rar',
'data\\rar2.rar',
'data\\rar3.rar']
for photo in archives:
file1 = open(photo, "rb")
index = 1
byte = file1.read(1)
while byte != "" and index < 9:
x = int.from_bytes(byte, byteorder='little')
print('%d,%s' % (index, str(hex(x))))
byte = file1.read(1)
index += 1
print('--------')
file1.close()
```
```
https://www.moea.gov.tw/MNS/populace/news/NewsRSSdetail.aspx?Kind=1
```
```
import urllib.request
import xml.dom.minidom
file1 = urllib.request.urlopen('https://www.moea.gov.tw/MNS/populace/news/NewsRSSdetail.aspx?Kind=1')
DOMTree = xml.dom.minidom.parse(file1)
file1.close()
type(DOMTree)
collection = DOMTree.documentElement
if collection.hasAttribute("schemaLocation"):
print(f'schemaLocation={collection.getAttribute("schemaLocation")}')
```
```
items = collection.getElementsByTagName("item")
for item in items:
title = item.getElementsByTagName('link')
print(title[0].childNodes[0].data)
```
```
items = collection.getElementsByTagName("item")
for item in items:
title = item.getElementsByTagName('link')
print(title[0].childNodes[0].data)
description = item.getElementsByTagName('description')
```
```
import unittest
def fun(x):
return x + 1
class MyTest1(unittest.TestCase):
def setUp(self):
print('prepare data')
def tearDown(self):
print('store record')
def test1(self):
print('test1...')
self.assertEqual(fun(3), 4)
@unittest.skip("bug #31245")
def test2(self):
print('test2...')
self.assertEqual(fun(-1),1)
if __name__ == '__main__':
unittest.main()
```
```
import doctest
def square(x):
"""return square of x.
>>> square(4)
16
>>> square(2)
4
:param x:
:return:
"""
return x*x
if __name__ == '__main__':
doctest.testmod()
```
```
def getDigit(x):
returnDigit = 0
while x > 0:
x = x // 10
returnDigit += 1
return returnDigit
print(getDigit(1024))
print(getDigit(65536))
print(getDigit(10))
```
```
import multiprocessing
import time
def worker():
print('start to run')
time.sleep(2)
print('run finished')
return
if __name__ == '__main__':
jobs = []
for i in range(5):
print(f'now execute part:{i}')
p = multiprocessing.Process(target=worker)
jobs.append(p)
p.start()
print('result=',jobs)
time.sleep(3)
print('result=', jobs)
```
```
import multiprocessing
import time
def worker(num):
print('worker pass parameter as:', num)
time.sleep(4)
print('worker finished as:{}'.format(num))
return
if __name__ == '__main__':
jobs = []
for i in range(5):
p = multiprocessing.Process(target=worker, args=(i,))
jobs.append(p)
p.start()
print("jobs=",jobs)
```
```
pip install pygetwindow
pip install pyautogui
```
```
import pyautogui
print(pyautogui.size())
for i in range(10):
pyautogui.moveTo(100 + 10 * i, 100 + 10 * i, duration=1)
pyautogui.moveTo(200 + 10 * i, 100 + 10 * i, duration=1)
pyautogui.moveTo(200 + 10 * i, 200 + 10 * i, duration=1)
pyautogui.moveTo(100 + 10 * i, 200 + 10 * i, duration=1)
```
```
import multiprocessing
import time
def worker():
name = multiprocessing.current_process().name
print('[%s] start' % name)
time.sleep(4)
print('[%s] stop' % name)
def my_service():
name = multiprocessing.current_process().name
print('[%s] start' % name)
time.sleep(6)
print('[%s] stop' % name)
if __name__ == '__main__':
service = multiprocessing.Process(name='bg service',
target=my_service)
s1 = multiprocessing.Process(name='worker 1', target= worker)
s2 = multiprocessing.Process(target = worker)
s1.start()
s2.start()
service.start()```
```
import multiprocessing
import time
import random
def daemon():
name = multiprocessing.current_process().name
print("[%s] start work" % name)
time.sleep(random.randint(1,10))
print("[%s] stop work" % name)
if __name__ == '__main__':
d = multiprocessing.Process(name='daemon', target=daemon)
d.daemon = True
print('prepare start')
d.start()
d.join()
print('program terminated')
```
```
import multiprocessing
import time
import random
from datetime import datetime
def daemon():
name = multiprocessing.current_process().name
print(f"({datetime.now()})[{name}] start work")
time.sleep(random.randint(1,10))
print(f"({datetime.now()})[{name}] stop work")
if __name__ == '__main__':
d = multiprocessing.Process(name='daemon', target=daemon)
d.daemon = True
print(f'({datetime.now()})prepare start')
d.start()
d.join()
print(f'({datetime.now()})program terminated')
```
```
import multiprocessing
import time
def D1():
name = multiprocessing.current_process().name
print(f'[{name}]start')
time.sleep(2)
print(f'[{name}]stop')
def ND1():
name = multiprocessing.current_process().name
print(f'[{name}]start')
time.sleep(1.5)
print(f'[{name}]stop')
if __name__ == '__main__':
d = multiprocessing.Process(name='daemon', target=D1)
d.daemon = True
n = multiprocessing.Process(name='non daemon', target=ND1)
n.daemon = False
print(f'd is alive?{d.is_alive()}, n is alive?{n.is_alive()}')
d.start()
n.start()
print(f'd is alive?{d.is_alive()}, n is alive?{n.is_alive()}')
```
import multiprocessing
import time
def D1():
name = multiprocessing.current_process().name
print(f'[{name}]start')
time.sleep(5)
print(f'[{name}]stop')
def ND1():
name = multiprocessing.current_process().name
print(f'[{name}]start')
time.sleep(1.5)
print(f'[{name}]stop')
if __name__ == '__main__':
d = multiprocessing.Process(name='daemon', target=D1)
d.daemon = True
n = multiprocessing.Process(name='non daemon', target=ND1)
n.daemon = False
print(f'd is alive?{d.is_alive()}, n is alive?{n.is_alive()}')
d.start()
n.start()
print(f'd is alive?{d.is_alive()}, n is alive?{n.is_alive()}')
d.join(1)
print(f'd is alive?{d.is_alive()}, n is alive?{n.is_alive()}')
time.sleep(1)
n.join()
print(f'd is alive?{d.is_alive()}, n is alive?{n.is_alive()}')
d.terminate()
n.terminate()
time.sleep(1)
print(f'd is alive?{d.is_alive()}, n is alive?{n.is_alive()}')
```