顯示具有 programming 標籤的文章。 顯示所有文章
顯示具有 programming 標籤的文章。 顯示所有文章

2013年5月8日 星期三

python 中 is 和 ==(等於) 的差別

    在很多程式語言中,相等的意義有兩種意涵,一種是指那兩個變數實際上是指向同一個物件,另外一種意涵是雖然他們不是相同物件,但是他們的值一樣(什麼叫做值一樣,可以自己寫函數定義)。在 java 中,我們用 == 還比較這兩個變數是否指向相同物件,而使用 object.equal(other) 還比較兩個變數物件的值是否一樣。 在 python 中,則是使用 is 這個關鍵字來判斷這兩個變數是否指向相同物件,而使用 == 來判斷兩個變數物件的值是否一樣(值是否一樣由 __eq__ 這個函數定義)

2013年5月4日 星期六

pdb 的運作原理

    要了解 python debuger 的運作方式前,需要先了解 python 如何實作 function call。在 C語言中,每個被呼叫函數都有自己的 call stack拿來存放區域變數之類的東西。而在 python 中, call stack作用是由 frame object 物件完成。下面是官網對 frame object 的屬性介紹

python yield 語法與 generator 物件介紹

    這篇介紹 yield 語法以及用來維護 yield 行為的 generator 物件。
    事實上,yield 和 return 很像,只是當函數呼叫 return 時,該函數 call stack (python 中是 frame) 就會被清除,程式主導權回到呼叫該函數的手上。 而 yield 會把程式主導權交給呼叫該函數的手上,但是他不會把函數的 call stack 清除,因此下次呼叫時,可以從上次未執行的部分開始執行,而不是重新建立一個新 stack。

2013年4月21日 星期日

如何取得 facebook 的 access_token。

    要取得 facebook 的 access_token 目前我知道的有兩個方法,一種是利用你的 api id 和 secreet key 。透過 'https://graph.facebook.com/oauth/access_token?client_id=%s&client_secret=%s&grant_type=client_credentials' % (FACEBOOK_APP_ID, FACEBOOK_APP_SECRET) 這個 api 來取得。這個方法適用於 server 端,因為它會暴露 secreet key。

2013年4月20日 星期六

tcl 的語法簡介

    因為網路上有不少的 tcl 教學(中文英文都不少),所以這篇文章就不是做 tcl 的教學。就只是當成備忘。當我要用的時候,可以讀這篇文章快速回憶。

    tcl 這個語言想法很簡單,每行程式碼都是一個指令,指令後面接參數。指令與參數間用空格隔開。指令的結尾一般是換行符號,有可能是]  (當然,放在 {} 裡的字串不會被當作用該字串作為參數的指令當成指令結尾,下面有範例)。例如:

puts "abcd"
    上面指令會顯示 abcd

puts {123
456}

2013年4月9日 星期二

如何使用 django 的 i18n

    因為今天被 django 的 i18n 搞很久。所以只好寫篇文章作個紀錄。

    django 要做到 i18n。首先,你需要把程式中要翻譯的字串都改成 _("string") 這種形式。其次,你需要在 template 加上 {% load i18n %},以及把 template 的字串改成 {% trans "string" %}。在程式碼和 template 加完上面的東西後。接下來就是重點了,至少是我犯錯的地方。

2013年4月8日 星期一

python runtime 產生物件與 compile-time 產生物件方法的比較

    python 是一個很有彈性的語言,可是彈性也意味著,完成一件事情會有很多方法。這篇文章介紹產生產生 dict 與 type object 的方法。注意,以下討論都是未最佳化的情形。

    首先介紹產生 dict 的方法。在 python 中,產生 dict ( list 和 tuple 相同) 方法至少有兩種,一種是使用 {}, 另外一種是使用 dict() 的形式。前者是 compile-time 就會決定要產生 dict 物件,而後者是函數呼叫型式,他必須等到 run-time 時期才知道是產生 dic。至於後者較前者有何好處我就不清楚了。

2013年3月20日 星期三

callback function 與 decorator ( 以 python 為示範 )

    在網路上看到有人問 callback function 和 decorator 有何不同。 基本上,他們兩個完全是不同概念的東西。 callback function 是指 A function  呼叫 B  function 時,傳入 C function 作為參數。B function 在做一些事情後,可能會呼叫 C function。 C function 在這個情境下就是 callback function。


2013年3月18日 星期一

比較c++、python、go、與javascript的 lambda語法

C++11 算是出了一段時間了,而最近編譯器對 C++11 的支持也越來越完善了。 C++11 有一個新特性,就是支援 lambda 的語法,所以就把一些語言的 lambda 語法拿來做比較。首先是python。

map(lambda s: s * s, [1, 2, 3])
python 的 lambda 語法很好理解,冒號前是參數,冒號後是程式碼。lambda   的限制就程式碼只能夠一行。lambda 可以存取外部變數,但是不能使用 assignment statement。

2013年3月9日 星期六

EZ430-Chronos 運動手錶介紹

 
    這是一隻你可以寫程式在上面的手錶,德州儀器出的。使用 msp430 系列的晶片。 內建溫度、氣壓、電壓感應器、蜂鳴器、三軸加速器、RF收發器(就可以無線溝通,不太確定中文怎翻)。

2013年3月7日 星期四

dict literal 與 dict constructor 的比較

    基本上, dict literal ( 使用{}建立物件 ) 和 dict constructor ( 使用 dict() 建立物件 ) 結果一樣。 只是他們之間仍有些許的差異。

    首先是速度上的差異,當 interrupter 執行到 {} 時,interrupter 會知道是要建立 dict 物件。 然而,當 interrupter 執行到 dict() 時,他會認定執行 function call。因此多個函數呼叫與參數傳遞。不過這兩者間的效能差異不算大,也可能會被最佳化。我用下面程式碼做簡單測試

2013年3月1日 星期五

在 python 中較快的字串加法

在 python、java 中,字串都是不可變的(immutable)。意味著,字串被建立後就不能夠被修改。因此,當你在做 n 個字串加法時,它會產生 n - 2 個暫時字串物件。 為了避免在做大量字串加法時,產生過多的暫時物件。 java 中有 stringbuffer 可以使用。用法如下:

2013年2月28日 星期四

免費跨平台的好用編輯器/ ide

這篇文章是介紹認為不錯的跨平台免費編輯器/ide。因此,要錢的或是不能跨平台的不在考慮範圍內。這篇介紹的軟體都支援多種程式語言,不限於特定程式語言。

以下是我認為編輯器/ide 應該有的功能:

  1.  code/word complement: 這個功能很重要,可以避免打錯字
  2. 可以改字體顏色、與大小
  3. 能夠快速執行或編譯
  4. code navigation: 這個功能主要是在看 code 時比較方便

python 的 functools.partial 函數

很久以前,就看過這個  functools.partial 了。 只是一直不太明瞭它的實際作用。直到最近我在讀 c++11 時,看到 std::bind 時,我突然領悟 functools.partial 和 std::bind 做的事情一樣。

2013年2月12日 星期二

2013年2月8日 星期五

淺談 go 語言的defer關鍵字

在寫程式,我們時常犯一種錯誤,就是要了資源,忘了釋放。舉例來說,你 fopen 了檔案,卻沒有 fclose 。你 malloc 一塊記憶體,卻忘了 free 它。 你 acruire 一個 locker,卻忘了 release等等。記憶體管理也許可以藉由GC技術,而減輕許多負擔。但是另外兩種呢?

要怎麼減少犯錯的機會呢?盡量減少fopen和fclose之間的距離,越近越好。最好是fopen完就呼叫fclose,這樣犯錯的可能性就降低很多了。

2013年2月4日 星期一

淺談python繼承

最近無聊翻了一下書櫃,找到一本買了卻沒讀完的書,exceptional c++。就稍微看了一下,看看裡面有沒有什麼文章對於寫python code有助益的

那本書條款24(第104頁),是在討論有關使用/濫用繼承。

2013年1月20日 星期日

程式語言分析



這篇文章是當初我找工作時,履歷的附加檔案。基本上只是我個人的主觀意見。每種語言都有各自的愛好者,且每個人的偏好也不一定相同。選擇自己最喜歡的語言即可。



2013年1月5日 星期六

[程式語言] 淺談Python的預設參數

這篇文章是要討論python的預設參數


def fun1(a=0):
        print a

def fun2(a=[]):
        a.append(1)
        print a
        print 'address: ', id(a)

class DefaultObject:
        def __init__(self):
                print 'call me'

def fun3(a=DefaultObject()):
        print 'address: ', id(a)

2013年1月4日 星期五

[軟體工程]如何寫出意圖使人犯錯的程式碼

因為一些因素,讓我學習到一段程式碼,這段程式碼就是這篇主題的主角,意圖使人出錯的程式碼。
這段code的規格是
初始化玩遊戲後,確保有一個使用者在遊戲裡面,所以要在init結束前呼叫join。
至於規格為什麼要這樣設計,不要問我XD
 原本的code是python的。我把python的code轉成用c++來表達,所以function前面都會有virtual,以符合python情形。