python復習筆記
<font color=blue>##基礎</font>
<pre>
1.下劃線(_)在解釋器中有特別的含義,表示最後一個表達式的值。
<pre>
Microsoft Windows [版本 6.1.7601]
版權所有 (c) 2009 Microsoft Corporation。保留所有權利。
C:\Users\Administrator>python
Python 2.7.10 (default, May 23 2015, 09:44:00) [MSC v.1500 64 bit (AMD64)] on
n32
Type "help", "copyright", "credits" or "license" for more information.
>> print "hello world"
hello world
>>
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
NameError: name ‘‘ is not defined
>> mystring = "hello world"
>> print mystring
hello world
>> mystring
‘hello world‘<font color=red>>> _
‘hello world‘</font>
>>
</pre>
2.print語句也支持將輸出重定向到文件。符號>>用來定向輸出
<pre>
>> import sys
>> print >> sys.stderr, ‘Fatal error: invalid input!‘
Fatal error: invalid input!
>> print >> sys.stderr,‘Fatal error: invalid input!‘
Fatal error: invalid input!<font color=red>>> logfile = open(‘D:/python_code/mylog.txt‘,‘a‘)
>> print >> logfile,‘Fatal error: invalid input!‘
>> logfile.close()</font>
</pre>
3.enumerate()函數
<pre>
In [4]: foo = ‘abc‘
In [5]: for i in range(len(foo)):
...: print foo[i],‘(%d)‘%i
...:
a (0)
b (1)
c (2)
In [6]: for i,ch in enumerate(foo):
...: print ch,‘(%d)‘%i
...:
a (0)
b (1)
c (2)
In [7]:
</pre>
4.列表解析
[運算式 參數列表 判斷條件]
<pre>
In [7]: squared = [x**2 for x in range(4)]
In [8]: squared
Out[8]: [0, 1, 4, 9]
In [9]: sqdEvens = [x**2 for x in range(8) if not x%2]
In [10]: sqdEvens
Out[10]: [0, 4, 16, 36]
In [11]: sum = [x+y for x in range(3) for y in range(3) if x!=y]
In [12]: sum
Out[12]: [1, 2, 1, 3, 2, 3]
In [13]: sum2 = [x*y for x in range(3) for y in range(3) if x!=y]
In [14]: sum2
Out[14]: [0, 0, 0, 2, 0, 2]
</pre>
5.實用的內建函數
<pre>
dir([obj]) 顯示對象的屬性,如果沒有提供參數,則顯示全局變量的名字。
help([obj]) 以一種整齊美觀的形式,顯示對象的文檔字符串,如果沒有
提供任何參數,則會進入交互式幫助。
int(obj) 將一個對象轉換為整型
len(obj) 返回對象的長度
open(fn,mode) 以mode(‘r‘=讀,‘w‘=寫,‘a‘=追加)的方式打開一個文件名
為fn的文件。
range([[start,] stop[,step]])返回一個整型列表。起始值為start,
結束值為stop-1,start默認值為0,step默認值為1
raw_input(str)等待用戶輸入一個字符串,可以提供一個可選的參數
str用作提示信息。
str(obj) 將一個對象轉換為字符串
type(obj) 返回對象的類型(返回值本身是一個type對象)
</pre>
</pre>
##語句和語法
<pre>
1.井號(#)表示之後的字符為python註釋
2.換行(\n)是標準的行分隔符(通常一個語句一行)
3.反斜線()繼續上一行
<pre>
有兩種例外情況一個語句不使用反斜線也可以跨行。在使用閉合操作符時,
單一語句可以跨多行。
例如:在含有小括號、中括號、花括號時可以多行書寫。
另外就是三引號包括下的字符串也可以跨行書寫。
</pre>
4.分號(;)將兩個語句連接在一行中
5.冒號(:)將代碼塊的頭和體分開
6.語句(代碼塊)用縮進塊的方式體現
7.不同的縮進深度分隔不同的代碼塊
8.python文件以模塊的形式組織。
</pre>
##變量和內存管理
<pre>
<pre>
1.變量無需事先聲明
2.變量無需指定類型
3.程序員不用關心內存管理
4.變量名會被"回收"
5.del語句能夠直接釋放資源
</pre>
<pre>
變量定義,變量生命可以在代碼塊的中間,不過仍然必須在變量
被使用前聲明變量的名字和類型。
在Python中,無需此類顯式變量聲明語句,變量在第一次被賦值時自動聲明。
和其他大多數語言一樣,變量只有被創建和賦值後才能被使用。
</pre>
del語句
<pre>
del語句會刪除對象的一個引用,它的語法如下:
del obj1[,obj2[,...objN]]
del會刪除當前對象的引用,將引用計數器減1,如果引用計數器為0
則會導致該對象從此無法訪問或無法抵達,從此刻起,該對象就成為垃圾回收機制的回收對象。
註意任何追蹤或調試程序會給一個對象增加一個額外的引用,這會推遲
該對象被回收的時間。
</pre>
垃圾收集
<pre>
不再使用的內存會被一種稱為垃圾收集的機制釋放。雖然解釋器跟蹤對象
的引用計數,但垃圾收集器負責釋放內存。垃圾收集器是一塊獨立代碼,
它用來尋找引用計數為0的對象。它也負責檢查那些雖然引用計數大於0
但也應該被銷毀的對象。特定情形會導致循環引用。
一個循環引用發生在當你有至少兩個對象互相引用時,也就是說所有
的引用都消失時,這些引用仍然存在,這說明只靠引用計數是不夠的。
python的垃圾收集器實際上是一個引用計數器和一個循環垃圾收集器。
當一個對象的引用計數變為0,解釋器會暫停,釋放掉這個對象和僅有這個對象可訪問(可到達)的其他對象。作為引用計數的補充,垃圾收集器也會
留心被分配的總量很大的(及未通過引用計數銷毀的那些)對象。
在這種情況下,解釋器會暫停下來,試圖清理所有未引用的循環。
</pre>
</pre>
##序列
<pre>
切片
<pre>
In [52]: s = ‘abcde‘
In [53]: i = -1
In [54]: for i in range(-1,-len(s),-1):
...: print s[:i]
...:
abcd
abc
ab
a
In [55]: s = ‘abcde‘
In [56]: for i in [None] + range(-1,-len(s),-1):
...: print s[:i]
...:
abcde
abcd
abc
ab
a
使用None作為索引值,這樣一來就可以滿足你的需要,比如說,在你
想用一個變量作為索引來從第一個到遍歷最後一個元素的時候。
In [57]: for i in [None].extend(range(-1,-len(s),-1)):
...: print s[:i]
...:
TypeError Traceback (most recent call last)
<ipython-input-57-e791611ff738> in <module>()
----> 1 for i in [None].extend(range(-1,-len(s),-1)):
2 print s[:i]
3
TypeError: ‘NoneType‘ object is not iterable
可變對象的內建函數extend()根本沒有返回值,所以這個方法是行不通的。
這個錯誤發生的原因是[None].extend(...)函數返回None,None既不是
序列類型也不是可叠代對象。
在這種情況下使用上面提到的列表連接操作來實現是唯一不需要添加額外
代碼的方法。
</pre>
</pre>
##字符串內建函數
<pre>
- string.capitalize() 把字符串的第一個字符大寫
- string.center(width) 返回一個原字符串居中,並使用空格填充
至長度width的新字符串 - string.count(str,beg=0,end=len(string)) 返回str在string
裏面出現的次數,如果beg或者end指定則返回指定範圍內str出現的次數 - string.decode(encoding=‘UTF-8‘ errors=‘strict‘)
以decoding指定的編碼格式解碼string,如果出錯默認報一個ValueError的異常,
除非errors指定的是‘ignore‘或者‘replace‘ - string.encode(encoding=‘UTF-8‘,errors=‘strict‘)
以encoding指定的編碼格式編碼string,如果出錯默認報一個ValueError的異常,
除非errors指定的是‘ignore‘或者‘replace‘ - string.endswith(obj,beg=0,end=len(string))
檢查字符串是否是以obj結束,如果beg或者end指定則檢查指定的範圍
內是否以obj結束,如果是,返回True,否則返回False. - string.expandtabs(tabsize=8) 把字符串string中的tab符號
轉換為空格,默認的空格數tabsize是8 - string.find(str,beg=0,end=len(string)) 檢測str是否包含
在string中,如果beg和end指定範圍,則檢查是否包含在指定範圍內,
如果是返回開始的索引值,否則返回-1 - string.index(str,beg=0,end=len(string)) 跟find()方法一樣,
只不過如果str不在string中會報一個異常。 - string.isalnum() 如果string至少有一個字符並且所有字符
都是字母或數字則返回True,否則返回False - string.isalpha() 如果string至少有一個字符並且所有字符
都是字母則返回True,否則返回False - string.isdecimal() 如果string只包含十進制數字則返回True
否則返回False - string.isdigit() 如果string只包含數字則返回True,否則返回False
- string.islower() 如果string中包含至少一個區分大小寫的字
符,並且所有這些(區分大小寫的)字符都是小寫,則返回True,否則返回False。 - string.isnumeric() 如果string中只包含數字字符,則返回True
否則返回False - string.isspace() 如果string中只包含空格,則返回True,
否則返回False - string.istitle() 如果string是標題化的(見title())則
返回True,否則返回False - string.isupper() 如果string中包含至少一個區分大小寫的
字符,並且所有這些(區分大小寫的)字符都是大寫,則返回True,否則返回False - string.join(seq) 以string作為分隔符,將seq中所有的元素
(字符串表示)合並為一個新的字符串 - stirng.ljust(width) 返回一個原字符串左對齊,並使用空格
填充至長度width的新字符串 - string.lower() 轉換string中所有大寫字符為小寫
- string.lstrip() 截掉string左邊的空格
- string.partition(str) 有點像find()和split()的結合體
,從str出現的第一個位置起,把字符串string分成一個3元組(string_pre_str,str,string_post_str),
如果string中不包含str則string_pre_str = string - string.replace(str1,str2,num=string.count(str1))
把string中的str1替換成str2,如果num指定,則替換不超過num次 - string.rfind(str,beg=0,end=len(string)) 類似於
find()函數,不過是從右邊開始查找。 - string.rindex(str,beg=0,end=len(string)) 類似於index()
不過是從右邊開始。 - string.rjust(width) 返回一個原字符串右對齊,並使用
空格填充至長度width的新字符串 - string.rpartition(str) 類似於partition()函數,不過
是從右邊開始查找。 - string.rstrip() 刪除string字符串末尾的空格。
- string.split(str="",num=string.count(str))
以str為分隔符切片string,如果num有指定值,則僅分隔num個子字符串 - string.splitlines(num=string.count(‘\n‘)) 按照行分隔,
返回一個包含各行作為元素的列表,如果num指定則僅切片num行。 - string.startswith(obj,beg=0,end=len(string))
檢查字符串是否是以obj開頭,是則返回True,否則返回False
如果beg和end指定值,則在指定範圍內檢查 - string.strip([obj]) 在string上執行lstrip()和rstrip()
- string.swapcase() 翻轉string中的大小寫
- string.title() 返回“標題化”的string,就是說所有單詞都是
以大寫開始,其余字母均為小寫(見istitle()) - string.translate(str,del="") 根據str給出的表(包含256個字符)
轉換string的字符,要過濾掉的字符放到del參數中 - string.upper() 轉換string中的小寫字母為大寫
- string.zfill(width) 返回長度為width的字符串,原字符串string
右對齊,前面填充0
<pre>
In [79]: string1 = "akdsg;lkajsd"
In [80]: import string
In [81]: string.capitalize(string1)
Out[81]: ‘Akdsg;lkajsd‘
In [82]: string.capitalize(string1)
Out[82]: ‘Akdsg;lkajsd‘
In [83]:
In [83]: quest = ‘what is your favorite color?‘
In [84]: quest.capitalize()
Out[84]: ‘What is your favorite color?‘
In [85]: quest.center(40)
Out[85]: ‘ what is your favorite color? ‘
In [86]: quest.count(‘or‘)
Out[86]: 2
In [87]: quest.endswith(‘blue‘)
Out[87]: False
In [88]: quest.endswith(‘color?‘)
Out[88]: True
In [89]: quest.find(‘or‘,30)
Out[89]: -1
In [90]: quest.find(‘or‘,22)
Out[90]: 25
In [91]: quest.index(‘or‘,10)
Out[91]: 16
In [92]: ‘:‘.join(quest.split())
Out[92]: ‘what:is:your:favorite:color?‘
In [93]: quest.replace(‘favorite color‘,‘quest‘)
Out[93]: ‘what is your quest?‘
In [94]: quest.upper()
Out[94]: ‘WHAT IS YOUR FAVORITE COLOR?‘
In [95]:
</pre>
</pre>
##集合的所有方法
<pre>
方法,所有的集合方法
<pre>
- s.issubset(t) 如果s是t的子集,則返回True,否則返回False
- s.issuperset(t) 如果t是s的超集,則返回True,否則返回False
- s.union(t) 返回一個新集合,該集合是s和t的並集
- s.intersection(t) 返回一個新集合,該集合是s和t的交集
- s.difference(t) 返回一個新集合,該集合是s的成員,但不是t的成員
- s.symmetric_difference(t) 返回一個新集合,該集合是s或t的成員,但不是s和t共有的成員
- s.copy() 返回一個新集合,它是集合s的淺復制
</pre>
方法,僅適用於可變集合
<pre> - s.update(t) 用t中的元素修改s,即,s現在包含s或t的成員
- s.intersection_update(t) s中的成員是共同屬於s和t的元素
- s.difference_update(t) s中的成員是屬於s但不包含在t中的元素
- s.symmetric_differece_update(t) s中的成員更新為那些包含在s或t中,但不是s和t共有的元素
- s.add(obj) 在集合s中添加對象obj
- s.remove(obj) 從集合s中刪除對象obj;如果obj不是集合s中的元素(obj not in s) 將引發KeyError錯誤
- s.discard(obj) 如果obj是集合s中的元素,從集合s中刪除對象obj
- s.pop() 刪除集合s中的任意一個對象,並返回它
- s.clear() 刪除集合s中的所有元素
</pre>
</pre>
python復習筆記