mymodule.py:
# -*- coding: utf-8 -*-<br />import sys #匯入整個string模組</p><p>print sys.path<br />'''<br />如果使用 from import sys<br />則本頁可以直接使用stdout.write()<br />否則需要sys.stdout.write()<br />'''<br />def Main():<br /> sys.stdout.write("hello world! /n")<br />if __name__ == "__main__":<br /> Main()</p><p>import string #格式:模組名<br />import sys as ssss #格式:import 模組名稱 as 模組新名<br />print string.capitalize("oooooo")</p><p>from math import sqrt #格式: from 模組名稱 import 函數名稱<br />print sqrt(9)<br />'''<br />變數的類型是動態<br />'''<br />i=1<br />print i,type(i),id(i)<br />i=10000000000<br />print i,type(i),id(i)<br />i=1.1<br />print i,type(i),id(i)</p><p>#Python 既是一種動態類型語言,同時也是一種強型別的語言<br />i=10;j='ss'<br />#print i+j#錯誤方式<br />print str(i)+j</p><p>#類型<br />#Null 物件None<br />#布爾類型 True和False #注意首字母要大寫<br />#0、Null 字元串''、空元組()、表[]、空字典{}都被當做False,其他對象都為True<br />if 0:<br /> print 'False'<br />else:<br /> print 'True'</p><p>#數實值型別有四種:長整型、整型、浮點型、複數類型------------------------------<br />#超過整型的數會自動調整為長整型<br />#只有64位的雙精確度的浮點型float<br />#複數:z.real . z.imag<br />#數實值型別計算強制提升原則:int,long,float,complex<br /> #關於貨幣計算,無decimal類型,但有decimal模組</p><p>#字串可以用單引號,雙引號,三引號來定義<br />#字串有兩種類型,str單位元組字元序列,unicode 雙位元組字元序列<br />#關於換行,使用逸出字元/n可以換,直接使用語句換行也可以達到目的<br />str = '/n my work /n'<br />str1 = 'is very important!'<br />str2 = '''oh,my god!<br />really? I don't believe!'''<br />print str,str1,str2</p><p>#unicode字元可以如下定義<br />str3 = u'我的工作'<br />print str3<br />#------------------------------------------------------<br />#當使用 utf-8 編碼時,非 unicode 字元中一個漢字的長度是 3,而使用 gb2312 時是 2<br />ustr = u'我'<br />ostr = '我'<br />print len(ustr),len(ostr)<br />#輸出 1 3<br /># -*- coding: gb2312 -*-<br />ustr = u'我'<br />ostr = '我'<br />print len(ustr),len(ostr)<br />#輸出 1 2</p><p># -*- coding: utf-8 -*-<br />str1 = u'我是派森'<br />print str1[2:4]<br />#輸出 '派森'</p><p>#--------------------------------------------------------<br />#列表list類似C#的ArrayList,順序儲存<br />array = [1,2,3]<br />print array[0]<br />print array<br />#Python 的列表中可以混合使用不同類型的資料,像['a', 2, 3]這樣,這點像java的ArrayList</p><p>'''<br />切片指的是抽取序列的<br />一部分,其形式為:list[start:end:step]。其抽取規則是:從 start 開始,每次加上 step,<br />直到 end 為止。預設的 step 為 1;當 start 沒有給出時,預設從 list 的第一個元素開始;<br />當 end=-1 時表示 list 的最後一個元素,依此類推。<br />'''<br />test = ['never', 1, 2, 'yes', 1, 'no', 'maybe']<br />print test[0:3] #包括test[0],不包括test[3]<br />print test[0:6:2]#步長為2,即間隔1個</p><p>#元組與列表相似,但速度更快,不可變序列----------------------------------<br />test = [0]<br />print type(test)<br />test = [0,]<br />print type(test)<br />test = (0,) #元組可以這樣定義<br />print type(test)<br />test = (0) #但不能這樣定義,Python 會認為它是一個括號運算式<br />print type(test)<br />test = 0, #也可以省略括弧,但要注意與 C 的逗號運算式不同<br />print type(test) #輸出<type 'tuple'></p><p>#利用元組的這個特性,可以簡化 Python 變數的初始化過程<br />x,y,z=1,2,3<br />a = 1<br />b = 2<br />a,b = b,a #結果是a、b的值交換了<br />print a,b</p><p>#也可以利用C語言的交換法 tmp = a; a = b; b = tmp 進行a、b位置和值的交換</p><p>#python的set是無序的不重複的元素集合----------------------------------------<br />s = set(['a','b','c']) #python3以後是 s={'a','b','c'}<br />#set中傳入重複的元素會自動合并<br />a = [1,2,3,4,5,6,3,2,4]<br />b = set(a)<br />print b</p><p>#類似數學當中的集合概念,可以進行交,並,差,補等邏輯運算</p><p>a = ['33','22','11']<br />b = ['33','44','55']<br />c = set(a)&set(b) #找出兩個list裡面相同的元素(集合求交集)<br />print c </p><p>#python裡的雜湊表就是字典了dict-------------------------------------<br />#它包括關鍵字(key)和關鍵字對應的值(value)<br />#dictionary = {key:value},當有多個索引值對時,使用逗號進行分割。</p><p>#算數運算 + - * / % 還有求幕**和取整//--------------------------------<br />#python沒有++和--運算,僅使用 x += 3 或 x = x + 3<br />#Python 用關鍵字 and、or、not 替代 && , || , !<br />#在 Python 中,and 和 or 所執行的邏輯運算並不返回布爾值,而是返回它們實際進行比較的值之一<br />print 'a' and 'b'<br />print '' and 'b'<br />#關係運算與其他語言相通,共6種==,!=,>=,<=,<,><br />#三元運算<br /># -*- coding: utf-8 -*-<br />x = 4<br />print '偶數' if x % 2 == 0 else '奇數' #亂碼?</p><p>#條件陳述式 if,elif,else ---------------------------------<br />#如果一個流程式控制制分支下不做任何事情,記得寫一句 pass 語句,不然 Python 會報錯<br />if 0:<br /> pass</p><p># 使用 if 替代<br />if x =='1':<br /> print 'one'<br />elif x=='2':<br /> print 'two'<br />else:<br /> print 'nothing!'</p><p># 使用 dict<br />numtrans = {<br /> 1: 'one',<br /> 2: 'two',<br />}<br />try:<br /> print numtrans[x]<br />except KeyError:<br /> print 'nothing1'</p><p># 也可以在分支中使用方法(函數)<br />def print_one():<br /> print 'one'<br />def print_two():<br /> print 'two'<br />numtrans = {<br /> 1:print_one,<br /> 2:print_two,<br />}<br />try:<br /> print numtrans[x]() #注意名字+括弧就可以執行方法了,這個實際上很牛 X 的<br />except KeyError:<br /> print 'nothing2'</p><p>#python 只支援while 和for 迴圈--------------------------------------------<br />for i in [1,2,3,4,5]:<br /> print i<br />'''<br />for i range(10): s#等同xrange(10)相當於for(int i = 0; i < 10; i++)<br /> print i<br />'''<br />#xrange 返回的是一個不可改變的XRangeType 對象。<br />#這是一個迭代器,也就是只有用到那個數時才臨時通過計算提供值。<br />#當 j 值很大時,xrange 能更有效地利用記憶體</p><p>#Python 中的 while 和 for 迴圈中支援 break 和 continue 語句。<br />#break 語句用於立刻中止迴圈,continue 語句用於直接 進入下一次迴圈(忽略當前迴圈的剩餘語句)。</p><p>#Python 中的迴圈還支援 else 語句,它只在迴圈正常完成後運行<br />#或者在迴圈條件不成立時立即運行(僅 while 迴圈)<br />#或者迭代序列為空白時立即執行(僅for迴圈)<br />#如果迴圈當中使用了break退出,則else忽略<br />#while-else<br />while i<10:<br /> i = i+1<br />else:<br /> print 'done'</p><p>s = ['cc','bb','aa']<br />#for-else<br />for k in s:<br /> if k=='aa':<br /> print 'got it'<br /> break<br />else:<br /> print 'not found'</p><p>#異常------------------------------------------------------<br /># try/except/finally/raise 結構 對應java和C#的<br /># try/catch/finally/throw<br />'''<br />try:<br /> f = open('file.txt')<br /> s = f.readline()<br />except IOError,(errno,strerror):<br /> print "I/O error(%s):" %(errno,strerror)<br />except ValueError:<br /> print "could not convert data into Integer."<br />except:<br /> print "Unexpected error:", sys,exc_info()[0]<br /> raise<br />finally:<br /> f.close()<br />'''<br />#列表內涵------------------------------------------------------<br />#列表內涵的一個著名例子是產生九九乘法表:<br />s = [(x, y, x*y) for x in range(1, 10) for y in range(1,10) if x>=y]<br />print s<br />#列表內涵可分為三部分,最左邊是產生每個元素的運算式<br />#中間是for迭代過程,最右邊是可以設定if判斷的過濾條件<br />s = [x for x in range(0,10) if x%2 ==0]<br />print s</p><p>#動態運算式 數學計算eval——------------------------------------------<br />str = '1+2'<br />print eval(str)<br />print str</p><p>#將字串當成代碼來執行---exec<br />exec 'a=100'<br />print a</p><p>#函數我來了-----------------------------------------------------------<br />#定義沒有參數,也無傳回值的函數<br />def F1():<br /> print 'hello kitty'<br />F1()<br />#定義有參數和一個傳回值的函數<br />def F2(x,y):<br /> a = x+y<br /> return a<br />print F2(3,4)<br />#定義有多個傳回值的函數,用逗號分隔不同的傳回值,返回結果是一個元組<br />def F3(x,y):<br /> a = x/y<br /> b = x%y<br /> return a,b<br />print F3(6,4)<br />#參數類型沒有約束,支援泛型程式設計,可以輸入任意類型的參數資料</p><p>#python的參數提供了四種類型<br />#1. f(arg1,arg2,...)<br />#2. f(arg1=1,arg2=2,..argn=n) 給參數提供了預設值,關鍵參數<br />#3. f(*arg) arg 代表了一個tuple,類似參數列表,接收多個參數<br />#4. f(**arg) 傳入的參數在函數內部儲存在一個叫arg的dict中,掉用的時候使用f(a1=v1,a2=v2)的形式</p><p>def parrot(voltage,state='a stiff',action='voom',type='norwegian blue'):<br /> print "--this parrot wouldn't",action<br /> print "if you put",voltage,"volts through it"<br /> print "--Lovely plumage,the",type<br /> print "--it's", state<br />#正確調用方式<br />parrot(1000)<br />parrot(action='vooom',voltage=10000)#關鍵字,預設值,次序可變<br />parrot('a thousand', state='pushing up the daisies')<br />parrot('a million','dereft of life','jump')#位置參數,預設值</p><p>#以下是錯誤類型<br />#parrot()#非預設值的參數沒有提供<br />#parrot(volage=5,'dead')#關鍵參數後面又出現非關鍵字參數<br />#parrot(110, voltage=220) # 參數值重複提供<br />#parrot(actor='John Cleese') # 未知關鍵字 </p><p>#字典參數-------------------------------------------------</p><p>def cheeshop(**keywords):<br /> for i in keywords.keys():<br /> print i,':',keywords[i]</p><p>cheeshop(client='johon',shopkeeper='paliin',skecth='skectch')</p><p>'''<br /> * 通過位置分配非關鍵字參數<br /> * 通過匹配變數名分配關鍵字參數<br /> * 其他額外的非關鍵字參數分配到*name 元組中<br /> * 其他額外的關鍵字參數分配到**name 的字典中<br /> * 用預設值分配給在調用時未得到分配的參數<br />'''</p><p>#匿名函式是匿名函數,用來定義沒有名字的函數對象。<br />#在 Python 中,lambda 只能包含運算式:lambda arg1, arg2 ... : expression。<br />#lambda 關鍵字後就是逗號分隔的形參列表,冒號後面是一個運算式,運算式求值的結果為 lambda 的傳回值。</p><p>n=2<br />print n**4</p><p>#進階函數--------------------------------------------------------------------<br />#map映射,也就是將演算法施於容器中的每個元素,將傳回值合并為一個新的容器</p><p>def map_func(s):<br /> return s + 1<br />s = [1,2,3,4,5]<br />map1 = map(map_func,s)<br />print map1</p><p>#filter過濾,將演算法施於容器中的每個元素,將傳回值為真的元素合并為一個新的容器。<br />def filter_func(s):<br /> if s % 2 == 0:<br /> return True<br /> else:<br /> return False<br />filter1 = filter(filter_func, s) #得到s中能被 2 整除的<br />print filter1</p><p>#reduce 合并,將演算法(可能攜帶一個初值)依次施於容器中的每個元素,將傳回值作為下<br />#一步計算的參數之一,與下一個元素再計算,直至最終獲得一個總的結果。<br />def reduce_func(s, lis):<br /> return s + lis<br />reduce1 = reduce(reduce_func, s)<br />print reduce1 </p><p>#類 class-----------------------------------------------------------------------</p><p>class A:<br /> pass<br />#相當於class A{}<br />#類的執行個體化<br />a = A() #將類當做一個函數調用<br />#python是動態語言,所以你可以不在類定義中新增成員變數,可以在運行時動態添加他們<br />class A:pass<br />a = A()<br />a.x = 1<br />print a.x<br />#方法好,但最好是在類的初始化函數裡面就聲明並初始化</p><p>#初始化函數,java有,C#也有<br />#python提供的是:__init__ 類在執行個體化時會首先調用這個函數,我們可以重寫這個函數來完成一些開始工作<br />class A:<br /> def __init__(self):<br /> self.x = 3<br />a = A()<br />print a.x</p><p>class A:<br /> def __init__(self,x):<br /> self.x = x<br />a = A(1)<br />print a.x</p><p>#靜態變數-----------------------------------------------------------------<br />class A:<br /> y=2<br />print A.y</p><p>#對象可以直接存取類的靜態成員添加了一個非靜態成員 y<br />#但對象不能為類的靜態成員賦值<br />b = A()<br />b.y = 3888<br />print b.y<br />print A.y<br />#b.y=3 相當於為執行個體 a 添加了一個非靜態成員<br />#而類 A 的靜態成員A.y 沒有發生改變,即使同名也不會衝突,因為它們不在同一個命名空間內</p><p>#私人成員------------------------------------------------------------------<br />#python並沒有嚴格意義上的私人成員,這是建議加底線,不是嚴格意義上封裝<br />class A:<br /> def __init__(self):<br /> self.__x = 999<br />a = A()<br />#錯誤 print a.__x<br />print a._A__x #!!!!</p><p>#類方法-----------------------------------------------------------------<br />#在類中定義的常規方法的第一個參數總是該類的執行個體,即 self。這點要非常注意<br />class A:<br /> def prt(self):<br /> print "my name is A"<br /> def reprt(self):<br /> #prt(self)#錯誤方式<br /> A.prt(self)#正確,內部方法中引用類的另一個方法必須使用類名加方法名!<br />a = A()<br />a.prt()<br />a.reprt()</p><p>#類的靜態方法------------------------------------------------<br />#java和C#用static,而python用@staticmethod<br />class A:<br /> @staticmethod<br /> def prt():<br /> print "my name is Liao"<br />A.prt()</p><p>#類不支援方法重載,前面定義的方法會被後面定義的方法所覆蓋</p><p>#類的繼承----------------------------------------------------<br />#單繼承--用類名後加括弧的方式實現繼承<br />class A:<br /> x=111<br /> y=333<br />class B(A):<br /> x=2<br />print B.x,B.y</p><p>#如果子類中直接調用父類的方法,java中可以直接使用this.<br />#BaseClass.method(self,arguments)</p><p>#pathon支援多繼承,java和C#中則用介面實現<br />#可以 class B(A,D,E)這樣來繼承,如果有重名屬性時則有搜尋順序</p><p>#介面和抽象類別----------------------------------------------------------</p><p>#在 Python 這類動態程式設計語言中,我們經常需要檢查一個類、對象或模組,以確定它是什麼、它知道什麼或它能做什麼。<br />#在 Python 中,我們把這類功能叫做自省(Introspection)<br />'''<br /> * 對象的名稱是什麼(__name__)?<br /> * 這是哪種類型的對象(__class__)?<br /> * 對象知道些什麼(__doc__)?<br /> * 對象能做些什麼(__dict__)?<br /> * 對象(的類)繼承自誰(__bases__)?<br /> * 它在哪一個模組中(__module__)?<br />'''<br />print A.__module__<br />#print A.__class__<br />print A.__name__<br />print A.__doc__<br />print A.__dict__<br />print B.__bases__</p><p>#Python 提供了很多有用的自省函數,協助我們找到對象資訊<br />'''<br /> * id() 返回對象唯一的標識符<br /> * repr() 返回對象的標準字串運算式<br /> * type() 返回對象的類型<br /> * dir() 返回對象的屬性名稱列表<br /> * vars() 返回一個字典,它包含了Object Storage Service於其__dict__中的屬性(鍵)及值<br /> * hasattr() 判斷一個對象是否有一個特定的屬性<br /> * getattr() 取得對象的屬性<br /> * setattr() 賦值給對象的屬性<br /> * delattr() 從一個對象中刪除屬性<br /> * callable() 測試對象的可調用性<br /> * issubclass() 判斷一個類是另一個類的子類或子孫類<br /> * isinstance() 判斷一個對象是否是另一個給定類的執行個體<br /> * super() 返回相應的父類<br />'''<br />a = A()<br />#print a.id() #??<br />#print a.id()<br />import sys<br />print sys.path<br />import os as system</p><p>#建立包package--------------------------------------------<br />#1.建立一個檔案夾,名字為name<br />#2.在這個目錄下建立__init__.py的檔案<br />#3.根據需要存放指令檔<br />#只要目錄下存在__init__.py就表明此目錄作為一個package包處理<br /># 這個初始檔案可以是空檔案,也可以設定一些常量,如__all__ = ["m1", "m2", "m3"]<br /># 表明import * 會匯入這個三個檔案模組,沒定義則不保證會匯入,除非impot詳細寫明模組名字</p><p>