Fluent Python Notes: Data Model

私人筆記,有錯誤煩請指正

Fluent Python Github


遵循Steve Holden的做法,在唸出Magic Functions的時候用dunder取代underscore, 如__getitem__唸作”dunder-getitem”


善用namedtuple來建構裡面只有一堆屬性,沒有自訂方法的簡單類別,如資料庫的紀錄一般

註:

  1. nametuple是類別工廠,回傳一個tuple的子類別
  2. 呼叫屬性asdict回傳OrderedDict物件(3.6後版本)
  3. 屬性是immutable(tuple),要更改可以re-create或呼叫_replace
  4. 透過__doc__設定docstring
  5. 透過__default__prototype._replace來設定預設值


實作__getitem__讓物件變成可迭代物(iterable)


某個集合可以透過實作__contains__來定義in運算子要如何掃描集合。


關於特殊方法,它們是要讓Python編譯器呼叫的,而不是你(私下呼叫);使用者程式經常呼叫的特殊方法只有__init__,目的是呼叫你自己寫的__init__;如果你要呼叫特殊方法,呼叫相關的內建函式會比較好(例如len、iter、str等),這些函式不僅會呼叫對應的特殊方法,通常還會提供其他服務,也比較快


__repr__回傳的字串必須精確,而且如果可以的話,必須盡可能匹配原始碼,以重新建立被表示的物件;__str__是讓print函式私下使用的,回傳給終端使用者觀看的格式;如果沒有自訂的__str__可用,Python會呼叫__repr__來提供回饋

https://stackoverflow.com/a/2626364/8100647


注意這裡的方法回傳新的Vector實例。為中綴(infix)運算子的預期行為:為了建立新的物件,並不接觸它們的運算元


len不會被當成方法來呼叫,因為它身為Python資料模型的一部分,會受到特殊對待,如同abs。但是拜特殊方法__len__所賜,你的自訂物件也可以使用len,這是一種在內建物件效率與語言一致性之間取得的平衡

發表留言

Object construction in JavaScript

Super Short History

Brendan Eich designed Mocha in 10 days, the language was officially called LiveScript, then was renamed JavaScript because of the spin-off of Java. (a marketing ploy)

JavaScript is noting like Java, but designed to syntaxly like Java.

Function Constructor

Use capital letter for function constructor: prevent missing “new” operator during construction

operator “new”

The “new” keyword is designed to make Java user feel comfortable. It is an operator in JavaScript.

  1. Create an empty object
  2. Invoke the function, point the keyword “this” to the empty object
  3. Pointing prototype to the function constructor
  4. Return the object

We can construct an object via function (function constructor) – just an regular function.

prototype extension
Build-in function constructors

Pure Prototypal Inheritance

Change the prototype along the way

Make object and create new objects by pointing prototype to this object using Object.create(), and override properties and methods.

Implement in newer browsers

Use polyfill, note the scenario of usage

ref:

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object/create#Polyfill

ES6 Classes

JavaScript doesn’t have classes until ES6, even though class keyword been added, but it still an object not a definition in other programming language.

Just another syntactical way(syntactic sugar) to construct objects.

發表留言

JavaScript Prototype

All object in JavaScript has a prototype property, the property is a simply reference to another object.

image

The modern browsers do provide a way to directly access the object’s prototype, but do not use it or set it, it will cause serious performance issue.

Object extend and reflection

Function constructor and “.prototype”

The prototype property on a function is NOT the prototype of the function, it’s the prototype of any objects that created via function constructors.

Using prototype chain to save more memory space

發表留言

節錄2018 CENA「WHY we focus on Okinawa? Similarities btw. Jeju & Okinawa」簡報

從琉球到沖繩

琉球國(1429-1897),與日本、中國政權有緊密關聯,包含漁業上的合作、進貢或被入侵。

日本本島與琉球長期有著領土爭執,1870年是重大的轉捩點,日本實施「廢藩置縣」,琉球國被編入鹿兒島縣,名稱也改為琉球藩(琉球處分)。

與琉球滅亡相關的關鍵字:與中國貿易關係停滯、日本曆取代中國年曆、日本軍隊駐紮、審判權和警察權被剝奪。

沖繩島戰役

二戰期間,沖繩被日軍犧牲用來拖延戰爭與保護本島(以防禦為目的);戰敗後,沖繩人民被軍方強迫集體自殺,半數居民因戰爭死亡(同時是軍事傷亡的一半,近10萬人)。

美軍在北部攻佔讀谷機場及嘉手納機場、並將伊江島建成日後空襲日本的空軍基地。

5月29日美軍攻佔南方的首里城後被視為沖繩戰役結束。

日軍利用沖繩的峭壁地形建立許多暗堡、洞穴和坑道的防禦工事。著名的有讀谷跟八重瀬町的天然熔洞。

美軍基地在沖繩

日韓兩國的美軍基地數量分別是135及26個。其中日本有7成的美軍基地設在沖繩(而沖繩只佔日本領土不到百分之一)。

基地給沖繩當地居民帶來空難、環境(海洋污染與噪音)、犯罪層面的危害與威脅(美軍不受日方公權力管轄)。

沖繩政治與社會運動

從1972沖繩回歸前後開始,沖繩縣也和本土一樣出現了保守派與革新派的對決(自民黨及社會黨),勞資關係與基地問題持續強化兩派的對立,2010年後,在邊野古搬遷問題上,兩派開始有合作關係;對美軍基地問題持強硬立場的翁長雄志當選知事。

1960至今,著名的社會運動有:

沖繩回歸、一英呎/腳運動(紀錄與傳達戰爭真實情況)、沖繩和平運動(反基地、反歧視、公民教育及戰後平反)、反美軍暴力運動(平權運動)、All Okinawa(反基地搬遷的政治對抗)、自由民主運動(學生發起)

戰後歷經的苦難,一連串針對土地與人權的全島鬥爭活動,正不斷型塑著沖繩人的身份認同。

沖繩與濟州的比較

觀光

2008年前兩者觀光人數非常相近,大約500萬人次,2009年後濟州觀光人次以近三倍成長,大幅超越沖繩。

島的歷史

沖繩與濟州島歷史上都曾有過王國統治期,沖繩有琉球國(Ryukyu)、濟州島有塔美納王朝(Tamna),曾附庸於百濟、新羅、高麗王朝。

文化

有各自的島嶼特殊建築以及兩者都有吃豬肉的飲食文化。

戰時與戰後經歷

戰時大量的居民犧牲;戰後面臨轉型正義與美軍基地問題。

source:

48949_47257_CENAプレゼンマスター版.pptx

ref:

「沖繩的自我認同」與沖繩人的自決權

強國秩序下的列島

沖縄平和運動センター

1フィート運動 – 太平洋戦争とは何だったのか

SEALDs RYUKYU

發表留言

Closures

Function finished, Execution contexts are gone, why can I still access its variable?

Every execution context has a space in memory where the variables and functions that created inside of it lives. Under normal circumstances, the JavaScript engine will eventually clear this memory space out(garbage collection). But at this moment, that memory space still exist though execution context was gone(popped off the execution stack).

It means even though the function was finished, any function created inside of it still have the reference of the function’s memory space. Function is gone, its execution context is gone, but what’s in memory for that execution context isn’t, and the JavaScript engine make sure that we can still go down scope chain and find it.

As we can say, the execution context is closed in its outer variables. This phenomenon: a function closing in all the variables that it’s supposed to have access to, is called a closure.

The scope is intact

Closures are just a feature to make sure that functions has access to their outer variables, it doesn’t matter whether the outer functions have finished running or not.

They just happens. The JavaScript engine create the closures, and we just take advantages of it.

closure example:

create a function factory:

setTimeout:

callbacks

發表留言