[Python] Python基础⑵
Python基礎(chǔ)⑵
1 . 格式化輸出
1、整數(shù)的輸出
%o —— oct 八進(jìn)制
%d —— dec 十進(jìn)制
%x —— hex 十六進(jìn)制
2、浮點數(shù)輸出
(1)格式化輸出
%f ——保留小數(shù)點后面六位有效數(shù)字
%.3f,保留3位小數(shù)位
%e ——保留小數(shù)點后面六位有效數(shù)字,指數(shù)形式輸出
%.3e,保留3位小數(shù)位,使用科學(xué)計數(shù)法
%g ——在保證六位有效數(shù)字的前提下,使用小數(shù)方式,否則使用科學(xué)計數(shù)法
%.3g,保留3位有效數(shù)字,使用小數(shù)或科學(xué)計數(shù)法
3、字符串輸出
%s
%10s——右對齊,占位符10位
%-10s——左對齊,占位符10位
%.2s——截取2位字符串
%10.2s——10位占位符,截取兩位字符串
4、 其他
字符串格式代碼如下
(2)常用轉(zhuǎn)義字符如下
2 . 基本運(yùn)算符
Python算術(shù)運(yùn)算符
以下假設(shè)變量:?a=10,b=20:
| + | 加 - 兩個對象相加 | a + b 輸出結(jié)果 30 |
| - | 減 - 得到負(fù)數(shù)或是一個數(shù)減去另一個數(shù) | a - b 輸出結(jié)果 -10 |
| * | 乘 - 兩個數(shù)相乘或是返回一個被重復(fù)若干次的字符串 | a * b 輸出結(jié)果 200 |
| / | 除 - x除以y | b / a 輸出結(jié)果 2 |
| % | 取模 - 返回除法的余數(shù) | b % a 輸出結(jié)果 0 |
| ** | 冪 - 返回x的y次冪 | a**b 為10的20次方, 輸出結(jié)果 100000000000000000000 |
| // | 取整除 - 返回商的整數(shù)部分 | 9//2 輸出結(jié)果 4 , 9.0//2.0 輸出結(jié)果 4.0 |
以下實例演示了Python所有算術(shù)運(yùn)算符的操作:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 21b = 10c = 0 c = a + bprint "1 - c 的值為:", c c = a - bprint "2 - c 的值為:", c c = a * bprint "3 - c 的值為:", c c = a / bprint "4 - c 的值為:", c c = a % bprint "5 - c 的值為:", c # 修改變量 a 、b 、ca = 2b = 3c = a**b print "6 - c 的值為:", c a = 10b = 5c = a//b print "7 - c 的值為:", c運(yùn)行實例 ?
以上實例輸出結(jié)果:
1 - c 的值為: 31 2 - c 的值為: 11 3 - c 的值為: 210 4 - c 的值為: 2 5 - c 的值為: 1 6 - c 的值為: 8 7 - c 的值為: 2注意:Python2.x 里,整數(shù)除整數(shù),只能得出整數(shù)。如果要得到小數(shù)部分,把其中一個數(shù)改成浮點數(shù)即可。
>>> 1/2 0 >>> 1.0/2 0.5 >>> 1/float(2) 0.5Python比較運(yùn)算符
以下假設(shè)變量a為10,變量b為20:
| == | 等于 - 比較對象是否相等 | (a == b) 返回 False。 |
| != | 不等于 - 比較兩個對象是否不相等 | (a != b) 返回 true. |
| <> | 不等于 - 比較兩個對象是否不相等 | (a <> b) 返回 true。這個運(yùn)算符類似 != 。 |
| > | 大于 - 返回x是否大于y | (a > b) 返回 False。 |
| < | 小于 - 返回x是否小于y。所有比較運(yùn)算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價。 | (a < b) 返回 true。 |
| >= | 大于等于 - 返回x是否大于等于y。 | (a >= b) 返回 False。 |
| <= | 小于等于 - 返回x是否小于等于y。 | (a <= b) 返回 true。 |
以下實例演示了Python所有比較運(yùn)算符的操作:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 21b = 10c = 0 if ( a == b ): print "1 - a 等于 b"else: print "1 - a 不等于 b" if ( a != b ): print "2 - a 不等于 b"else: print "2 - a 等于 b" if ( a <> b ): print "3 - a 不等于 b"else: print "3 - a 等于 b" if ( a < b ): print "4 - a 小于 b" else: print "4 - a 大于等于 b" if ( a > b ): print "5 - a 大于 b"else: print "5 - a 小于等于 b" # 修改變量 a 和 b 的值a = 5b = 20if ( a <= b ): print "6 - a 小于等于 b"else: print "6 - a 大于 b" if ( b >= a ): print "7 - b 大于等于 a"else: print "7 - b 小于 a"以上實例輸出結(jié)果:
1 - a 不等于 b 2 - a 不等于 b 3 - a 不等于 b 4 - a 大于等于 b 5 - a 大于 b 6 - a 小于等于 b 7 - b 大于等于 aPython賦值運(yùn)算符
以下假設(shè)變量a為10,變量b為20:
| = | 簡單的賦值運(yùn)算符 | c = a + b 將 a + b 的運(yùn)算結(jié)果賦值為 c |
| += | 加法賦值運(yùn)算符 | c += a 等效于 c = c + a |
| -= | 減法賦值運(yùn)算符 | c -= a 等效于 c = c - a |
| *= | 乘法賦值運(yùn)算符 | c *= a 等效于 c = c * a |
| /= | 除法賦值運(yùn)算符 | c /= a 等效于 c = c / a |
| %= | 取模賦值運(yùn)算符 | c %= a 等效于 c = c % a |
| **= | 冪賦值運(yùn)算符 | c **= a 等效于 c = c ** a |
| //= | 取整除賦值運(yùn)算符 | c //= a 等效于 c = c // a |
以下實例演示了Python所有賦值運(yùn)算符的操作:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 21b = 10c = 0 c = a + bprint "1 - c 的值為:", c c += aprint "2 - c 的值為:", c c *= aprint "3 - c 的值為:", c c /= a print "4 - c 的值為:", c c = 2c %= aprint "5 - c 的值為:", c c **= aprint "6 - c 的值為:", c c //= aprint "7 - c 的值為:", c以上實例輸出結(jié)果:
1 - c 的值為: 31 2 - c 的值為: 52 3 - c 的值為: 1092 4 - c 的值為: 52 5 - c 的值為: 2 6 - c 的值為: 2097152 7 - c 的值為: 99864Python位運(yùn)算符
按位運(yùn)算符是把數(shù)字看作二進(jìn)制來進(jìn)行計算的。Python中的按位運(yùn)算法則如下:
下表中變量 a 為 60,b 為 13,二進(jìn)制格式如下:
a = 0011 1100b = 0000 1101-----------------a&b = 0000 1100a|b = 0011 1101a^b = 0011 0001~a = 1100 0011| & | 按位與運(yùn)算符:參與運(yùn)算的兩個值,如果兩個相應(yīng)位都為1,則該位的結(jié)果為1,否則為0 | (a & b) 輸出結(jié)果 12 ,二進(jìn)制解釋: 0000 1100 |
| | | 按位或運(yùn)算符:只要對應(yīng)的二個二進(jìn)位有一個為1時,結(jié)果位就為1。 | (a | b) 輸出結(jié)果 61 ,二進(jìn)制解釋: 0011 1101 |
| ^ | 按位異或運(yùn)算符:當(dāng)兩對應(yīng)的二進(jìn)位相異時,結(jié)果為1 | (a ^ b) 輸出結(jié)果 49 ,二進(jìn)制解釋: 0011 0001 |
| ~ | 按位取反運(yùn)算符:對數(shù)據(jù)的每個二進(jìn)制位取反,即把1變?yōu)?,把0變?yōu)? 。~x?類似于?-x-1 | (~a ) 輸出結(jié)果 -61 ,二進(jìn)制解釋: 1100 0011,在一個有符號二進(jìn)制數(shù)的補(bǔ)碼形式。 |
| << | 左移動運(yùn)算符:運(yùn)算數(shù)的各二進(jìn)位全部左移若干位,由?<<?右邊的數(shù)字指定了移動的位數(shù),高位丟棄,低位補(bǔ)0。 | a << 2 輸出結(jié)果 240 ,二進(jìn)制解釋: 1111 0000 |
| >> | 右移動運(yùn)算符:把">>"左邊的運(yùn)算數(shù)的各二進(jìn)位全部右移若干位,>>?右邊的數(shù)字指定了移動的位數(shù) | a >> 2 輸出結(jié)果 15 ,二進(jìn)制解釋: 0000 1111 |
以下實例演示了Python所有位運(yùn)算符的操作:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a & b; # 12 = 0000 1100print "1 - c 的值為:", c c = a | b; # 61 = 0011 1101 print "2 - c 的值為:", c c = a ^ b; # 49 = 0011 0001print "3 - c 的值為:", c c = ~a; # -61 = 1100 0011print "4 - c 的值為:", c c = a << 2; # 240 = 1111 0000print "5 - c 的值為:", c c = a >> 2; # 15 = 0000 1111print "6 - c 的值為:", c以上實例輸出結(jié)果:
1 - c 的值為: 12 2 - c 的值為: 61 3 - c 的值為: 49 4 - c 的值為: -61 5 - c 的值為: 240 6 - c 的值為: 15Python邏輯運(yùn)算符
Python語言支持邏輯運(yùn)算符,以下假設(shè)變量 a 為 10, b為 20:
| and | x and y | 布爾"與" - 如果 x 為 False,x and y 返回 False,否則它返回 y 的計算值。 | (a and b) 返回 20。 |
| or | x or y | 布爾"或" - 如果 x 是非 0,它返回 x 的值,否則它返回 y 的計算值。 | (a or b) 返回 10。 |
| not | not x | 布爾"非" - 如果 x 為 True,返回 False 。如果 x 為 False,它返回 True。 | not(a and b) 返回 False |
以上實例輸出結(jié)果:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 10b = 20 if ( a and b ): print "1 - 變量 a 和 b 都為 true"else: print "1 - 變量 a 和 b 有一個不為 true" if ( a or b ): print "2 - 變量 a 和 b 都為 true,或其中一個變量為 true"else: print "2 - 變量 a 和 b 都不為 true" # 修改變量 a 的值a = 0if ( a and b ): print "3 - 變量 a 和 b 都為 true"else: print "3 - 變量 a 和 b 有一個不為 true" if ( a or b ): print "4 - 變量 a 和 b 都為 true,或其中一個變量為 true"else: print "4 - 變量 a 和 b 都不為 true" if not( a and b ): print "5 - 變量 a 和 b 都為 false,或其中一個變量為 false"else: print "5 - 變量 a 和 b 都為 true"以上實例輸出結(jié)果:
1 - 變量 a 和 b 都為 true 2 - 變量 a 和 b 都為 true,或其中一個變量為 true 3 - 變量 a 和 b 有一個不為 true 4 - 變量 a 和 b 都為 true,或其中一個變量為 true 5 - 變量 a 和 b 都為 false,或其中一個變量為 falsePython成員運(yùn)算符
除了以上的一些運(yùn)算符之外,Python還支持成員運(yùn)算符,測試實例中包含了一系列的成員,包括字符串,列表或元組。
| in | 如果在指定的序列中找到值返回 True,否則返回 False。 | x 在 y 序列中 , 如果 x 在 y 序列中返回 True。 |
| not in | 如果在指定的序列中沒有找到值返回 True,否則返回 False。 | x 不在 y 序列中 , 如果 x 不在 y 序列中返回 True。 |
以下實例演示了Python所有成員運(yùn)算符的操作:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 10b = 20list = [1, 2, 3, 4, 5 ]; if ( a in list ): print "1 - 變量 a 在給定的列表中 list 中"else: print "1 - 變量 a 不在給定的列表中 list 中" if ( b not in list ): print "2 - 變量 b 不在給定的列表中 list 中"else: print "2 - 變量 b 在給定的列表中 list 中" # 修改變量 a 的值a = 2if ( a in list ): print "3 - 變量 a 在給定的列表中 list 中"else: print "3 - 變量 a 不在給定的列表中 list 中"以上實例輸出結(jié)果:
1 - 變量 a 不在給定的列表中 list 中 2 - 變量 b 不在給定的列表中 list 中 3 - 變量 a 在給定的列表中 list 中Python身份運(yùn)算符
身份運(yùn)算符用于比較兩個對象的存儲單元
| is | is 是判斷兩個標(biāo)識符是不是引用自一個對象 | x is y, 類似?id(x) == id(y)?, 如果引用的是同一個對象則返回 True,否則返回 False |
| is not | is not 是判斷兩個標(biāo)識符是不是引用自不同對象 | x is not y?, 類似?id(a) != id(b)。如果引用的不是同一個對象則返回結(jié)果 True,否則返回 False。 |
注:?id()?函數(shù)用于獲取對象內(nèi)存地址。
以下實例演示了Python所有身份運(yùn)算符的操作:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 20b = 20 if ( a is b ): print "1 - a 和 b 有相同的標(biāo)識"else: print "1 - a 和 b 沒有相同的標(biāo)識" if ( a is not b ): print "2 - a 和 b 沒有相同的標(biāo)識"else: print "2 - a 和 b 有相同的標(biāo)識" # 修改變量 b 的值b = 30if ( a is b ): print "3 - a 和 b 有相同的標(biāo)識"else: print "3 - a 和 b 沒有相同的標(biāo)識" if ( a is not b ): print "4 - a 和 b 沒有相同的標(biāo)識"else: print "4 - a 和 b 有相同的標(biāo)識"以上實例輸出結(jié)果:
1 - a 和 b 有相同的標(biāo)識 2 - a 和 b 有相同的標(biāo)識 3 - a 和 b 沒有相同的標(biāo)識 4 - a 和 b 沒有相同的標(biāo)識is 與 == 區(qū)別:
is 用于判斷兩個變量引用對象是否為同一個, == 用于判斷引用變量的值是否相等。
>>> a = [1, 2, 3] >>> b = a >>> b is a True >>> b == a True >>> b = a[:] >>> b is a False >>> b == a TruePython運(yùn)算符優(yōu)先級
以下表格列出了從最高到最低優(yōu)先級的所有運(yùn)算符:
| ** | 指數(shù) (最高優(yōu)先級) |
| ~ + - | 按位翻轉(zhuǎn), 一元加號和減號 (最后兩個的方法名為 +@ 和 -@) |
| * / % // | 乘,除,取模和取整除 |
| + - | 加法減法 |
| >> << | 右移,左移運(yùn)算符 |
| & | 位 'AND' |
| ^ | | 位運(yùn)算符 |
| <= < > >= | 比較運(yùn)算符 |
| <> == != | 等于運(yùn)算符 |
| = %= /= //= -= += *= **= | 賦值運(yùn)算符 |
| is is not | 身份運(yùn)算符 |
| in not in | 成員運(yùn)算符 |
| not or and | 邏輯運(yùn)算符 |
以下實例演示了Python所有運(yùn)算符優(yōu)先級的操作:
實例(Python 2.0+)
#!/usr/bin/python# -*- coding: UTF-8 -*- a = 20b = 10c = 15d = 5e = 0 e = (a + b) * c / d #( 30 * 15 ) / 5print "(a + b) * c / d 運(yùn)算結(jié)果為:", e e = ((a + b) * c) / d # (30 * 15 ) / 5print "((a + b) * c) / d 運(yùn)算結(jié)果為:", e e = (a + b) * (c / d); # (30) * (15/5)print "(a + b) * (c / d) 運(yùn)算結(jié)果為:", e e = a + (b * c) / d; # 20 + (150/5)print "a + (b * c) / d 運(yùn)算結(jié)果為:", e以上實例輸出結(jié)果:
(a + b) * c / d 運(yùn)算結(jié)果為: 90 ((a + b) * c) / d 運(yùn)算結(jié)果為: 90 (a + b) * (c / d) 運(yùn)算結(jié)果為: 90 a + (b * c) / d 運(yùn)算結(jié)果為: 503 . 編碼問題
階段一:現(xiàn)代計算機(jī)起源于美國,最早誕生也是基于英文考慮的ASCII
隨著計算機(jī)越來越流行,廠商之間的競爭更加激烈,在不同的計算機(jī)體系間轉(zhuǎn)換數(shù)據(jù)變得十分蛋疼,人們厭煩了這種自定義造成的混亂。最終,計算機(jī)制造商一起制定了一個標(biāo)準(zhǔn)的方法來描述字符。他們定義使用一個字節(jié)的低7位來表示字符,并且制作了如上圖所示的對照表來映射七個比特的值到一個字符上。例如,字母A是65,c是99,~是126等等, ASCII碼就這樣誕生了。原始的ASCII標(biāo)準(zhǔn)定義了從0到127 的字符,這樣正好能用七個比特表示。
為什么選擇了7個比特而不是8個來表示一個字符呢?我并不關(guān)心。但是一個字節(jié)是8個比特,這意味著1個比特并沒有被使用,也就是從128到255的編碼并沒有被制定ASCII標(biāo)準(zhǔn)的人所規(guī)定,這些美國人對世界的其它地方一無所知甚至完全不關(guān)心。其它國家的人趁這個機(jī)會開始使用128到255范圍內(nèi)的編碼來表達(dá)自己語言中的字符。例如,144在阿拉伯人的ASCII碼中是?,而在俄羅斯的ASCII碼中是?。ASCII碼的問題在于盡管所有人都在0-127號字符的使用上達(dá)成了一致,但對于128-255號字符卻有很多很多不同的解釋。你必須告訴計算機(jī)使用哪種風(fēng)格的ASCII碼才能正確顯示128-255號的字符。
總結(jié):ASCII,一個Bytes代表一個字符(英文字符/鍵盤上的所有其他字符),1Bytes=8bit,8bit可以表示0-2**8-1種變化,即可以表示256個字符,ASCII最初只用了后七位,127個數(shù)字,已經(jīng)完全能夠代表鍵盤上所有的字符了(英文字符/鍵盤的所有其他字符),后來為了將拉丁文也編碼進(jìn)了ASCII表,將最高位也占用了。
階段二:為了滿足中文,中國人定制了GBK
GBK:2Bytes代表一個字符;為了滿足其他國家,各個國家紛紛定制了自己的編碼。日本把日文編到Shift_JIS里,韓國把韓文編到Euc-kr里
階段三:萬國碼Unicode編碼
后來,有人開始覺得太多編碼導(dǎo)致世界變得過于復(fù)雜了,讓人腦袋疼,于是大家坐在一起拍腦袋想出來一個方法:所有語言的字符都用同一種字符集來表示,這就是Unicode。
Unicode統(tǒng)一用2Bytes代表一個字符,2**16-1=65535,可代表6萬多個字符,因而兼容萬國語言.但對于通篇都是英文的文本來說,這種編碼方式無疑是多了一倍的存儲空間(英文字母只需要一個字節(jié)就足夠,用兩個字節(jié)來表示,無疑是浪費(fèi)空間).于是產(chǎn)生了UTF-8,對英文字符只用1Bytes表示,對中文字符用3Bytes.UTF-8是一個非常驚艷的概念,它漂亮的實現(xiàn)了對ASCII碼的向后兼容,以保證Unicode可以被大眾接受。
在UTF-8中,0-127號的字符用1個字節(jié)來表示,使用和US-ASCII相同的編碼。這意味著1980年代寫的文檔用UTF-8打開一點問題都沒有。只有128號及以上的字符才用2個,3個或者4個字節(jié)來表示。因此,UTF-8被稱作可變長度編碼。于是下面字節(jié)流如下:
0100100001000101010011000100110001001111
這個字節(jié)流在ASCII和UTF-8中表示相同的字符:HELLO
至于其他的UTF-16,這里就不再敘述了。
總結(jié)一點:unicode:簡單粗暴,所有字符都是2Bytes,優(yōu)點是字符----->數(shù)字的轉(zhuǎn)換速度快,缺點是占用空間大。
utf-8:精準(zhǔn),對不同的字符用不同的長度表示,優(yōu)點是節(jié)省空間,缺點是:字符->數(shù)字的轉(zhuǎn)換速度慢,因為每次都需要計算出字符需要多長的Bytes才能夠準(zhǔn)確表示。
因此,內(nèi)存中使用的編碼是unicode,用空間換時間(程序都需要加載到內(nèi)存才能運(yùn)行,因而內(nèi)存應(yīng)該是盡可能的保證快);硬盤中或者網(wǎng)絡(luò)傳輸用utf-8,網(wǎng)絡(luò)I/O延遲或磁盤I/O延遲要遠(yuǎn)大與utf-8的轉(zhuǎn)換延遲,而且I/O應(yīng)該是盡可能地節(jié)省帶寬,保證數(shù)據(jù)傳輸?shù)姆€(wěn)定性。
所有程序,最終都要加載到內(nèi)存,程序保存到硬盤不同的國家用不同的編碼格式,但是到內(nèi)存中我們?yōu)榱思嫒萑f國(計算機(jī)可以運(yùn)行任何國家的程序原因在于此),統(tǒng)一且固定使用unicode,這就是為何內(nèi)存固定用unicode的原因,你可能會說兼容萬國我可以用utf-8啊,可以,完全可以正常工作,之所以不用肯定是unicode比utf-8更高效啊(uicode固定用2個字節(jié)編碼,utf-8則需要計算),但是unicode更浪費(fèi)空間,沒錯,這就是用空間換時間的一種做法,而存放到硬盤,或者網(wǎng)絡(luò)傳輸,都需要把unicode轉(zhuǎn)成utf-8,因為數(shù)據(jù)的傳輸,追求的是穩(wěn)定,高效,數(shù)據(jù)量越小數(shù)據(jù)傳輸就越靠譜,于是都轉(zhuǎn)成utf-8格式的,而不是unicode。
總結(jié)
以上是生活随笔為你收集整理的[Python] Python基础⑵的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: JMeter性能测试流程及性能指标关注点
- 下一篇: python:最小二乘法拟合原理及代码实