Python meetup - 1
Vic Yang
Installation
Installation
Python 2.7 or Python 3.4
https://www.python.org/downloads
Sublime Text 2 - editor with building system
http://www.sublimetext.com/2
pip - python package index (package manager)
http://www.pip-installer.org/en/latest/installing.html
git - version control (optional)
http://git-scm.com/
First Program
‘Hello world’
開啟編輯器,打⼊入print ‘Hello world’以附檔名.py存起
來,如此⼀一來此⽂文件便可被視為python script。
使⽤用sublime的building system便可在sublime裡⾯面看到
執⾏行結果。
!
⼩小練習:四則運算、次⽅方運算
Introduction
Why using Python?
軟體品質 - 可讀性佳、縮排取代⼤大括號、Object-Oriented、別⼈人
寫出來的code⽐比較容易看懂
⽣生產⼒力 - 相對於C++, Java 程式碼的量⼤大約1/3, 1/5
可移植性 - 不同作業平台上可以使⽤用
程式庫 - 最⼤大的好處之⼀一,許許多多的輪⼦子
整合其他語⾔言 - 其他語⾔言平台可以port,例如Iron Python, Jyphon
好吃、新奇、⼜又好玩
缺點
慢,這是⽅方便的代價,但有其他更底層的實作讓這件
事慢慢的變快,例如Pypy, Dropbox的JIT
語法⽅方⾯面的問題,ex. a.len() vs. len(a)
Python 內部資料結構的實作
1. List - Python語⾔言的資料結構實作造成他是最⽅方便卻也是最危
險的資料結構(我也是看了YouTube才知道
2. http://www.youtube.com/watch?v=fYlnfvKVDoM
從功能性來看
動態定型 - Python 會記錄程式執⾏行時的物件種類,不⽤用宣告複雜的形態跟
⼤大⼩小
⾃自動記憶體管理 - 當物件不再使⽤用時,啟動GC,會記錄低階記憶體細節,
總之我們不⽤用擔⼼心
⽀支援⼤大型程式設計 - 可以分⾨門別類的來寫code,整合起來相對⽅方便
內建物件型態 - [], {}, ()…
內建⼯工具 - 類似C++的STL
程式庫公開⼯工具 - 最⼤大的好處之⼀一
協⼒力廠商公⽤用程式
練習
基本語法
條件:if...else...
迴圈:for...in
遞迴
邏輯: and, or, not
程式碼匯⼊入 import
⻑⾧長度len(), 強制轉字串str()
內建程式庫
練習:parse 下⾴頁的xml格式的⽂文件,使⽤用內建函式庫
xml.etree.cElement
輸⼊入:⼀一段字串
輸出:將__TITLE__⽤用程式改成輸⼊入的字串
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
	 <key>items</key>
	 <array>
	 	 <dict>
	 	 	 <key>assets</key>
	 	 	 <array>
	 	 	 	 <dict>
	 	 	 	 	 <key>kind</key>
	 	 	 	 	 <string>software-package</string>
	 	 	 	 	 <key>url</key>
	 	 	 	 	 <string>__URL__</string>
	 	 	 	 </dict>
	 	 	 </array>
	 	 	 <key>metadata</key>
	 	 	 <dict>
	 	 	 	 <key>bundle-identifier</key>
	 	 	 	 <string>__BUNDLEID__</string>
	 	 	 	 <key>bundle-version</key>
	 	 	 	 <string>__BUNDLEVER__</string>
	 	 	 	 <key>kind</key>
	 	 	 	 <string>software</string>
	 	 	 	 <key>title</key>
	 	 	 	 <string>__TITLE__</string>
	 	 	 </dict>
	 	 </dict>
	 </array>
</dict>
</plist>
import xml.etree.cElementTree as ET
import sys
!
BUNDLEID = '__BUNDLEID__'
bundle_identifier = 543
!
tree = ET.ElementTree(file='default.plist')
!
root = tree.getroot()
!
for i in tree.iter(tag='string'):
if i.text == BUNDLEID:
i.text = str(bundle_identifier)
!
tree.write(sys.stdout)

Python meetup 1