Johnson Hsu
[email protected]
Python Python ProgrammingProgramming
@
大綱
Chapter 1 認識 Python Chapter 2 內建物件型態 Chapter 3 流程控制 Chapter 4 程式撰寫的一些特性 Chapter 5 函式
@
Chapter 1 認識 Python
@應用應用
1. RedHat Linux 安裝程式
2. Google 內部系統程式
3. pydict 英漢字典
4. Online Game Server
………….
http://www.python.org/Quotes.html
@PythonPython的特色的特色
1. Script Language,直接在直譯器內執行、測試
2. 跨平台: Windows、 Linux-Like、 Mac
3. 完全自由4. 資料型態不需要被指定 , Dynamic typing
5. 用縮排 (tab)表示與其他階層的關係
6. Built-in tools:切割 (slicing),連接 (Concatenating)..
7. 豐富的模組: HTML, Socket, Telnet, http….
8. 完整的物件導向特性:繼承 , …多型 .
9. 不強制是否要寫成物件10.擴充:執行 C/C++程式
11.內嵌:讓 python成為 C/C++的一部分 (應用程式 )
@NumbersNumbers
整數 (integer, long integer)
base10 (-2147483648 ~ 2147483647)i = 2147483647i = 2147483647L
base8i = 0177i = 0177L
base16i = 0x7FFFFFFFi = 0x7FFFFFFFL
@
Chapter 2 內建物件型態
@NumbersNumbers
float (雙精度浮點數 , 64位元 )
1) 小數點 3.14
2) 指數 1e100 3.14E-10 1e010 3.14E+10
complex
1) 指定 i = 2.5 + 0.6j (i.real、 i.imag)
2) 函式 i = complex(2.5, 0.6)
@StringsStrings
一般標示法
單引號 � ‘ String’
雙引號 “ String”
三引號 “”” String1
String2…..
String….””” 含有特殊字元的表示法
雙引號 � x = "johnson's“
單引號 x = 'johnson"s‘
反斜線 x = 'johnson\'s'
@字串的操作字串的操作
字串相加
重複字串
取得字元在字串中的位置
字串分割
取得字串長度
格式化字串
字串疊代
隸屬成員
@ 字串的操作 字串的操作 -- -- 字串相加字串相加
@ 字串的操作 字串的操作 -- -- 重複字串重複字串
@字串的操作字串的操作 ----取得字串中特定位置的取得字串中特定位置的字元字元
@ 字串的操作 字串的操作 -- -- 字串分割字串分割
@ 字串的操作 字串的操作 -- -- 取得字串長度取得字串長度
@ 字串的操作 字串的操作 -- -- 格式化字串格式化字串
@ 字串的操作 字串的操作 -- -- 格式化字串格式化字串
%s String %X Hex integer (uppercase) %c Chapter %e %d Decimal (int) %E Floating-point format 3 %i Integer %f Floating-point format 3 %u Unsigned (int) %g floating-point format 4 %o Octal integer %G Floating-point format 5 %x Hex integer %% Literal %
Floating-point format 1a
@ 字串的操作 字串的操作 -- -- 字串疊代字串疊代
@ 字串的操作 字串的操作 -- -- 隸屬成員隸屬成員
@ListsLists
存放物件
格式 : [obj, obj…]
i = [1, “2”, ‘3’, [4], (5,)]
i = []
i = list() list() 內建方法
list((1, 2, 3, 4))
list([1, 2, 3, 4])
list(“1234”)
list(‘1234’)
@ListList的操作的操作
取得 list中特定位置的物件 取得物件於 list中的位置 list切割 取得 list大小 list相加 增加物件 重複 list list疊代 隸屬成員 (in) list排序 list倒置 (reverse) 刪除物件
@ListList 的操作 的操作 -- -- 取得取得 listlist中特定位置中特定位置的物件的物件
@ListList 的操作 的操作 -- -- 取得物件於取得物件於 listlist中的中的位置位置
@ListList 的操作 的操作 -- list-- list切割切割
@ListList 的操作 的操作 -- -- 取得取得 listlist大小大小
@ListList – 的操作 物件相加 – 的操作 物件相加
進行相加一定要是 List + List
list與字串相加 , 必須先把 list轉為 string再相加 ,
或者
利用 list內建方法將 string轉為 list再相加
@ListList 的操作 的操作 -- list-- list相加相加
@ListList 的操作 的操作 -- -- 增加物件增加物件
list.append(obj) == list.insert(len(list), obj)
list[len(list):] = [obj] == list.extend(obj)
list[:0] = [obj] == list.insert(0, obj)
@ListList 的操作 的操作 -- -- 增加物件增加物件
@ListList 的操作 的操作 -- -- 增加物件增加物件
@ListList 的操作 的操作 -- -- 重複重複 listlist
@ListList 的操作 的操作 -- list-- list疊代疊代
@ListList 的操作 的操作 -- -- 隸屬成員隸屬成員 (in)(in)
@ListList 的操作 的操作 -- list-- list排序排序
@ListList 的操作 的操作 -- list-- list倒置倒置 (reverse)(reverse)
@ListList 的操作 的操作 -- -- 刪除物件刪除物件
@ListList 的操作 的操作 -- -- 刪除物件刪除物件
@ListList 的操作 的操作 -- -- 刪除物件刪除物件
@ – 練習 堆疊 – 練習 堆疊
當作堆疊 (stack): <先入後出 > 用哪兩個操作進
出?
@ – 練習 佇列 – 練習 佇列
當作列隊 (queue): <先入先出 > 用哪兩個操作
進出?
@DictionariesDictionaries
格式 : {key:value, key:value……}
i = {1:’1’, ‘2’:2, (3,): (3,), 4:[4]}
j = {}
K = dict()
@DictionariesDictionaries的操作的操作
透過 key取得 value
隸屬成員 (has_key('key'))
取得 dict物件的所有 key值 (keys())
取得 dict物件的所有 value值 (values())
重組 dict 物件 -> 一個 tuple集合的 list
取得 dict中物件數目 (key+value = 1)
藉由 key修改 dict中的物件值
藉由 dict物件修改 dict中的物件值
藉由 key刪除 dict中的物件
清除 dict中所有的成員
複製 dict物件
setdefault方法的使用
@DictionariesDictionaries –的操作 –的操作 透過 透過 keykey取得取得 valuevalue
@DictionariesDictionaries –的操作 –的操作 透過 透過 keykey取得取得 valuevalue
@DictionariesDictionaries –的操作 –的操作 隸屬成員 隸屬成員
@DictionariesDictionaries –的操作 –的操作 取得 取得dictdict物件的所有物件的所有 keykey值值
@DictionariesDictionaries –的操作 –的操作 取得 取得 dictdict物物件的所有件的所有 valuevalue值值
@DictionariesDictionaries –的操作 –的操作 重組 重組 dictdict 物件 物件 -> -> 一個一個 tupletuple集合的集合的 listlist
@DictionariesDictionaries –的操作 –的操作 取得 取得 dictdict中物件數目中物件數目
@DictionariesDictionaries –的操作 –的操作 藉由 藉由 keykey修修改改 dictdict中的物件值中的物件值
@DictionariesDictionaries –的操作 –的操作 藉由 藉由 dictdict物件修改物件修改 dictdict中的物件值中的物件值
@DictionariesDictionaries –的操作 –的操作 藉由 藉由keykey刪除刪除 dictdict中的物件中的物件
@DictionariesDictionaries –的操作 –的操作 藉由 藉由keykey刪除刪除 dictdict中的物件中的物件
@DictionariesDictionaries –的操作 –的操作 藉由 藉由keykey刪除刪除 dictdict中的物件中的物件
@DictionariesDictionaries –的操作 –的操作 刪除 刪除 dictdict中的物件中的物件
@DictionariesDictionaries –的操作 –的操作 清除清除 dictdict中所有的成員中所有的成員
@DictionariesDictionaries – 的操作 複製 – 的操作 複製 dictdict物物件件
@TupleTuple
格式 : (obj,obj……), obj1, obj2, obj3
i = (1,’2’,”3”,(4,5,6),[7,8])
m = 1, ‘2’, “3”, (4,5), [7,8]
u = (obj,)
j = ()
k = tuple(sequence)• h = tuple((1,’3’,”323”))• H = tuple([1,2, 3, 4])
• H = tuple(‘abcdefg’)
@TupleTuple的操作的操作
取得索引位置物件
tuple切割
取得 tuple大小
tuple相加
重複 tuple ( t2*3 , [t2]*3 )
tuple疊代
隸屬成員 (in)
多個函式回傳值 , 回傳的資料型態為 Tuple
@TupleTuple – 的操作 取得索引位置物件 – 的操作 取得索引位置物件
@TupleTuple – 的操作 – 的操作 tupletuple切割切割
@TupleTuple – 的操作 取得 – 的操作 取得 tupletuple大小大小
@TupleTuple – 的操作 – 的操作 tupletuple相加相加
@TupleTuple – 的操作 重複 – 的操作 重複 tuple tuple
@TupleTuple – 的操作 – 的操作 tupletuple疊代疊代
@TupleTuple – 的操作 隸屬成員 – 的操作 隸屬成員
@TupleTuple – 的操作 多個函式回傳值 – 的操作 多個函式回傳值
@FilesFiles的操作的操作
開啟檔案 (唯讀 /唯寫 )
讀取整個檔案
讀取 N個 bytes
讀取下一行
將檔案中每行資料存成一個 list
寫入字串到檔案
將每行的資料 (list)
寫到檔案內
關閉檔案
@FilesFiles的操作的操作
@FilesFiles的操作的操作
@FilesFiles的操作的操作
@FilesFiles的操作的操作
@FilesFiles的操作的操作
@FilesFiles的操作的操作
@注意要項注意要項
只有 list , dictionary, 可
以對內部的物件進行操作 , file
則要依據開啟的模式而定
物件 真值表
"String" TR U E
"" FA LSE
[] FA LSE
{} FA LSE
1 TR U E
0.0 FA LSE
@if if 判斷式判斷式
if statement:
block….
block…
elif statement:
block…
block…
else:
block
@while while 判斷式判斷式
while statement:
block…
block…
else:
block…
block…
@while while – 判斷式 疊代 – 判斷式 疊代
@while while – 判斷式 判斷是否為質數 – 判斷式 判斷是否為質數
@for for 判斷式判斷式
for <target> in <sequence>:
block…
block…
else:
block…
block…
@for for – 判斷式 疊代 – 判斷式 疊代 (range)(range)
@for for – 判斷式 求得範圍 – 判斷式 求得範圍 NN內的質數內的質數
@for for – 判斷式 – 判斷式 looploop一個一個 listlist物件物件
@for for – 判斷式 – 判斷式 looploop一個一個 dictdict物件物件
@for for – 判斷式 – 判斷式 enumerateenumerate的使用的使用
@for for – 判斷式 – 判斷式 zipzip的使用的使用
@其他流程控制描述元其他流程控制描述元
break
continue
pass
沒有 C 語言的 goto 描述元
@
Chapter 4 程式撰寫的一些特程式撰寫的一些特性性
@比較真比較真 //假時的準則假時的準則
@比較真比較真 //假時的準則假時的準則
@函式的類型函式的類型
具名函式
不具名函式
@ – 具名函式 基本格式 – 具名函式 基本格式
def func_name(arg1, arg2, arg3….argN):
statement
.
.
[return obj,[obj]]
@ – 具名函式 基本格式 – 具名函式 基本格式
@ – 具名函式 基本格式 – 具名函式 基本格式
@ – 不具名函式 基本格式 – 不具名函式 基本格式
lambda arg1, arg2..... : expresion ......
using expression , but not statement
@Why lambda?Why lambda?
簡單的運算
可能只用到一次
@ – 不具名函式 基本格式 – 不具名函式 基本格式
@ – 不具名函式 基本格式 – 不具名函式 基本格式
@函式的傳入值函式的傳入值
func(arg1)
func(arg1 = value)
@ 函式傳入值 函式傳入值 -- -- 接受的類型接受的類型
一般值
指定參數名稱的預設值
不定參數 � 將不定參數的集合組成一個 tuple物
件
未知的參數名稱與其對應值 存成 dict物件
@LGB RulesLGB Rules
Local Global Built-in
@LGB RulesLGB Rules
@LGB RulesLGB Rules
@LGB RulesLGB Rules
@LGB RulesLGB Rules
@LGB RulesLGB Rules
@函式的傳值函式的傳值 //傳參考傳參考
Python對於物件都是傳參考
list , dict物件可以傳值
@函式的傳值函式的傳值 //傳參考傳參考
@函式的傳值函式的傳值 //傳參考傳參考
@函式的傳值函式的傳值 //傳參考傳參考
@函式的傳值函式的傳值 //傳參考傳參考
@函式的傳值函式的傳值 //傳參考傳參考
@函式的傳值函式的傳值 //傳參考傳參考
@函式的傳值函式的傳值 //傳參考傳參考
@函式的傳值函式的傳值 //傳參考傳參考
@ – 函式回傳值 非必要選項 – 函式回傳值 非必要選項
若無回傳值 , 則自動回傳 None
回傳值可以是多回傳值
回傳 lambda 函式物件
@ – 函式回傳值 無回傳值 – 函式回傳值 無回傳值
@ – 函式回傳值 – 函式回傳值 lambdalambda函式物件函式物件
@ 函式回傳值 函式回傳值 -- -- 多回傳值多回傳值
@ 函式回傳值 函式回傳值 -- -- 多回傳值多回傳值
@apply built-in functionapply built-in function的應用的應用
執行某些函式 , 事先不曉得他的參數
第一個參數為函式物件
第二個參數是一個由參數的集合組成的 tuple物
件
@apply built-in functionapply built-in function的應用的應用
@apply built-in functionapply built-in function的應用的應用
@apply built-in functionapply built-in function的應用的應用
@apply built-in functionapply built-in function的應用的應用
@apply built-in functionapply built-in function的應用的應用
@函式也是物件函式也是物件
如何間接呼叫函式
如何建立一個 list存放對應的 func與 arg, 並且
依序執行
@ – 間接呼叫函式 物件參照 – 間接呼叫函式 物件參照
@ – 間接呼叫函式 函式呼叫函式 – 間接呼叫函式 函式呼叫函式
@一個含有一個含有 funcfunc與與 argarg的的 listlist的執行工的執行工作作
@依據判斷式產生不同的函式內容依據判斷式產生不同的函式內容
@依據判斷式產生不同的函式內容依據判斷式產生不同的函式內容
@ – 函式初始值 導致的錯誤 – 函式初始值 導致的錯誤
@ – 函式初始值 導致的錯誤 – 函式初始值 導致的錯誤 è� 解決 解決
方法方法
@模組的搜尋路徑模組的搜尋路徑
系統環境變數 PYTHONPATH
透過 sys.path
@ 基本模組 基本模組 -- -- 建立建立
建立一個以模組名稱命名的 .py檔案
新增屬性 , 函式 , 模組 , 物件到此檔案中
@ 基本模組 基本模組 -- -- 匯入匯入
import <module-name>
第一次匯入的同時會去執行該 .py檔案
匯入之後 , 該模組視為目前執行環境的物件
匯入後 , 模組的所有變數 , 函式 , 物件的變數範
圍相對
於目前的環境 global
@ –基本模組 存取變數、函式呼叫 –基本模組 存取變數、函式呼叫
ModuleName.Var1
ModuleName.func1(arg1, arg2)
@ – 匯入模組 基本格式 – 匯入模組 基本格式
import <module-name>
from <module-name> import <obj, obj…obj>
import <module-name> as <new-name>
from <module-name> import <obj> as <new-name>
from <module-name> import *
_6_2 Python Module
@ – 匯入模組 – 匯入模組 import <module-name>import <module-name>
@ – 匯入模組 – 匯入模組
from <module-name> import <obj, obj, from <module-name> import <obj, obj,
…obj>…obj>
@ – 匯入模組 – 匯入模組
import <module-name> as import <module-name> as
<new-name><new-name>
@ – 匯入模組 – 匯入模組
from <module-name> import <obj> as <new-from <module-name> import <obj> as <new-
name>name>
@ – 匯入模組 – 匯入模組 from <module-name> import *from <module-name> import *
@ – 匯入模組 – 匯入模組 from from
複製一份到目前的命名空間
跟函式一樣 , 傳參考
既然跟函式一樣 , 那麼哪個物件是傳值而非傳參
考
@ – 匯入模組 – 匯入模組 from from
@ – 匯入模組 如果要解決傳值的問題 – 匯入模組 如果要解決傳值的問題
@ – 匯入模組 – 匯入模組 from from 實際上做了什麼實際上做了什麼
@重複匯入相同的模組重複匯入相同的模組
@匯入的模組與其他模組相關物件衝突匯入的模組與其他模組相關物件衝突
最後匯入的模組 (物件 )會覆蓋前面匯入的模組
(物件 )
@ 模組重新匯入 模組重新匯入 -- reload-- reload
Python Built-in tool
時機 : 模組被修改後必須重新讀取
@ – 模組重新匯入 存在的問題 – 模組重新匯入 存在的問題
http://www.mail-archive.com/kragen-
[email protected]/msg00010.html
@副檔名為副檔名為 pypy的執行檔的執行檔
@將將 .py.py執行檔當作模組匯入執行檔當作模組匯入
@模組與執行檔共存模組與執行檔共存
模組匯入的特性
內建 __name__ 變數 , 自動被指定為
‘ __main__’
@模組與執行檔共存模組與執行檔共存
模組匯入的特性
內建 __name__ 變數 , 自動被指定為
‘ __main__’
@模組與執行檔共存模組與執行檔共存
@將將 .py.py執行檔當作模組匯入執行檔當作模組匯入
@取得模組所有物件的方法取得模組所有物件的方法
@取得模組所有物件的方法取得模組所有物件的方法
@動態匯入模組的方法動態匯入模組的方法
exec方法
built-in tool __import__(‘module-name’)