標籤:Python
Python基礎1、Python模組
### sys模組#!/usr/bin/python# _*_ coding:utf-8 _*_# Aothr: Kimimport sys #匯入sys模組print (sys.path) #列印python環境變數print(sys.argv) #列印指令碼相對路徑,執行的時候可以傳入參數print (sys.argv[2]) #取出傳入的參數
###os模組import osprint(os.system("dir")) #調用系統命令cmd_res = os.popen("dir").read() #使用cmd_res變數儲存執行結果,這裡命令的執行結果會指向一個記憶體位址,所以需要加.read去讀取結果。print("-->",cmd_res)os.mkdir("new_dir") #os模組中的建立目錄方法
第三方庫,預設找目前的目錄,然後找Python環境變數是否存在該模組名。
2、Python PYC
先行編譯後的位元組碼
(1)Python是一門解釋型語言?
初學Python一直聽別人說,Python是一門解釋性語言,直到發現了.pyc檔案的存在。如果是解釋型語言,那麼產生的.pyc檔案是什麼呢?c應該是compiled的縮寫才對啊!
為了防止其他學習Python的人也被這句話誤解,那麼我們就在文中來澄清下這個問題,並且把一些基礎概念給理清。
(2)解釋型語言和編譯型語言
電腦是不能夠識別進階語言的,所以當我們運行一個進階語言程式的時候,就需要一個“翻譯機”來從事把進階語言轉變成電腦能讀懂的機器語言的過程。這個過程分成兩類,第一種是編譯,第二種是解釋。
編譯型語言在程式執行之前,先會通過編譯器對程式執行一個編譯的過程,把程式轉變成機器語言。運行時就不需要翻譯,而直接執行就可以了。最典型的例子就是C語言。
解釋型語言就沒有這個編譯的過程,而是在程式啟動並執行時候,通過解譯器對程式逐行作出解釋,然後直接運行,最典型的例子是Ruby。
通過以上的例子,我們可以來總結一下解釋型語言和編譯型語言的優缺點,因為編譯型語言在程式運行之前就已經對程式做出了“翻譯”,所以在運行時就少掉了“翻譯”的過程,所以效率比較高。但是我們也不能一概而論,一些解釋型語言也可以通過解譯器的最佳化來在對程式做出翻譯時對整個程式做出最佳化,從而在效率上超過編譯型語言。
此外,隨著Java等基於虛擬機器的語言的興起,我們又不能把語言純粹地分成解釋型和編譯型這兩種。
用Java來舉例,Java首先是通過編譯器編譯成位元組碼檔案,然後在運行時通過解譯器給解釋成機器檔案。所以我們說Java是一種先編譯後解釋的語言。
(3)Python到底是什麼
Python也是一門基於虛擬機器的語言,我們先來從表面上簡單地瞭解一下Python程式的運行過程吧。
當我們在命令列中輸入python hello.py時,其實是啟用了Python的“解譯器”,告訴“解譯器”:你要開始工作了。可是在“解釋”之前,其實執行的第一項工作和Java一樣,是編譯。
Python是一門先編譯後解釋的語言。
(4)簡述Python的運行過程
在說這個問題之前,我們先來說兩個概念,PyCodeObject和pyc檔案。
我們在硬碟上看到的pyc自然不必多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。我們先簡單知道就可以了,繼續向下看。
當python程式運行時,編譯的結果則是儲存在位於記憶體中的PyCodeObject中,當Python程式運行結束時,Python解譯器則將PyCodeObject寫回到pyc檔案中。
當python程式第二次運行時,首先程式會在硬碟中尋找pyc檔案,如果找到則直接載入,否則就重複上面的過程。
所以我們應該這樣來定位PyCodeObject和pyc檔案,我們說pyc檔案其實是PyCodeObject的一種持久化儲存方式。
3、Python資料類型3.1、int(整數)
在32位機器上,整數的位元為32位,取值範圍為-2**31~2**31-1,即-2147483648~2147483647在64位系統上,整數的位元為64位,取值範圍為-2**63~2**63-1,即-9223372036854775808~9223372036854775807
3.2、long(長整數)
自從python2.2起,如果整數發生溢出,python會自動將整數資料轉為長整數類型,但是在python3.x版本,不存在long資料類型 ========python 2.7.5=========== [[email protected] ~]# pythonPython 2.7.5 (default, Aug 4 2017, 00:39:18) [GCC 4.8.5 20150623 (Red Hat 4.8.5-16)] on linux2Type "help", "copyright", "credits" or "license" for more information.>>> type(2**50)<type ‘int‘>>>> type(2**60)<type ‘int‘>>>> type(2**62)<type ‘int‘>>>> type(2**63)<type ‘long‘>>>> ========python 3.5.2===========(venv) D:\Python18\day02>pythonPython 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> type(2**100)<class ‘int‘>
3.3、float(浮點數)
1.浮點數用來處理實數,即帶有小數的數字。2.浮點表示的形式是小數,但小數不一定都是浮點型,23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裡,52.3E-4表示52.3 * 10-4。
3.4、complex(複數)
複數由實數部分和虛數部分組成,一般形式為x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裡的x和y都是實數。註:Python中存在小數字池:-5 ~ 257
3.5、布爾值
真或假、1或0Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 26 2016, 10:47:25)[GCC 4.2.1 (Apple Inc. build 5666) (dot 3)] on darwinType "help", "copyright", "credits" or "license" for more information.>>> a = 0>>> if a :print("a")...>>> a =1>>> if a :print("a")...a
3.6、查看資料類型的方法
查看資料類型,使用type(),如下:Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> print(type("www.123.com"))<class ‘str‘> #字串>>> print(type(1.22))<class ‘float‘> #浮點數>>> print(type(1))<class ‘int‘> #整型
4、資料運算4.1算術運算
| 操作符 |
描述符 |
樣本 |
| + |
加法- 對操作符的兩側增加值 |
a + b = 30 |
| - |
減法 - 減去從左側運算元右側運算元 |
a - b = -10 |
| * |
乘法 - 相乘的運算子兩側的值 |
a * b = 200 |
| / |
除 - 由右側運算元除以左側運算元 |
b / a = 2 |
| % |
模 - 由右側運算元和餘返回除以左側運算元 |
b % a = 0 |
| ** |
指數- 執行對操作指數(冪)的計算 |
a**b = 10 的冪 20 |
| // |
取整除 - 運算元的除法,其中結果是將小數點後的位元被除去的商。 |
9//2 = 4 而 9.0//2.0 = 4.0 |
4.2比較運算
| 操作符 |
描述符 |
樣本 |
| == |
檢查,兩個運算元的值是否相等,如果是則條件變為真。 |
(a == b) 不為 true. |
| != |
檢查兩個運算元的值是否相等,如果值不相等,則條件變為真。 |
(a != b) 為 true. |
| <> |
檢查兩個運算元的值是否相等,如果值不相等,則條件變為真。 |
(a <> b) 為 true。這個類似於 != 運算子 |
| > |
檢查左運算元的值是否大於右運算元的值,如果是,則條件成立。 |
(a > b) 不為 true. |
| < |
檢查左運算元的值是否小於右運算元的值,如果是,則條件成立。 |
(a < b) 為 true. |
| >= |
檢查左運算元的值是否大於或等於右運算元的值,如果是,則條件成立。 |
(a >= b) 不為 true. |
| <= |
檢查左運算元的值是否小於或等於右運算元的值,如果是,則條件成立。 |
(a <= b) 為 true. |
4.3賦值運算
| 操作符 |
描述符 |
樣本 |
| = |
簡單的賦值運算子,賦值從右側運算元左側運算元 |
c = a + b將指定的值 a + b 到 c |
| += |
加法AND賦值操作符,它增加了右運算元左運算元和結果賦給左運算元 |
c += a 相當於 c = c + a |
| -= |
減AND賦值操作符,它減去右邊的運算元從左邊運算元,並將結果賦給左運算元 |
c -= a 相當於 c = c - a |
| *= |
乘法AND賦值操作符,它乘以右邊的運算元與左運算元,並將結果賦給左運算元 |
c = a 相當於 c = c a |
| /= |
除法AND賦值操作符,它把左運算元與正確的運算元,並將結果賦給左運算元 |
c /= a 相當於= c / a |
| %= |
模量AND賦值操作符,它需要使用兩個運算元的模量和分配結果左運算元 |
c %= a is equivalent to c = c % a |
| **= |
指數AND賦值運算子,執行指數(功率)計算操作符和賦值給左運算元 |
c = a 相當於 c = c a |
| //= |
地板除,並分配一個值,執行地板除對操作和賦值給左運算元 |
c //= a 相當於 c = c // a |
4.4位元運算
| 操作符 |
描述符 |
樣本 |
| & |
二進位和複製操作了一下,結果,如果它存在於兩個運算元。 |
(a & b) = 12 即 0000 1100 |
| | |
二進位或複製操作了一個位元,如果它存在一個運算元中。 |
(a |
b) = 61 即 0011 1101 |
| ^ |
二進位異或運算子的副本,如果它被設定在一個運算元而不是兩個位元。 |
(a ^ b) = 49 即 0011 0001 |
| ~ |
二進位的補運算子是一元的,並有“翻轉”位的效果。 |
(~a ) = -61 即 1100 0011以2的補碼形式由於帶符號位元。 |
| << |
二進位向左移位元運算符。左運算元的值左移由右運算元指定的位元。 |
a << 2 = 240 即 1111 0000 |
| >> |
二進位向右移位元運算符。左運算元的值是由右運算元指定的位元向右移動。 |
a >> 2 = 15 即 0000 1111 |
4.5邏輯運算
| 操作符 |
描述符 |
樣本 |
| and |
所謂邏輯與運算子。如果兩個運算元都是真的,那麼則條件成立。 |
(a and b) 為 true. |
| or |
所謂邏輯OR運算子。如果有兩個運算元都是非零然後再條件變為真。 |
(a or b) 為 true. |
| not |
所謂邏輯非運算子。用於反轉運算元的邏輯狀態。如果一個條件為真,則邏輯非運算子將返回false。 |
not(a and b) 為 false. |
4.6二、三元運算
result = 值1 if條件 else 值2如果條件為真:result=值1如果條件為假:result=值2Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:18:55) [MSC v.1900 64 bit (AMD64)] on win32Type "help", "copyright", "credits" or "license" for more information.>>> a,b,c = 1,3,5>>> d = a if a>b else c>>> d5>>> d = a if a <b else c>>> d1
4.7進位類型
二進位,01
八進位,01234567
十進位,0123456789
十六進位,0123456789ABCDEF
5、bytes類型
Python 3最重要的新特性大概要算是對文本和位元據作了更為清晰的區分。文本總是Unicode,由str類型表示,位元據則由bytes類型表示。Python 3不會以任意隱式的方式混用str和bytes,正是這使得兩者的區分特別清晰。你不能拼接字串和位元組包,也無法在位元組包裡搜尋字串(反之亦然),也不能將字串傳入參數為位元組包的函數(反之亦然)。這是件好事。不管怎樣,字串和位元組包之間的界線是必然的,下面的圖解非常重要,務請牢記於心:
#!/usr/bin/python# _*_ coding:utf-8 _*_# Aothr: Kim#string和bytes類型轉換,使用encode和decode的方式#decode==>bytes-->string#encode==>string-->bytes#舉例msg = "我愛北京天安門"print(msg)print(msg.encode(encoding="utf-8") #轉換成bytesprint(msg.encode(encoding="utf-8").decode(encoding="utf-8")) #轉換成字串執行結果如下:我愛北京天安門b‘\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8‘我愛北京天安門應用情境:socket中傳輸必須是二進位,此時就需要將string進行轉換成bytes類型
Python入門篇(二)