close

【Python簡介】

* python:
http://www.python.org


* 目前的語法還不算完全符合 python 精神,
python 3 系列會大幅更動,因此不向前相容於 python 1 & 2
為了因應這個問題, python 2.6 引入一個警告機制,
若不符合 python 3 的形式會出現警告

 

 

* 安裝 python 2.5.2:
python 官網左邊的 quick links
windows installer,點下去就可以開始下載


* 批踢踢的 python 板建議的編輯器是 eclipse 加上 python 模組
不過 python shell 也很好用
windows 版本安裝完成後會在程式集出現 python 資料夾
執行 "IDLE (python GUI)" ,就可以開啟 python shell
(在 linux 下可以直接打 python 就進入同樣的模式)
離開互動式介面請按 ctrl-D ,
在 windows 的命令提示字元下則以 ctrl-Z 結束離開


* 今天的投影片是賓州大學的 introduction to python
www.cis.upenn.edu/~cse391/cis391_2007_fall/Python1-2007-fall.ppt
www.cis.upenn.edu/~cse391/cis391_2007_fall/Python2-2007-fall.ppt
www.cis.upenn.edu/~cse391/cis391_2007_fall/Python3-2007-fall.ppt


* script language 中,
目前有 interactive interface 的只有 Ruby 和 python 等少數


* 在 IDLE 下可以直接做運算,例如 3*(7+2)
而且也可以做大數運算,不會破錶


* python 適合作快速的開發,
效能若有瓶頸可以在之後再以 C 修改實作




【程式開發】

* 縮排在 python 中是有意義的,若不縮排程式會不能跑


* 副檔名若為 *.py,點兩下檔案會直接執行
在 UNIX 要在第一行加上
  #!/usr/bin/python
建議在 windows 上也養成習慣加上這一行
因為 windows 會略過這行,這樣若日後有需求可以直接移植


* 在 python 中,變數是沒有型態的
例如 x = 100
x 是沒有型態的,而 100 本身則會自動指為 int
若宣告 z = x,則是指到同一個物件內容
我們可以使用 id 指令觀察是否指到同一個物件內容
  id(x)
  id(z)
可以看到同樣的位址


* 在 python 中,雙引號和單引號的意義是一樣的
若要 \n 等保持原形(例如想直接印出字串內容,不想要讓 \n 變成換行)
可以在字串前加上 r (=raw)
  y = r"World\n"


* python 會自動在印出不同變數時換行
若要強制不換行,可以加上逗點(,)
  x = 34 - 23
  y = "Hello"
  print x,
  print y


* python 3 中有 end="" (或者可以寫成 end=''←end、等號、一組引號)
可運用來作為變數印出的後置字元
預設是 \n (換行),也可以改成分隔符號、tab 等等


* 在 python 中每一句行尾不加分號
在 C language / php 下的 if
  $Z = 3.45;
  $y = "Hello";
  if ($Z == 3.45 && $y == "Hello"){
  }
在 python 下不加分號、if 後也可以不加括號
python 中的 if 使用縮排來辨識其內容
因此縮排要一致,四格空白鍵和 tab 的意義不同
else if 寫成 elif
  if 判斷式:
    執行內容
  elif 判斷式:
    執行內容
  else:


* C language 使用 &&、||、!,
在 python 中,直接表示成 and、or、not,
若不等於可以用以下兩種方式表示:
  if a != b
  if not a == b


* 對字串使用的運算子:加號(+)和乘號(*)
加號表示字串相連,乘號表示字串重複出現的次數
  "abc" + "def"
  "abc" * 5
要運算時,運算元必須使用一樣的型態
所以若有需要可以使用str()函數將數值轉字串,
或用int()函數將字串轉整數


* 在 python 中,求餘數一樣是 %,求冪次則是 **
例如要得到三的平方
     3 ** 2
//為去除餘數,例如:5/2.0 的結果為 2.5,5//2.0 的結果為 2


* 百分比(%) 除了求餘數外,也可以代換字串
  name = "life"
  "%s is easy" %name


* 當字串需要換行,又必須儲存換行符號,可以把字串存在三個引號內
  a = """123
  123
  123
  123"""
儲存的結果即為123\n123\n123\n123


* 較長的敘述句若要折行,要加上小括號
  if (z == 3.45 and
  y == "Hello")
在此例中,多餘的換行與空白都會被省略


* 註解符號為 #


* 對 python 來說,開頭是底線的變數通常用來宣告建構子用



【Sequence types: tuple, list, string】

* Tuple:
可以取出部分字串,
  a = "Hello"
  a[1]
  #字串視為陣列,從0開始,因此 a[0] 取出的是 e
  a[1:4]
  #取「至」a[4],因此不取a[4],取出的是 ell
  a[:3]
  #啟始省略表示從頭開始取到 a[3],取出 Hel
  a[2:]
  #結尾省略表示從 a[2] 取到尾,取出 llo


* Tuple 也可以給多組值,
  tu = (23, 'abc', 4.56, (2,3), 'def')
  tu[1]      #取出 abc
  tu[1][1]     #取出 abc 中的 b


* Tuple 和 list 的差別: list 可變更值、tuple 不可
  tu = [23, 'abc', 4.56, (2,3), 'def']   #中括號為 list 的表示方式
  tu = (23, 'abc', 4.56, (2,3), 'def')   #小括號為 tuple 的表示方式
  tu[0] = 100
  #list 時可將 23 改為 100,但 tuple 時會出現錯誤訊息
但因 tuple 的不可更動,可使它有較好的取用效率,
或存放的資料希望不被更動,則可使用 tuple


* dir()可以用來查詢可使用的函式
  a = "abc"
  dir(a)
  #會列出所有可用的函式
例如要取 IP 分辨 netblock 範圍,
  IP = "140.117.11.2        "
  IP.strip().split('.')[0:2]
strip()會消除多餘的空白,split()可依指定字元分割


* help()可用來查詢函式的用途
  help("abc".isdigit)
  #可用來查 isdigit() 函式對字串 abc 的作用


* python 中的真假值是以 True 和 False (首字要大寫)
例如查詢字串 abc 是否是字母
  "abc".isalpha()       #回傳 True


* len() 求長度
  a = [1, 2, 3]
  len("abc")
  #求字串 abc 的長度,答案為 3
  len(a)
  #求 list 的長度,答案為 3



* list 中有個方法叫 append,可以直接修改物件加入新元素
  a = [1,2,3]
  b = a
  a.append(4)
  # a 就變成 '1,2,3,4',和 a 指向同一物件的 b 也是
若希望 a.append 後的結果不影響 b,可以複製整個 a 給 b
  a = [1,2,3]
  b = a[:]
  a.append(4)
  # 此時 b 的值仍是 '1,2,3'


* in 可以用來檢視是否字串或 list, tuple 中是否有需要的內容
  t = (1, 2, 3)
  1 in t
  # tuple t 中有 1,return true
  u = "abc"
  "a" in u
  # 字串中有 a,return true


* 除了 int 和 str 這類的轉換, tuple 和 list 也可以互轉
  (1,2,3) + tuple([4,5,6])
  [1,2,3] + list((4,5,6))





【實作練習一:抓取網站資料】

1. 到 python 官網,點左側選單的 documentation ,
再選取 Module Index。

2. 操作 urllib 的 example:
  import urllib
  #匯入 urllib 函式庫
  dir(urllib)
  #可以看有哪些函式可用
  wretch = urlllib.urlopen("http://www.wretch.cc")
  #抓取無名首頁
  wretch.read()
  #將抓取到的無名首頁的 html 印出



【實作練習二:迴圈】

1. 印出 list
a = [1,2,3]
for i in a
    print(i)
    #不設初值和終值,會依序從頭至尾走訪

2. 反序印出上例內容
a = [1,2,3]
a.reverse()
for i in a
    print(i)

3. 印出字串內容
a = "Hello"
for i in a
    print(i)
    #會分行印出H,e,l,l,o



【實作練習三:檔案讀寫、備份練習】

1.
import os
os.chdir(r'C:\Documents and Settings\username\桌面')
#切換資料夾,r 表示不要讓路徑中的斜線被判斷為特殊字元
print os.getcwd()
#印出我們目前在哪個目錄下,檢視是否切換成功
f = open('abc.txt', 'r')
#讀檔,和 C 一樣,a = append,w = write,r = read
for i in f:
    print i,
    #印出檔案內容


2.
import tarfile, os
os.chdir(r"C:\Documents and Settings\veronica\桌面")
tar = tarfile.open("icon.tar.gz", "w:gz")
#指定壓縮檔案名稱,並壓縮成 *.gz 檔
tar.add("icon")
#將要壓縮的資料夾拉進來
tar.close()
#壓縮完成後要 close 免得佔資源

 

arrow
arrow
    全站熱搜

    小攻城師 發表在 痞客邦 留言(6) 人氣()