發表文章

Python assert 斷言使用方式

使用 assert 所謂斷言(Assertion),指的是程式進行到某個時間點,斷定其必然是某種狀態,具體而言,也就是斷定該時間點上,某變數必然是某值,或某物件必具擁有何種特性值。 如果你在Python中要進行斷言測試,則可以使用assert陳述句: assert <test>, <message> test是狀態測試,而message是斷言失敗時所要呈現訊息。例如,在 定義類別 中定義的Account類別,存款的時候不能提負數,提款的時候也不能是負數(真正的提款機也不會有負數鍵),所以呼叫deposit()或withdraw()時傳入的值必然是大於0,這時你可以使用斷言檢查: class Account:     def __init__(self, number, name):         self.number = number         self.name = name         self.balance = 0             def deposit(self, amount):         assert amount > 0, '必須是大於 0 的正數'         self.balance += amount             def withdraw(self, amount):         assert amount > 0, '必須是大於 0 的正數'       ...

Python 物件導向的__init__方法

在Python的類中有很多方法的名字有特殊的重要意義。現在我們將學習__init__方法的意義。 __init__方法在類的一個物件被建立時,馬上執行。這個方法可以用來對你的物件做一些你希望的 初始化 。注意,這個名稱的開始和結尾都是雙下劃線。 使用__init__方法 例:使用__init__方法 #!/usr/bin/python # Filename: class_init.py class Person:     def __init__(self, name):         self.name = name     def sayHi(self):         print 'Hello, my name is', self.name p = Person('Swaroop') p.sayHi() # This short example can also be written as Person('Swaroop').sayHi() (源文件:code/class_init.py) 輸出 $ python class_init.py Hello, my name is Swaroop 它如何工作 這裡,我們把__init__方法定義為取一個參數name(以及普通的參數self)。在這個__init__裡,我們只是新增一個新的域,也稱為name。注意它們是兩個不同的變數,儘管它們有相同的名字。點號使我們能夠區分它們。 最重要的是,我們沒有專門呼叫__init__方法,只是在新增一個類的新範例的時候,把參數包括在圓括號內跟在類名後面,從而傳遞給__init__方法。這是這種方法的重要之處。 現在,我們能夠在我們的方法中使用self.name域。這在sayHi方法中得到了驗證。

Python if __name__ == '__main__': 用法

 Python 程式裡的 __name__ 可以用來分辨程式是直接執行還是被 import 的 剛開始寫 python 的時候,看到幾乎每個程式的最後面都有一段 code: if __name__ == '__main__':  doSomething() 一直都不懂那是什麼意思,只知道要照抄然後執行程式時那段就會被執行。後來深入研究之後才比較瞭解 __name__ 的意思了。 原來如果一個 python script 是被別的 python script 當成 module 來 import 的話,那麼這個被 import 的 python script 的 __name__ 就會是那個 python script 的名稱。而如果這個 python script 是直接被執行的話,__name__ 就會是 __main__。 舉例來說,如果我有一個程式叫做 myModule.py,內容就是一行顯示自己的 __name__: print '__name__:' + __name__ 那麼我直接執行它的話,結果會顯示 __main__: bash-3.2$ python myModule.py __name__:__main__ 但如果我準備了另一個程式叫做 testModule.py,裡面就這麼一行去 import myModule: import myModule 然後我去執行 testModule.py 的話,則會顯示 myModule: bash-3.2$ python testModule.py __name__:myModule 結論: 1.直接執行與被執行 2.直接執行 __name__ == '__main__': 3.被執行 import myModule 4.所以用 __name__ 就可以分辨我的程式是被 import 當成模組還是被直接執行的。這樣附帶的好處就是如果我寫的程式平常可以被 import 來使用,但有時它自己也可以直接執行。其它語言的話,可能就要區分 library 跟使用 library 的程式,而 python 的話這兩者的界線就很模糊。

PHP 教學 - 常見亂碼問題

PHP亂碼問題,UTF-8亂碼常見問題小結     於 HTML head 指定此頁編碼為 UTF-8         <head>         <meta http-equiv="Content-Type" content="text/html; charset=utf-8">         </head>     PHP 送 Header 告訴瀏覽器這頁是 UTF-8 編碼         <?php         header("Content-Type:text/html; charset=utf-8");         ?>     設定 Apache 送出頁面預設語系 UTF-8 (比較不建議用此方法)         addDefaultCharset UTF-8         # 不過建議這行要包在 Directory 或 VirtualHost 內, 才不會影響到其它網頁.         <Directory "/var/*/blog">         addDefaultCharset UTF-8         </Directory>       ...

HTML5 - jqery mobile post 功能

如果要從 A 檔連到 B 檔,且 B 檔包含多頁面,則 A 檔連結要設 rel="external" 或 data-ajax="false",要不然整個站的 ajax 在設定裡關掉也可以。因為 jM 的網址結構,讓 ajax 沒關掉的話會出問題。 例如假設這樣寫一個 jquery mobile 表單頁面使用 post 導向 php 是無法通過的 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1"> <link rel="stylesheet" href="http://apps.bdimg.com/libs/jquerymobile/1.4.5/jquery.mobile-1.4.5.min.css"> <script src="http://apps.bdimg.com/libs/jquery/1.10.2/jquery.min.js"></script> <script src="http://apps.bdimg.com/libs/jquerymobile/1.4.5/jquery.mobile-1.4.5.min.js"></script> </head> <body> <div data-role="page">   <div data-role="main" class="ui-content">     <form method="post" action="demoform.php">       <label for="fname" class="ui-hidden-accessible">姓名:</label>      ...

PHP 教學 - 無窮迴圈用法

圖片
我們有時會需要寫一些無窮迴圈,多半程式語言都會提供類似 while(true) 這樣的語法句子,那麼 php 又該如何表達呢? 其實也可以利用 while(1) 來表示: <?php while (true ) { print "In loop!\n" ; } ?> <?php while (1 ) { print "In loop!\n" ; } ?>   或者用 for 來表示: <?php for (;;) { print "In loop!\n" ; } ?> 建議千萬別開網頁,因為會打不開,改用cmd來執行吧

PHP 教學 - 可變變數用法

可變變數的名稱是其他變數的值,是變化的,在某些情況下是可以讓我們少寫一些程式碼的! <?php $today="Sunday"; $$today="星期日"; echo "{$today}={$$today}"; ?> 以上範例 「$$today=”星期日”;」這個變數沒有真正的名稱, 其名稱取決於$today的值,所以當$today的值等於「Sunday」時, 「$$today」的真正名稱就是「$$Sunday」,換句話說實際上就是指定$$Sunday=”星期日” 的意思。 以下例子讓我們更清楚使用時間及差別: <?php $Sunday="星期日"; $Monday="星期一"; $Tuesday="星期二"; $Wednesday="星期三"; $Thursday="星期四"; $Friday="星期五"; $Saturday="星期六"; $today=date("l"); if($today=="Sunday"){ echo "今天是{$Sunday}"; }elseif($today=="Monday"){ echo "今天是{$Monday}"; }elseif($today=="Tuesday"){ echo "今天是{$Tuesday}"; }elseif($today=="Wednesday"){ echo "今天是{$Wednesday}"; }elseif($today=="Thursday"){ echo "今天是{$Thursday}"; }elseif($today=="Friday"){ echo "今天是{$Friday}"; }elseif($today=="Satu...