跳到主要內容

發表文章

目前顯示的是 3月, 2018的文章

Python - varibale

Python - varibale # 第一次玩 python 是在 samba porting 時,用來做 auto-testing。 看中的是 python 比起 bash 豐富些的封裝能力,感覺 code 重用的效果會比較好, 比起 c++ 寫起來彈性也好一些。然而在一個比較大的 project 當中, 修正 pylint 的錯誤時,一邊 trace code,一邊浮起了很多疑問。 想像在看 code 時,看到這樣的一段: ... def func(self, ...): ... x.a = self.b() ... 怎麼知道 x 是什麼?如果在檔案中有很多個 x 有關係的是哪些? 怎麼知道 x.a 是什麼?找到了 x 後,怎麼找到 x.a ? self 是什麼?為什麼有的時候要傳,有的時候又不用? Reference or value # 在 c/c++ 中,常會說 "call by reference" or "call by value"。其實只要有變數取用、 傳遞等行為,就需要問到底傳的是 reference 還是 value。 比方說 a = 1 b = a a = 2 print(b) 執行結果 b == 1 ,看起來並不會因為 a 的值改變了而改變。 對於學 c/c++ 或 javascript 的人來說,好像都滿直覺的。 但這滿有趣的,並非所有語言都是如此,在 Makefile 當中,就不會是這樣的結果。 而如果換成是: a = [] b = a a.append(1) print(b) 則會得到 b == [1] 的結果。怎麼好像又會隨著 a 一起改變呢? 這對於 javascript 也是滿直覺的, 所有型別分成兩大類, primitive type 在 b = a 食,會發生 value 的複製;而另一類都是 object 的子孫,在 b = a 時, 會發生的是 reference 的複製。因此未來作用在同一個 object 上的改變, 都會影響到擁有這個 reference ...

Blogger tool

Blogger tool # 不懂為什麼,對於所見即所得的編輯器不太會用(少了 vim 加持??) 直接寫 html 又太痛苦。那要寫 markdown 嗎? 希望在文件中方便插入 code、流程圖等。 找其他 blog?就只是記記東西還要去找,有點懶。 如果透過 markdown tool,再貼到 blogger,html tag 很髒,有些東西也可能會跑掉。 目前 markdown 也不符合需求,需要小改。未來如果不滿意,還是可以隨時調整。 因此就決定自己 render 然後推上 blogger。 How to push posts # 1. 申請一個 app id/secret # 不知道有沒有別的申請方法,目前是直接登入 console.cloud.google.com 來申請。 然後隨便找一個 project (這樣對嗎?邏輯上這樣比較像是要把存取 blogger 的權限放到這個 web application 當中一樣。但其實暫時還只打算先跑 CLI)。 先把 blogger API 打開,然後到 "API 和服務" > "憑證" 去建立。 申請過程中會問一下是要幹什麼用的,還有填個 app 的名字, 然後就可以下載 client_id.json 裡面帶有 api id/secret 了。 如果弄丟了,或要修改,之後也可回到這個頁面當中做後續的維護動作。 2. install API client # 沒有其實也可以啦,手動打 REST API 而已。只是有好像比較方便一些。 python 版 pip install --upgrade google-api-python-client nodejs 版 (alpha) npm install googleapis --save 最後選用了 nodejs,因為 python-markdown 出來的結果不是很滿意 (另一個 misaka 沒試過) , marked 之前用起來感覺還不錯。只用同一種 language 之後在修改時應該比較方便擴充。 3. get access token # 因為需要操作 ...

Python - import

Python - import # 當 code 變多,需要更好的整理和封裝,因此 python 提供了 package、module 的功能, 及 import 的語法來調用這些包裝好的元件。 python 中,一個 .py 的檔案即為一個 module。而存放 module 的目錄,則稱為一個 package。 在 import 過程中,module 會被編譯、執行,並在 import 後, 被放入 caller 的 local symbol table 當中。 之後可透過 module.symbol 來調用這個 module 下的 symbol。 如此簡單、似是而非的描述,距離實際上實作細節還很遙遠。 在深入一個個機制之前,先列一下希望能回答的問題。 package 與 module 的定義是什麼?有什麼分別嗎?責任的界定是什麼呢? 傳說在 package 的目錄當中,必須要有一個 __init__.py 的存在?這是做什麼用的? 我的 python interpreter 去哪邊找 package 的,什麼是 sys.path ? 這些package、module 是一個物件嗎?是的話他們的生命週期是怎樣呢? 會不會有 circular import 的發生?有什麼限制? import 的基本語法 # 在 python3 - module (or python2 - module ) 中,介紹得滿清楚的。複習一下這些內容: import mod 最簡單的型式,找到 module 後,在 local symbol table 中建立 (bind) 名為 mod 的變數,reference 到 module mod 。 import pkg.mod 找到 package pkg 後,找到 module mod ,在 local symbol table 中建立 pkg 。之後可以透過 pkg.mod.X 去調用下面的東西。 import pkg.mod as mod 匯入後改變在 local symbol table 中的名稱。在 pkg.mod import 後,可用 mod 去存取。 from pkg import mod 、 fro...