---
# System prepended metadata

title: Python
tags: [python, random, threading, '@', lambda]

---

# Python

###### tags: `python` `lambda` `threading` `@` `random`

Outline
---
[TOC]


CH1
---
### 函式內函式
**Input:**
```python=
def aa():
	print("It's begin")
	def no1():
		print("It's no1")
	return no1
aa()()
```
**Output:**
```
It's begin
It's no1
```

---
### 字串處理

分割成列表
指定分割符號
txt.split(".")
每行分割
txt.splitlines()

字串反轉
txt[::-1]

字串取代
txt.replace(old, new, max=all)
txt[0:3] = "123"

列表集合成字串
"".join(list)


---
### 修飾符
**Input:**
```python=
def aa(a):
	print(a)
	def cc(f):
		f()
		return "finish"
	return cc

@aa("hi")                                # bb = aa("hi")(bb)
def bb():
	print("This is b")

print(bb)
```
**Output:**
```
hi
This is b
finish
```
---
```python=
def aa(msg):
	def a(f):
		print(f(msg))
	def b(f):
		print("It's b")
	def c(f):
		print("It's c")
	dic = {"hi":a, "jj":b, "uu":c}
	for i in dic.keys():
		if i in msg:
			return dic[i]

text = "hi this a bored guy !"

@aa(text)
def bb(msg):
	return msg.split(" ")

#print(aa(text))
```
---
### 執行緒
**Input:**
```python=
import threading
import time
# 子執行緒的工作函數
def job():
	while 1:
		msg = input("請輸入:\n")
		print("This is your input : ", msg)

# 建立一個子執行緒
t = threading.Thread(target = job)

# 執行該子執行緒
t.start()

# 主執行緒繼續執行自己的工作
def main():
	i = 1
	while 1:
		print(i)
		i += 1
		time.sleep(1)
main()
# 等待 t 這個子執行緒結束
t.join()
```
**Output:**
```
1
請輸入:
2
3
4
5
6
hello
7
This is your input : hello
請輸入:
8
9
10
.
.
.
```
---
### 字典取值
**Input:**
```python=
'''
dict.get(num, default)
從字典取出 num 值，若沒有回傳 default
'''
mydict = {1:"itme1", 2:"itme2", 3:"itme3"}
print(mydict.get(1, "not item"))    # item1
print(mydict.get(4, "not item"))    # not item
```
---
### lambda 匿名函數
**Input:**
```python=
lambda x, y: x + y   
'''
等同創建一函式 <lambda> 其內容為
def <lambda>(x,y):
    return x + y
'''
#<lambda>不可呼叫
#可用變數呼叫，如下
a = lambda x, y: x + y

a(1,2)    #3
```
---
### 修飾符與 lambda 應用
```python=
def total(number):
    return {
        1 : lambda meal: lambda: meal() + 30,
        2 : lambda meal: lambda: meal() + 40,
        3 : lambda meal: lambda: meal() + 50,
        4 : lambda meal: lambda: meal() + 60
    }.get(number, lambda meal: lambda: meal())

@total(2)
@total(3)
def cola():
    return 49.0
   
print(cola()) # 139.0
```
---
### 列表洗牌
```python=
import random
# 生成一列表 a = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
a = [x for x in range(10)]
# 將 a 列表洗牌
b = random.shuffle(a)
print(a)
```

---

### 從網路取得圖片
需事先安裝 wget 套件 --> ```pip install wget```

```python=
import wget
url = "https://cf.shopee.tw/file/86a0a0f9b0e557f2f904e45bd4101b9a"
status = wget.download(url, out="image.jpg")
print('Success' if status == 'image.jpg' else 'error')
```
※ 若重複執行檔名不會覆蓋，將以 ```image(1).jpg``` 存檔，所以須先刪除舊檔。

---

### 字串處理

[ascii 表](http://kevin.hwai.edu.tw/~kevin/material/JAVA/Sample2016/ASCII.htm)
```
>>>bytes("python", 'ascii')
b'python'

>>> ord('a')
97

>>> chr(97)
'a'

>>> chr(ord('a') + 3)
'd'

>>> unichr(97)
u'a'

>>> unichr(1234)
u'\u04d2'
```

### 序列埠

```python=
import serial
ser = serial.Serial(port='/dev/ttyUSB0', baudrate=9600)
while 1: 
    if(ser.in_waiting >0):
        line = ser.readline()
        print(line)
```
### 位元處理

若有一個二進制數值```0b10``` = 2，將之向左移動兩位元```<< 2```，得到之值為```0b1000``` = 8
```0b10 << 2 | 0b10``` 意思為將```0b10 << 2``` = ```0b1000``` 使用 or 處理```|```，使之成為 ```0b1010``` = 10



```python=
#!/usr/bin/env python
# -- coding:UTF-8 
#import pyzbar.pyzbar as pyzbar
import numpy as np
import cv2

cap = cv2.VideoCapture(0)        # 選擇攝影機

# Set the video resolution to HD720 (2560*720)
resolution = {"2.2k":(4416, 1242), "1080p":(3840, 1080), 
			  "720p":(2560, 720), "WVGA":(1344, 376)}

resolution = resolution["720p"]
cap.set(cv2.CAP_PROP_FRAME_WIDTH, resolution[0])
cap.set(cv2.CAP_PROP_FRAME_HEIGHT, resolution[1])

#cap.set(cv2.CAP_PROP_FPS, 15)



# Main
if __name__ == '__main__':
    i = 15
    while 1:
        _, frame = cap.read()

        left_right_frame = np.split(frame, 2, axis=1)
        #lframe = np.hstack((left_right_frame[1],left_right_frame[2]))
        #rframe = np.hstack((left_right_frame[3],left_right_frame[4]))
        lframe = left_right_frame[0]
        rframe = left_right_frame[1]
        
        #j += 1
        #cv2.putText(rframe, str(j), (100,100), cv2.FONT_HERSHEY_SIMPLEX, 1,  (0,155,255), 2, cv2.LINE_AA)

 
        

        #cv2.imshow('frame', frame)    # 顯示圖片
        cv2.imshow('Lframe', lframe)    # 顯示圖片
        cv2.imshow('Rframe', rframe)    # 顯示圖片

        # 若按下 q 鍵則離開迴圈
        k = cv2.waitKey(1) 

        if k == ord('c'):
          i += 1
          cv2.imwrite(f'''img/Left/{i}.png''', lframe)    # 顯示圖片
          cv2.imwrite(f'''img/Right/{i}.png''', rframe)    # 顯示圖片
          print("I read !")
        elif k == ord('q'):
          break  

    cap.release()                    # 釋放攝影機
    cv2.destroyAllWindows()          # 關閉所有 OpenCV 視窗



```





[深度圖](https://gist.github.com/aarmea/629e59ac7b640a60340145809b1c9013)















