BLACK CAT PROGRAMMER

python Comparison

python 提供很多的比較的方便,其中大家可能較常用 == 和 is,這個post 就講講他們的分別

is 是比較 variable 的pointer address

== 是比較 variable 的 value

簡單例子:

>>> p1 = { "name": "tom", "age": 11}
>>> p2 = { "name": "tom", "age": 11}
>>> p1 == p2
True
>>> p1 is p2
False
>>> hex(id(p1))
'0x104fdc800'
>>> hex(id(p2))
'0x104fdc840'

以上的例子都很簡單,因為 p1 同 p2 實際在memory 裡是兩個不同的 object ,不過他們有著一樣的 value,所以用 == 去比較時,會得到 True,而用 is 去比較時,會得到 False 。

我們再考慮以下的例子

>>> a = 256
>>> b = 256
>>> c = 257
>>> d = 257

>>> a == b
True
>>> c == d
True

>>> a is b
True
>>> c is d
False

為什麽 a 和 b 可以用 == 和 is 去比較,但 c 和 d 就不可以?

原來當 python 一開始是會把一常用的數值 load 入 memory ,這些數值包括 True, False, -256 to +256 ,所以他們有一樣的 memory address ,而大過256 的值,python 就會即時 allocate 新的 address

>>> hex(id(a))
'0x105b100d8'
>>> hex(id(b))
'0x105b100d8'

>>> hex(id(c))
'0x104fdffb0'
>>> hex(id(d))
'0x105047030'

所以 a b 是有一樣的 address ,而 c d 的 address 是不同

True False 在 python 世界裡都是一個 obj,他們都有各自的address,所以python 的 True 和 False 是大楷 T 和 F

>>> hex(id(True))
'0x105ad8b48'

>>> hex(id(False))
'0x105ad8b68'

Posted in notes, pythonTagged

MacBook Home and End button not work

M1 MacBook 不再支援external keyboard 的home 同end 鍵,但可以用以下方法自己改返

  1. 開啟 terminal
  2. 輸入以下command
    mkdir -p ~/Library/KeyBindings
  3. 用vim 開個新file
    vim ~/Library/KeyBindings/DefaultKeyBinding.dict
  4. paste 返下面的setting 入去
{
/* Remap Home / End keys */
/* Home Button*/
"\UF729" = "moveToBeginningOfLine:"; 
/* End Button */
"\UF72B" = "moveToEndOfLine:"; 
/* Shift + Home Button */
"$\UF729" = "moveToBeginningOfLineAndModifySelection:"; 
/* Shift + End Button */
"$\UF72B" = "moveToEndOfLineAndModifySelection:"; 
/* Ctrl + Home Button */
"^\UF729" = "moveToBeginningOfDocument:"; 
/* Ctrl + End Button */
"^\UF72B" = "moveToEndOfDocument:"; 
 /* Shift + Ctrl + Home Button */
"$^\UF729" = "moveToBeginningOfDocumentAndModifySelection:";
/* Shift + Ctrl + End Button*/
"$^\UF72B" = "moveToEndOfDocumentAndModifySelection:"; 
}

最後記得 save and exit 就完,再reboot 一次就可以了

refer: https://github.com/ttscoff/KeyBindings/blob/master/DefaultKeyBinding.dict

Posted in macbook, notesTagged ,