实用python技巧
http://blog.sina.com.cn/s/blog_7170209501019ee7.html
1.Python函數定義時不需要指定返回值數據類型。如果有return語句,則返回指定的值;否則返回空值None
2.Java,C等是靜態類型語言,在編譯期間就確定數據類型;Python是動態類型語言,在運行期間再確定數據類型,即一個變量類型的確定是在第一次對其進行賦值的時候
3.Python的搜索路徑是sys.path.其中path是一個list.可以通過sys.path.append方法進行添加,但這種方法有生命周期
4.所有Python模塊都有一個__name__屬性,但其值會改變。當import一個模塊的時候,其__name__屬性是模塊的文件名,不帶路徑或文件擴展名;當運行一個模塊的時候__name__的值則變為__main__
5.Dictionary的key大小寫敏感,兩個常用刪除方法:clear,del
6.List的負數索引:list[-n]=list[length(List)-n]。list[:]是原list的一個拷貝.list.pop方法刪除最后一個元素,然后返回該元素本身。list可以直接使用“+”連接。
7.字符串格式化時待插入的變量必須放入一個tuple中,如果只有一個變量,則tuple中該唯一變量后邊必須添加逗號。如:print "Users connected: %d" % (userCount, )
8.dictionary的keys和values方法分別返回key,value的list,items方法返回形如(key,value)的tuple的list。
9.join智能用于元素師字符串的list.
10.type函數返回任意對象的數據類型.str函數將數據強制轉換為字符串.dir函數返回任意對象的屬性和方法列表,注意返回的是字符串形式的方法列表,而不是方法本身.callable函數接受任意對象作為參數,如果參數對象可調用,返回True,否則返回False.內置函數都位于__builtin__模塊中,可以認為Python在啟動時自動執行了from __builtin__ import *語句
11.getattr可以獲得對象引用,如getattr({},"clear"),也可以作用于模塊,功能非常強大,常被用作分發者
12.不帶參數的split函數按照空白進行分割
13.Python中可以使用==None或者is None比較,但is None更快
14.String的ljust函數用空格填充字符串以符合指定的長度,如果指定長度小于字符串本身,則不做任何變化
15.__init__通常是一個類的第一個方法,該方法在類的實例被創建后立即執行,類似于Java中類的構造函數,但與構造函數不同,因為在調用該方法的時候類的實例實際上已經構造出來了
16.每個類方法的第一個參數,包括__init__,都是指向類的當前實例的引用,這個參數被稱為self,如:def __init__(self,argments..).當定義自己的方法時,必須明確的將self作為每個方法的第一個參數列出。當從你的類中調用一個父類方法時,也必須包括self.
17.創建實例時,我們所傳遞的參數被正確的發送給__init__方法
18.Python中,創建類的實例只要調用一個類,仿佛它是一個函數就行了,不像Java需要一個new
19.Python的數據屬性,類似于Java中的實例變量,在__init__方法中給出.下例中,data即為一個數據屬性.外部引用直接instance.data,內部引用為self.data.
???class UserDict:?
??????def __init__(self, dict=None):?
??????self.data = {}?
??????if dict is not None: self.update(dict)?
而Python中類屬性,則類似于Java中靜態變量,緊跟在class后面,如下所示,tagDataMap即為類屬性.
class MP3FileInfo(FileInfo):
????"store ID3v1.0 MP3 tags"
????tagDataMap = {"title" : ( 3, 33, stripnulls),?
????"artist" : ( 33, 63, stripnulls),
????"album" : ( 63, 93, stripnulls),
????"year" : ( 93, 97, stripnulls),
????"comment" : ( 97, 126, stripnulls),
????"genre" : (127, 128, ord)}
類屬性既可以通過直接對類的引用,也可以通過對類的任意實例的引用來使用.
20.Python沒有任何形式的函數重載,即方法名相同,但參數類型或者個數不同.每個類只有一個同名的方法,例如__init__方法,如果一個子類擁有__init__方法,它總是覆蓋父類的__init__方法,甚至子類使用不同的參數列表。后一個同名函數總是覆蓋前一個同名函數。
21.最好總是在__init__方法中為一個實例的所有數據屬性賦予一個初始值,(相當于定義了成員變量)
22.Python具有專有類方法,如dictionary里的__getitem__和__setitem__方法,用戶不需要顯式調用這些方法.
23.__repr__在調用repr(instance)時被調用,repr是內置函數,它返回一個對象的字符串表示,實際在IDE窗口中輸入變量名并按ENTER鍵,IDE則調用了repr函數來顯示變量名
24.__cmp__在比較類實例時被調用。通常可以通過調用==來比較任意兩個Python對象,不只是類實例。對于類實例,我們可以自己編寫比較邏輯,自己定義__cmp__方法,然后可以使用==來比較我們的類,Python會替我們調用__cmp__專用方法
25.__len__在調用len(instance)時被調用
26.Java中使用str1==str2來確定兩個字符串是否指向同一物理內存,這叫對象同一性,在Python中寫為str1 is str2.而Java中比較字符串相等使用str1.equals(str2),Python中使用 str1==str2.
27.專用方法意味著任何類可以像字典一樣保存鍵值對,只要定義__setitem__方法。任何類可以表現得像一個序列,只要定義__getitem__方法。任何定義了__cmp__方法的類可以用方法可以用==進行比較。并且如果你的類表現為擁有似長度東西,不要定義 GetLength 方法,而定義 __len__ 方法,并使用 len(instance)。
28.如果一個Python函數,類方法,或屬性的名字以兩個下劃線__開頭(但不結尾),它是私有的
29.f=open(arg)返回文件對象f,其常用的屬性有mode和name等.常用方法有tell,seek,read,write等
30.os.environ是你在系統上定義的環境變量的dictionary.sys.modules是所導入的模塊的dicionary,sys.modules['a']返回對模塊a本身的一個引用
31.__module__是Python類的內置屬性,是這個類的模塊名字(即字符串表示)
32.os.path有幾個操作文件和目錄的函數。os.path.join函數把一個或多個路徑名連接成一個路徑名,expanduser("~")函數對使用~來表示用戶根目錄的路徑進行擴展。split函數對全路徑名進行分割,返回路徑和文件名的tuple.splitext對文件名進行分割,返回文件名和擴展名的tuple。os.listdir(path)函數接受路徑名,返回該路徑下內容的list,包括文件和文件夾。os.path的isfile函數接受路徑名,如果該路徑表示文件返回1,否則返回0。os.path相應也具有isdir函數。
33.glob模塊,接受一個通配符并返回與之匹配的文件或目錄的完整路徑。如:glob.glob('c:\\music\\_singles\\s*.mp3'),glob.glob('c:\\music\\*\\*.mp3')
34.處理HTML,Python的sgmllib.py模塊中包含一個SGMLParser類。使用它進行HTML解析需要對其進行子類化。
????parser=urllister.URLister()
????parser.feed(urllib.open("http://google.com").read())
????parser.close()
上例中parser需要close,其原因是feed方法不保證對傳給它的所有HTML進行處理,它可能會對其進行緩沖處理,等待接受更多的內容。只要沒有更多內容,就應該調用close來刷新緩沖區,并且強制所有內容被強制處理
35.內置函數locals和globals,分別提供基于dictionary的訪問局部和全局變量的方式。locals()是只讀的,globals()不是
36.字符串格式化有兩種:值列入一個tuple中,按照順序插入到字符串中每個格式化標記的地方;另一個是使用基于dictionary的字符串格式化。
????params = {"server":"mpilgrim", "database":"master", "uid":"sa", "pwd":"secret"}
????"%(pwd)s is not a good password for %(uid)s" % params?
使用內置的locals函數是是最普通的基于dictionary的字符串格式化應用,即可以在字符串中使用局部變量的名字,且每個變量都會被它的值所替換.
????def handle_comment(self, text):
???????self.pieces.append("" % locals())
37.字符串的capitalize方法將第一個字母變為大寫,將其他字母變成小寫
38.Python的包其實就是含有__init__.py的目錄,這個文件定義了包的屬性和方法。當你將一個包作為模塊導入,實際上導入了它的__init__.py文件
39.使用minidom解析XML文件。形如:
???
?????
0
?????
1
???
其中ref節點具有5個子節點:2個Element元素,和3個Text元素。這三個Text元素是由于
之前和之后的硬回車造成的
40.使用minidom,Text節點的.data屬性提供文本節點真正代表的字符串。上例中pNode為‘
0
’節點,則pNode.firstChild.data的值為:u'0'41.s=u'0'中u的含義為unicode.以另一種編碼方式打印s:print s.encode('latin-1')
42.搜索xml元素一個有用的方法:getElementsByTagName.
43.每個Element對象都有一個attributes屬性,它是一個NamedNodeMap對象,行為類似Dictionary.因此可以使用attributes.keys()和attributes.values()獲得屬性和值的列表。其中屬性的值是Attr類型的對象,Attr繼承自Node.
44.minidom有一個parseString方法,接受字符串形式的XML文檔進行解析,解析字符串形式XML的另一個方法是把字符串留轉換為類文件源,可以使用StringIO.StringIO(string)實現
45.print函數實際做的事情:在你打印的字符串的后面加一個硬回車,然后調用sys.stdout.write函數
46.>>> print >> sys.stderr, 'enteringfunction' print語句的快捷法可以用于寫入任何打開文件(或者是類文件對象)。在這里,你可以將單個print語句重定向到stderr而且不用影響后面的print語句。
47.random.choice函數接受一個任意數量條目的列表并隨機返回其中的一個條目
48.使用urllib2獲取HTTP資源包含三個步驟:創建Request對象,創建URL開啟器Opener,使用Request對象告訴Opener打開相應的URL
????>>> import urllib2
????>>> request = urllib2.Request('http://diveintomark.org/xml/atom.xml')?
????>>> opener = urllib2.build_opener()?
????>>> feeddata = opener.open(request).read()?
總結
以上是生活随笔為你收集整理的实用python技巧的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Python装饰器与面向切面编程
- 下一篇: eclipse+pydev快捷键