1、Python類型操作符和內建函數總結
表4.5列出了所有操作符和內建函數,其中操作符順序是按優先順序從高到低排列的。同一種灰階的操作符擁有同樣的優先順序。注意在operator模組中有這些(和絕大多數Python)操作符相應的同功能的函數可供使用。
表4.5 標準類型操作符和內建函數
操作符/函數 |
描 述 |
結 果a |
字串表示 |
`` |
對象的字串表示 |
str |
內建函數 |
cmp(obj1, obj2) |
比較兩個對象 |
int |
repr(obj) |
對象的字串表示 |
str |
str(obj) |
對象的字串表示 |
str |
type(obj) |
檢測對象的類型 |
type |
值比較 |
< |
小於 |
bool |
> |
大於 |
bool |
<= |
小於或等於 |
bool |
>= |
大於或等於 |
bool |
== |
等於 |
bool |
!= |
不等於 |
bool |
<> |
不等於 |
bool |
對象比較 |
is |
是 |
bool |
is not |
不是 |
bool |
布爾操作符 |
not |
邏輯反 |
bool |
and |
邏輯與 |
bool |
or |
邏輯或 |
bool |
2、Python數實值型別操作符和內建函數
一、工廠函數
數值工廠函數總結類(工廠函數) 操作
bool(obj) b 返回obj對象的布爾值,也就是 obj.__nonzero__()方法的傳回值。
int(obj, base=10) 返回一個字串或數值對象的整數表 示, 類似string.atoi();
從Python 1.6起, 引入了可選的進位參數。
long(obj, base=10) 返回一個字元或資料對象的長整數表 示,類似string.atol(),
從Python1.6起, 引入了可選的進位參數 float(obj) ,
返回一個字串或資料對象的浮點數 表示,類似string.atof()。
complex(str) or 返回一個字串的複數表示,或 者根據給定的實數,
complex(real, imag=0.0) (及一個可選 的虛數部分)產生一個複數對象。
二、內建函數
1、分類
Python 有五個運算內建函數用於數值運算:
abs(num), coerce(num1,num2), divmod(num1,num2), pow(num1,num2,mod=1)和 round(flt,ndig=0)
其中abs()返回給定參數的絕對值。如果參數是一個複數, 那麼就返回math.sqrt(num.real2 + num.imag2).
coerce()是一個資料類型轉換函式,不過它的行為更像一個運算子.數coerce()為程式員提供了不依賴Python 解譯器,而是自訂兩個數實值型別轉換的方法。對一種新建立的數實值型別來說, 這個特性非常有用.函數coerce()僅返回一個包含類型轉換完畢的兩個數值元素的元組.
divmod()內建函數把除法和取餘運算結合起來, 返回一個包含商和餘數的元組.對整數來說,它的傳回值就是地板除和取餘操作的結果.對浮點數來說,返回的商部分是math.floor(num1/num2),對複數來說,商部分是ath.floor((num1/num2).real).
pow()它和雙星號 (**)運算子都可以進行指數運算.不過二者的區別並不僅僅在於一個是運算子,一個是內建函數.在Python 1.5 之前,並沒有 ** 運算子,內建函數pow()還接受第三個可選的參數,一個餘數參數.如果有這個參數的, pow() 先進行指數運算,然後將運算結果和第三個參數進行取餘運算.這個特性主要用於密碼運算,並且比 pow(x,y) % z 效能更好, 這是因為這個函數的實作類別似於C 函數pow(x,y,z).
round()用於對浮點數進行四捨五入運算。它有一個可選的小數位元參數.如果不提供小數位參數, 它返回與第一個參數最接近的整數(但仍然是浮點類型).第二個參數告訴round 函數將結果精確到小數點後指定位元.
2、函數int()/round()/math.floor()它們之間的不同之處:
函數 int() 直接截去小數部分.(傳回值為整數)
函數 floor() 得到最接近原數但小於原數的整數.(傳回值為浮點數)
函數 round() 得到最接近原數的整數.(傳回值為浮點數)
3、進位轉換函式:
返回字串表示的8 進位和16 進位整數,它們分別是內建函數:
oct()和 hex(). oct(255)='0377'/hex(255)='0xff'
函數chr()接受一個單位元組整數值(0到255),返回一個字串(ASCII),其值為對應的字元.chr(97)='a'
函數ord()則相反,它接受一個字元(ASCII 或 Unicode),返回其對應的整數值.ord('A')=65
3、Python字串函數
(一)標準類型操作符和標準內建函數
1)、標準類型操作符
>,<,>=,<=,==,!=,<>對象值得比較
註:做比較時字串是按ASCII值的大小來比較的
is 對象身份比較
and,or,not 布爾類型
2)標準內建函數
type(obj)
cmp(obj1,obj2)
str(obj)和repr(obj) 或反引號運算子(``) 可以方便的以字串的方式擷取對象的
內容、類型、數值屬性等資訊。str()函數得到的字串可讀性好, 而repr()函數得到的字元
串通常可以用來重新獲得該對象, 通常情況下 obj == eval(repr(obj)) 這個等式是成立的
isinstance(obj,type) 判斷對象的類型
(二)序列操作
1、序列操作
字串屬於序列對象,可以使用所有序列的操作和函數
切片 [] [:] [::]
簡單總結:
*索引(S[i])擷取特定位移的元素。
——第一個元素位移為0
——(S[0])擷取第一個元素。
——負位移索引意味著從最後或右邊反向進行計數
——(S[-2])擷取倒數第二個元素(就像S[len(s)-2]一樣
*分區[S[i:j]提取對應的部分作為一個序列
——右邊界不包含在內
——分區的邊界預設為0和序列的長度,如果沒有給出的話S[:]
——(S[1:3])擷取了從位移為1,直到但不包括位移為3的元素
——(S[1:])擷取從位移為1到末尾之間的元素
——(S[:3])擷取從位移為0直到但不包括位移為3的元素
——(S[:-1])擷取從位移為0直到但不包括最後一個元素之間的元素
——(S[:])擷取從位移為0到末尾之間的元素,這有效地實現了頂層S拷貝
拷貝了一個相同值,但是是不同記憶體地區的對象。對象字串這樣不可變的對象不是很有用,但是對於可以實地修改的對象來說很有用。
比如列表。
擴充分區:第三個限制值 【步進】
完整形式:X[I:J:K]:這標識索引X對象的元素,從位移為I直到J-1,每隔K元素索引一次。第三個限制值,K,預設為1
執行個體
Python Code
1 2 3 4 5 |
|
>>> S= 'abcdefghijk' >>> S[ 1: 10] 'bcdefghij' >>> S[ 1: 10: 2] 'bdfhj |
也可以使用負數作為步進。
分區運算式
Python Code
1 2 |
|
>>> "hello"[::- 1] 'olleh' |
通過負數步進,兩個邊界的意義實際上進行了反轉。
3、成員操作符 in ,not in
返回布爾值True 或False
可以使用string模組來判斷輸入字元的合法性,可見成品中的idcheck.py
4、字串串連
+ 連接字串 ‘name’+' '+'jin'
字串格式化 '%s %s' % ('name','jin')
join()方法 ' '.join(('name','jin')) ' '.join(['name','jin'])
5、刪除清Null 字元串
del aString
aString=''
(三)、序列函數
序列類型函數
len(str) 返回字串的長度
enumerate(iter):接受一個可迭代對象作為參數,返回一個enumerate
max(str)/min(str):max()和min()函數對其他的序列類型可能更有用,但對於string類型它們能很好地運行,返回最大或者最小的字元(按照ASCII 碼值排列),
zip([it0, it1,... itN]) 返回一個列表,其第一個元素是it0,it1,...這些元素的第一個元素組成的一個元組,第二個...,類推.
reversed(seq)c 接受一個序列作為參數,返回一個以逆序訪問的迭代器(PEP 322)
sorted(iter,func=None,key=None,reverse=False) 接受一個可迭代對象作為參數,返回一個有序的列表;選擇性參數func,key 和reverse 的含義跟list.sort()內建函數的參數含義一樣.
注意:
sorted等需要在原處修改的函數無法用在字串對象,但可以產生新的對象
sum處理的對象是數字,不能用在字串
>>> sorted(s)
['a', 'e', 'e', 'g', 'g', 'g', 'o']
(四)只適合於字串類型的函數
1)raw_input()函數
內建的raw_input()函數使用給定字串提示使用者輸入並將這個輸入返回,下面是一個使
用raw_input()的例子:
>>> user_input = raw_input("Enter your name: ")
>>> prin user_input
2)str() and unicode()
str()和unicode()函數都是工廠函數,就是說產生所對應的類型的對象.它們接受一個任
意類型的對象,然後建立該對象的可列印的或者Unicode 的字串表示. 它們和basestring 都
可以作為參數傳給isinstance()函數來判斷一個對象的類型
3)chr(), unichr(), and ord()
chr()函數用一個範圍在range(256)內的(就是0 到255)整數做參數,返回一個對應的字元.unichr()跟它一樣,只不過返回的是Unicode 字元
ord()函數是chr()函數(對於8 位的ASCII 字串)或unichr()函數(對於Unicode 對象)
的配對函數,它以一個字元(長度為1 的字串)作為參數,返回對應的ASCII 數值,或者Unicode
數值,如果所給的Unicode 字元超出了你的Python 定義範圍,則會引發一個TypeError 的異常
(五)、只適用於字串的操作符
1、格式化操作符 %
字串格式化符號
格式化字元 轉換方式
%c 轉換成字元(ASCII 碼值,或者長度為一的字串)
%ra 優先用repr()函數進行字串轉換
%s 優先用str()函數進行字串轉換
%d / %i 轉成有符號十進位數
%ub 轉成無符號十進位數
%ob 轉成無符號八位元
%xb/%Xb (Unsigned)轉成無符號十六進位數(x/X 代錶轉換後的十六進位字元的大
小寫)
%e/%E 轉成科學計數法(e/E 控制輸出e/E)
%f/%F 轉成浮點數(小數部分自然截斷)
%g/%G %e 和%f/%E 和%F 的簡寫
%% 輸出%
格式化操作符輔助指令
符號 作用
* 定義寬度或者小數點精度
- 用做靠左對齊
+ 在正數前面顯示加號( + )
<sp> 在正數前面顯示空格
# 在八位元前面顯示零('0'),在十六進位前面顯示'0x'或者'0X'(取決於
用的是'x'還是'X')
0 顯示的數字前面填充‘0’而不是預設的空格
% '%%'輸出一個單一的'%'
(var) 映射變數(字典參數)
m.n m 是顯示的最小總寬度,n 是小數點後的位元(如果可用的話)
2、字串模板: 更簡單的替代品
由於新式的字串Template 對象的引進使得string 模組又重新活了過來,Template 對象
有兩個方法,substitute()和safe_substitute().前者更為嚴謹,在key 缺少的情況下它會報一
個KeyError 的異常出來,而後者在缺少key 時,直接原封不動的把字串顯示出
3、原始字串操作符( r/R )
字串抑制轉義r'帶特殊符號的字串'
myfile=open(r'C:\new\text.data','w')
4、Unicode 字串操作符( u/U )
u'abc' U+0061 U+0062 U+0063
u'\u1234' U+1234
u'abc\u1234\n' U+0061 U+0062 U+0063 U+1234 U+0012
(六)字串對象的方法:
1、刪減
T2.lstrip() 移除字串前面字元(預設空格),返回字串
T2.rstrip() 移除字串後面字元(預設空格),返回字串
T2.strip() 移除字串前後面空格,返回字串 預設空格,可以其他字元 S.strip('"')
2、切割
partition(sep),
rpartition(sep),
splitlines([keepends]),#把S按照行分割符分為一個list,keepends是一個bool值,如果為真每行後而會保留行分割符
split([sep [,maxsplit]]),#以sep為分隔字元,把S分成一個list。maxsplit表示分割的次數。預設的分割符為空白字元
rsplit([sep[,maxsplit]]) #從右至左切割
備忘:
partition()函數族是2.5版本新增的方法。它接受一個字串參數,並返回一個3個元素的 tuple 對象。
如果sep沒出現在母串中,傳回值是 (sep, ‘’, ‘’);
否則,傳回值的第一個元素是 sep 左端的部分,第二個元素是 sep 自身,第三個元素是 sep 右端的部分。
>>> S.partition(';')
('', ';', ' generated by /sbin/dhclient-script\nnameserver 172.16.10.171\nnameserver 8.8.8.8\nnameserver 172.16.0.2\nnameserver 178.79.131.110\nnameserver 202.96.199.133\n')
參數 maxsplit 是分切的次數,即最大的分切次數,所以傳回值最多有 maxsplit+1 個元素。
s.split() 和 s.split(‘ ‘)的傳回值不盡相同
>>> ' hello world!'.split()
['hello', 'world!']
>>> ' hello world!'.split(' ')
['', '', 'hello', '', '', 'world!']
>>> S.split('\n',3)
['; generated by /sbin/dhclient-script', 'nameserver 172.16.10.171', 'nameserver 8.8.8.8', 'nameserver 172.16.0.2\nnameserver 178.79.131.110\nnameserver 202.96.199.133\n']
超過最大切割個數後面的全部為一個元素
按行切割
>>> S