目前Python主要應用領域:html
Python的優缺點java
先看優勢python
再看缺點:linux
固然,Python還有一些其它的小缺點,在這就不一一列舉了,我想說的是,任何一門語言都不是完美的,都有擅長和不擅長作的事情,建議各位不要拿一個語言的劣勢去跟另外一個語言的優點來去比較,語言只是一個工具,是實現程序設計師思想的工具,就像咱們以前中學學幾什麼時候,有的時候須要要圓規,有的時候須要用三角尺同樣,拿相應的工具去作它最擅長的事纔是正確的選擇。以前不少人問我Shell和Python到底哪一個好?我回答說Shell是個腳本語言,但Python不僅是個腳本語言,能作的事情更多,而後又有鑽牛角尖的人說徹底不必學Python, Python能作的事情Shell均可以作,只要你足夠牛B,而後又舉了用Shell能夠寫俄羅斯方塊這樣的遊戲,對此我能說表達只能是,不要跟SB理論,SB會把你拉到跟他同樣的高度,而後用充分的經驗把你打倒。c++
Python解釋器
當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py文件。git
因爲整個Python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器。程序員
CPythonweb
當咱們從Python官方網站下載並安裝好Python 2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python就是啓動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。算法
IPythonshell
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用>>>做爲提示符,而IPython用In [序號]:做爲提示符。
PyPy
PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。
絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。
Jython
Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。
IronPython
IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。
Python的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性
In summary : Python 2.x is legacy, Python 3.x is the present and future of the language
Python 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement of
extended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x is
under active development and has already seen over five years of stable releases, including version 3.3 in 2012,
3.4 in 2014, and 3.5 in 2015. This means that all recent standard library improvements, for example, are only
available by default in Python 3.x.
Guido van Rossum (the original creator of the Python language) decided to clean up Python 2.x properly, with less regard for backwards compatibility than is the case for new releases in the 2.x range. The most drastic improvement is the better Unicode support (with all text strings being Unicode by default) as well as saner bytes/Unicode separation.
Besides, several aspects of the core language (such as print and exec being statements, integers using floor division) have been adjusted to be easier for newcomers to learn and to be more consistent with the rest of the language, and old cruft has been removed (for example, all classes are now new-style, "range()" returns a memory efficient iterable, not a list as in 2.x).
py2與3的詳細區別
PRINT IS A FUNCTION
The statement has been replaced with a print() function, with keyword arguments to replace most of the special syntax of the old statement (PEP 3105). Examples:
Old: print "The answer is", 2*2 New: print("The answer is", 2*2) Old: print x, # Trailing comma suppresses newline New: print(x, end=" ") # Appends a space instead of a newline Old: print # Prints a newline New: print() # You must call the function! Old: print >>sys.stderr, "fatal error" New: print("fatal error", file=sys.stderr) Old: print (x, y) # prints repr((x, y)) New: print((x, y)) # Not the same as print(x, y)!
You can also customize the separator between items, e.g.:
print("There are <", 2**32, "> possibilities!", sep="")
ALL IS UNICODE NOW
今後再也不爲討厭的字符編碼而煩惱
還能夠這樣玩: (A,*REST,B)=RANGE(5)
<strong>>>> a,*rest,b = range(5) >>> a,rest,b (0, [1, 2, 3], 4) </strong>
某些庫更名了
Old Name | New Name |
---|---|
_winreg | winreg |
ConfigParser | configparser |
copy_reg | copyreg |
Queue | queue |
SocketServer | socketserver |
markupbase | _markupbase |
repr | reprlib |
test.test_support | test.support |
windows
一、下載安裝包
https://www.python.org/downloads/
二、安裝
默認安裝路徑:C:\python27
三、配置環境變量
【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】
如:原來的值;C:\python27,切記前面有分號
linux,mac
無需安裝,原裝Python環境
ps:若是自帶2.6,請更新至2.7
命令行執行
文件執行
[root@iZ25lubr06bZ ~]# vim hello.py print("Hello World!") print("Hello again.") print("Hello again \ntwo.") [root@iZ25lubr06bZ ~]# python3 hello.py Hello World! Hello again. Hello again two. [root@iZ25lubr06bZ ~]# ll hello.py -rw-r--r-- 1 root root 72 Jul 19 12:09 hello.py [root@iZ25lubr06bZ ~]# chmod +x hello.py [root@iZ25lubr06bZ ~]# ll hello.py -rwxr-xr-x 1 root root 72 Jul 19 12:09 hello.py [root@iZ25lubr06bZ ~]# ./hello.py ./hello.py: line 1: syntax error near unexpected token `"Hello World!"' ./hello.py: line 1: `print("Hello World!")' #不能解釋語法 [root@iZ25lubr06bZ ~]# vim hello.py #!/usr/bin/env python3 #用什麼語言去解釋 print("Hello World!") print("Hello again.") print("Hello again \ntwo.") [root@iZ25lubr06bZ ~]# ./hello.py Hello World! Hello again. Hello again two.
指定解釋器
上一步中執行 python hello.py 時,明確的指出 hello.py 腳本由 python 解釋器來執行。
若是想要相似於執行shell腳本同樣執行python腳本,例: ./hello.py ,那麼就須要在 hello.py 文件的頭部指定解釋器。
若只有系統默認python可寫爲「#!/usr/bin/python」,若存在多個版本或者非默認安裝的python,用env去查找python解釋器。最好的寫法以下
#!/usr/bin/env python print "hello,world"
如此一來,執行: ./hello.py 便可。
ps:執行前需給予 hello.py 執行權限,chmod 755 hello.py
#!/usr/bin/env python3 # -*- coding:utf8 -*- # Author: Erick Zhang #聲明變量 name = "Alex Li" name2 = name print("My name is ", name,name2) name = "PaoChe Ge" print(name,name2)
運行結果:
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/var2.py My name is Alex Li Alex Li PaoChe Ge Alex Li
變量定義規則:
變量起名
- 顯示,要通俗易懂
字符編碼
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256-1,因此,ASCII碼最多隻能表示 255 個符號。
關於中文
爲了處理漢字,程序員設計了用於簡體中文的GB2312和用於繁體中文的big5。
GB2312(1980年)一共收錄了7445個字符,包括6763個漢字和682個其它符號。漢字區的內碼範圍高字節從B0-F7,低字節從A1-FE,佔用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
GB2312 支持的漢字太少。1995年的漢字擴展規範GBK1.0收錄了21886個符號,它分爲漢字區和圖形符號區。漢字區包括21003個字符。2000年的 GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。如今的PC平臺必須支持GB18030,對嵌入式產品暫不做要求。因此手機、MP3通常只支持GB2312。
從ASCII、GB23十二、GBK 到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中老是有相同的編碼,後面的標準支持更多的字符。在這些編碼中,英文和中文能夠統一地處理。區分中文編碼的方法是高字節的最高位不爲0。按照程序員的稱呼,GB23十二、GBK到GB18030都屬於雙字節字符集 (DBCS)。
有的中文Windows的缺省內碼仍是GBK,能夠經過GB18030升級包升級到GB18030。不過GB18030相對GBK增長的字符,普通人是很難用到的,一般咱們仍是用GBK指代中文Windows內碼。
顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode
Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,
注:此處說的的是最少2個字節,可能更多
UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存...
因此,python解釋器在加載.py文件中的代碼時,會對內容進行編碼(默認ASCII),在python2中若是是以下代碼的話:
報錯:ascii碼沒法顯示中文
#!/usr/bin/env python name = "你好,世界" print(name)
運行結果
C:\Python27\python.exe D:/oldboy_python/day1/coding.py File "D:/oldboy_python/day1/coding.py", line 5 SyntaxError: Non-ASCII character '\xe4' in file D:/oldboy_python/day1/coding.py on line 5, but no encoding declared; see http://python.org/dev/peps/pep-0263/ for details
改正:應該顯示的告訴python解釋器,用什麼編碼來執行源代碼
#!/usr/bin/env python # -*- coding: utf-8 -*- name = "你好,世界" print(name)
註釋
單行註釋
#代碼
多行註釋
"""
代碼
"""
一、新建一個文件interaction.py,輸入以下內容
username = input("username:") password = input("password:") print(username,password)
運行結果
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/interaction.py username:alex password:123456 alex 123456
二、將interaction.py文件改成以下內容
name = input("name:") age = input("age:") job = input("job:") salary = input("salary:") info = ''' -------- info of ''' + name + ''' -------- Name:''' + name + ''' Age:''' + age + ''' Job:''' + job + ''' Salary:''' + salary print(info)
運行結果
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/interaction.py name:alex age:23 job:IT salary:20000 -------- info of alex -------- Name:alex Age:23 Job:IT Salary:20000
三、繼續修改interation.py的內容
name = input("name:") age = input("age:") job = input("job:") salary = input("salary:") info = ''' ------- info of %s ------- Name:%s Age:%s Job:%s Salary:%s ''' % (name,name,age,job,salary) print(info)
運行結果
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/interaction.py name:alex age:23 job:IT salary:3000 ------- info of alex ------- Name:alex Age:23 Job:IT Salary:3000
四、將age的修改成%d
name = input("name:") age = input("age:") job = input("job:") salary = input("salary:") info = ''' ------- info of %s ------- Name:%s Age:%d Job:%s Salary:%s ''' % (name,name,age,job,salary) print(info)
運行結果出報錯
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/interaction.py name:alex age:23 job:IT salary:3000 Traceback (most recent call last): File "F:/oldboy_python/day1/interaction.py", line 30, in <module> ''' % (name,name,age,job,salary) TypeError: %d format: a number is required, not str
五、python3默認全部輸入都是字符串,須要將字符串強制轉換爲int類型
name = input("name:") age = int(input("age:")) job = input("job:") salary = input("salary:") info = ''' ------- info of %s ------- Name:%s Age:%d Job:%s Salary:%s ''' % (name,name,age,job,salary) print(info)
運行結果
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/interaction.py name:alex age:23 job:IT salary:3000 ------- info of alex ------- Name:alex Age:23 Job:IT Salary:3000
六、python2裏的raw_input與python3中input功能徹底是同樣的。python2中也有input函數,但它輸入的是什麼格式就是什麼格式
input函數在python2中默認不加引號表明輸入的是一個變量,加引號表明輸入的是字符串
7.利用{}和變量名
info2 = ''' ------- info of {_name} ------- Name:{_name} Age:{_age} Job:{_job} Salary:{_salary} ''' .format (_name=name, _age=age, _job=job, _salary=salary) print(info2)
運行結果
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/interaction.py name:alex age:18 job:IT salary:4000 ------- info of alex ------- Name:alex Age:18 Job:IT Salary:4000
8.利用{}加數字,必須從0開始表明第一個參數
info3 = ''' ------- info of {0} ------- Name:{0} Age:{1} Job:{2} Salary:{3} '''.format(name,age,job,salary) print(info3)
運行結果
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/interaction.py name:alex age:18 job:IT salary:4000 ------- info of alex ------- Name:alex Age:18 Job:IT Salary:4000
8.密碼密文
新建password.py
import getpass username = input("username:") password = getpass.getpass("password:") print(username,password)
在cmd命令行運行(pycharm不支持getpass),密碼輸入時不會明文顯示
C:\Users\Administrator>python F:\oldboy_python\day1\passwd.py username:alex password: alex fsdf
1.簡單if...else...語句
_username = 'alex' _password = 'abc123' username = input("username:") password = input("password:") if _username == username and _password == password: print("Welcome user {name} login ...".format(name=username)) else: print("Invalid username or password!")
運行輸入的錯誤結果:
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/passwd.py username:alex password:bdf Invalid username or password!
運行輸入正確結果:
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/passwd.py username:alex password:abc123 Welcome user alex login ..
2.猜年齡
新建文件guess.py
age_of_oldboy = 56 guess_age = int(input("guess age:")) if guess_age == age_of_oldboy: print("yes,you got it.") elif guess_age > age_of_oldboy: print("think smaller ...") else: print("think bigger!")
運行結果,每次運行輸入三個不一樣的數
"C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/guess.py guess age:23 think bigger! "C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/guess.py guess age:57 think smaller ... "C:\Program Files\Python36\python.exe" F:/oldboy_python/day1/guess.py guess age:56 yes,you got it.
1.無限循環,count一直在累加
count = 0 while True: print("count:",count) count = count + 1 #count +=1
2.跳出循環break
count = 0 while True: print("count:",count) count = count + 1 #count +=1 if count == 1000: break
3.猜年齡,利用break結束
age_of_oldboy = 56 while True: guess_age = int(input("guess age:")) if guess_age == age_of_oldboy: print("yes,you got it.") break elif guess_age > age_of_oldboy: print("think smaller ...") else: print("think bigger!")
運行結果:
"C:\Program Files\Python36\python.exe" D:/oldboy_python/day1/guess.py guess age:23 think bigger! guess age:59 think smaller ... guess age:56 yes,you got it.
4.經過if限制次數
age_of_oldboy = 56 count = 0 while True: if count ==3: break guess_age = int(input("guess age:")) if guess_age == age_of_oldboy: print("yes,you got it.") break elif guess_age > age_of_oldboy: print("think smaller ...") else: print("think bigger!") count += 1
運行結果:
"C:\Program Files\Python36\python.exe" D:/oldboy_python/day1/guess.py guess age:23 think bigger! guess age:34 think bigger! guess age:78 think smaller ...
5.while直接限制次數
age_of_oldboy = 56 count = 0 while count < 3: guess_age = int(input("guess age:")) if guess_age == age_of_oldboy: print("yes,you got it.") break elif guess_age > age_of_oldboy: print("think smaller ...") else: print("think bigger!") count += 1
運行結果:
"C:\Program Files\Python36\python.exe" D:/oldboy_python/day1/guess.py guess age:23 think bigger! guess age:45 think bigger! guess age:99 think smaller ...
5.輸出提示次數太多
age_of_oldboy = 56 count = 0 while count < 3: guess_age = int(input("guess age:")) if guess_age == age_of_oldboy: print("yes,you got it.") break elif guess_age > age_of_oldboy: print("think smaller ...") else: print("think bigger!") count += 1 else: print("you have tried too many times...fuck off!")
運行結果:
"C:\Program Files\Python36\python.exe" D:/oldboy_python/day1/guess.py guess age:23 think bigger! guess age:45 think bigger! guess age:90 think smaller ... you have tried too many times...fuck off!
6.自由選擇超過三次是否繼續
age_of_oldboy = 56 count = 0 while count < 3: guess_age = int(input("guess age:")) if guess_age == age_of_oldboy: print("yes,you got it.") break elif guess_age > age_of_oldboy: print("think smaller ...") else: print("think bigger!") count += 1 if count == 3: continue_confirm = input("do you want to keep guessing...?") if continue_confirm != 'n': count = 0
運行結果:
"C:\Program Files\Python36\python.exe" D:/oldboy_python/day1/guess任性玩.py guess age:23 think bigger! guess age:45 think bigger! guess age:67 think smaller ... do you want to keep guessing...?y guess age:34 think bigger! guess age:67 think smaller ... guess age:33 think bigger! do you want to keep guessing...?n Process finished with exit code 0
1.簡單for循環
for i in range(10): print("loop",i)
運行結果:
"C:\Program Files\Python36\python.exe" D:/oldboy_python/day1/while.py loop 0 loop 1 loop 2 loop 3 loop 4 loop 5 loop 6 loop 7 loop 8 loop 9
2.for循環猜年齡
age_of_oldboy = 56 count = 0 for i in range(3): guess_age = int(input("guess age:")) if guess_age == age_of_oldboy: print("yes,you got it.") break elif guess_age > age_of_oldboy: print("think smaller ...") else: print("think bigger!") else: print("you have tried too many times...fuck off!")
運行結果:
"C:\Program Files\Python36\python.exe" D:/oldboy_python/day1/guess.py guess age:23 think bigger! guess age:44 think bigger! guess age:87 think smaller ... you have tried too many times...fuck off!
3.按指定步長打印數字
for i in range(0,10,2): print("loop",i)
運行結果:
"C:\Program Files\Python36\python.exe" D:/oldboy_python/day1/while.py loop 0 loop 2 loop 4 loop 6 loop 8
4.continue用法,跳出本次循環,進入下一次循環
for i in range(0,10): if i < 5: print("loop ",i) else: continue print("hehe...")
運行結果:
loop 0 hehe... loop 1 hehe... loop 2 hehe... loop 3 hehe... loop 4 hehe...
5.嵌套for循環
for i in range(10): print('------------') for j in range(10): print(j)
for i in range(10): print('------------') for j in range(10): print(j) if j >5: break
1.博客
2.編寫登錄接口
3.多級菜單
1.sys模塊
import sys # print(sys.path) # 打印環境變量 print(sys.argv) # 打印參數 print(sys.argv[2])
2.os模塊
import os # cmd_res = os.system("ls -l") # 執行命令不保存結果 # print(cmd_res) # 0是命令的返回值,表明執行成功 cmd_res1 = os.popen("ls -l") # 將對象的內存地址傳給變量 cmd_res2 = os.popen("ls -l").read() # 取出內存地址的內容 print(cmd_res1) # 打印對象內存地址 print(cmd_res2) os.mkdir("new_dir") # 建立目錄
3.本身寫模塊引用
編寫模塊文件login.py
_username = 'alex' _password = '123' user = input("請輸入用戶名:") pwd = input("請輸入密碼:") if user == _username and pwd == _password: print("Welcome user %s login!" % user) else: print("Wrong username or password!") # 打印輸入的內容 print(user, pwd)
在同級建立python文件引用
import login
運行結果:
請輸入用戶名:dsf 請輸入密碼:fsf Wrong username or password! dsf fsf
若將lonin.py移動到new_dir目錄,會致使引用將會失敗,報錯相似以下:
Traceback (most recent call last): File "/Users/erick/PycharmProjects/oldboy_python/day1/sys_mod.py", line 6, in <module> import login ModuleNotFoundError: No module named 'login'
將lonin.py移動到python的安裝目錄下lib/site-packages中,能夠在代碼文件中直接引用
import login
1.python是一門解釋型語言
我初學Python時,聽到的關於Python的第一句話就是,Python是一門解釋性語言,我就這樣一直相信下去,直到發現了.pyc文件的存在。若是是解釋型語言,那麼生成的.pyc文件是什麼呢?c應該是compiled的縮寫纔對啊!
2.解釋型和編譯型語言
計算機是不可以識別高級語言的,因此當咱們運行一個高級語言程序的時候,就須要一個「翻譯機」來從事把高級語言轉變成計算機能讀懂的機器語言的過程。這個過程分紅兩類,第一種是編譯,第二種是解釋。
編譯型語言在程序執行以前,先會經過編譯器對程序執行一個編譯的過程,把程序轉變成機器語言。運行時就不須要翻譯,而直接執行就能夠了。最典型的例子就是C語言。
解釋型語言就沒有這個編譯的過程,而是在程序運行的時候,經過解釋器對程序逐行做出解釋,而後直接運行,最典型的例子是Ruby。
經過以上的例子,咱們能夠來總結一下解釋型語言和編譯型語言的優缺點,由於編譯型語言在程序運行以前就已經對程序作出了「翻譯」,因此在運行時就少掉了「翻譯」的過程,因此效率比較高。可是咱們也不能一律而論,一些解釋型語言也能夠經過解釋器的優化來在對程序作出翻譯時對整個程序作出優化,從而在效率上超過編譯型語言。
此外,隨着Java等基於虛擬機的語言的興起,咱們又不能把語言純粹地分紅解釋型和編譯型這兩種。
用Java來舉例,Java首先是經過編譯器編譯成字節碼文件,而後在運行時經過解釋器給解釋成機器文件。因此咱們說Java是一種先編譯後解釋的語言。
3.python究竟是什麼
其實Python和Java/C#同樣,也是一門基於虛擬機的語言,咱們先來從表面上簡單地瞭解一下Python程序的運行過程吧。
當咱們在命令行中輸入python hello.py時,實際上是激活了Python的「解釋器」,告訴「解釋器」:你要開始工做了。但是在「解釋」以前,其實執行的第一項工做和Java同樣,是編譯。
熟悉Java的同窗能夠想一下咱們在命令行中如何執行一個Java的程序:
javac hello.java
java hello
4.簡述python的運行過程
在說這個問題以前,咱們先來講兩個概念,PyCodeObject和pyc文件。
咱們在硬盤上看到的pyc天然沒必要多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。咱們先簡單知道就能夠了,繼續向下看。
當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。
當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,若是找到,則直接載入,不然就重複上面的過程。
因此咱們應該這樣來定位PyCodeObject和pyc文件,咱們說pyc文件實際上是PyCodeObject的一種持久化保存方式。
1.數字
2 是一個整數的例子。
長整數 不過是大一些的整數。
3.23和52.3E-4是浮點數的例子。E標記表示10的冪。在這裏,52.3E-4表示52.3 * 10-4。
(-5+4j)和(2.3-4.6j)是複數的例子,其中-5,4爲實數,j爲虛數,數學中表示覆數是什麼?。
int(整型)
在32位機器上,整數的位數爲32位,取值範圍爲-231~231-1,即-2147483648~2147483647
在64位系統上,整數的位數爲64位,取值範圍爲-263~263-1,即-9223372036854775808~9223372036854775807
long(長整型)
跟C語言不一樣,Python的長整數沒有指定位寬,即:Python沒有限制長整數數值的大小,但實際上因爲機器內存有限,咱們使用的長整數數值不可能無限大。
注意,自從Python2.2起,若是整數發生溢出,Python會自動將整數數據轉換爲長整數,因此現在在長整數數據後面不加字母L也不會致使嚴重後果了。
注:python3中只有整型沒有長整型
float(浮點型)
先掃盲 http://www.cnblogs.com/alex3714/articles/5895848.html
浮點數用來處理實數,即帶有小數的數字。相似於C語言中的double類型,佔8個字節(64位),其中52位表示底,11位表示指數,剩下的一位表示符號。
complex(複數)
複數由實數部分和虛數部分組成,通常形式爲x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裏的x和y都是實數。
注:Python中存在小數字池:-5 ~ 257
2.布爾值
真或假
1 或 0
TRUE or False
3.數據運算
算數運算:
>>> 10 % 2 0 >>> 10 % 3 1 >>> 11 % 2 1 >>> 8 % 2 0 >>> 10.3 // 3 3.0 >>> 10.3 / 3 3.4333333333333336
比較運算:
注:<> 在python3中不支持此運算符
賦值運算符:
邏輯運算:
>>> a,b,c = 3,5,7 >>> a > 2 and c < 7 False >>> a > 2 and c < 8 True >>> a > 2 and c < 8 and b > 7 False >>> a > 2 and c < 8 and b > 4 True >>> a > 2 and c < 8 and b > 4 or c == 8 True >>> a > 2 and c < 2 and b > 4 or c == 8 False >>> if not a > 2 and c < 2 and b > 4 or c == 8 :print('ddd') ... >>> a = '333' >>> if not a.isdigit():print('ddd') ... >>> if a.isdigit():print('ddd') ... ddd
成員運算:
>>> a = [1,2,3,4] >>> if 1 not in a:print('sdfsf') ... >>> if 31 not in a:print('sdfsf') ... sdfsf
身份運算:
>>> a [1, 2, 3, 4] >>> type(a) <class 'list'> >>> type(a) is list True >>> type('333') <class 'str'> >>> type('333') is str
位運算:
#!/usr/bin/python a = 60 # 60 = 0011 1100 b = 13 # 13 = 0000 1101 c = 0 c = a & b; # 12 = 0000 1100 print "Line 1 - Value of c is ", c c = a | b; # 61 = 0011 1101 print "Line 2 - Value of c is ", c c = a ^ b; # 49 = 0011 0001 #相同爲0,不一樣爲1 print "Line 3 - Value of c is ", c c = ~a; # -61 = 1100 0011 print "Line 4 - Value of c is ", c c = a << 2; # 240 = 1111 0000 print "Line 5 - Value of c is ", c c = a >> 2; # 15 = 0000 1111 print "Line 6 - Value of c is ", c
運算符優先級:
1.三元運算
result = 值1 if 條件 else 值2
若是條件爲真:result = 值1
若是條件爲假:result = 值2
>>> a,b,c = 1,3,5 >>> d = a if a > b else c >>> d 5 >>> d = a if a < b else c >>> d 1
2.進制
計算機內存地址和爲何用16進制?
爲何用16進制
一、計算機硬件是0101二進制的,16進制恰好是2的倍數,更容易表達一個命令或者數據。十六進制更簡短,由於換算的時候一位16進制數能夠頂4位2進制數,也就是一個字節(8位進制能夠用兩個16進製表示)
二、最先規定ASCII字符集採用的就是8bit(後期擴展了,可是基礎單位仍是8bit),8bit用2個16進制直接就能表達出來,無論閱讀仍是存儲都比其餘進制要方便
三、計算機中CPU運算也是遵守ASCII字符集,以1六、3二、64的這樣的方式在發展,所以數據交換的時候16進制也顯得更好
四、爲了統一規範,CPU、內存、硬盤咱們看到都是採用的16進制計算
16進制用在哪裏
一、網絡編程,數據交換的時候須要對字節進行解析都是一個byte一個byte的處理,1個byte能夠用0xFF兩個16進制來表達。經過網絡抓包,能夠看到數據是經過16進制傳輸的。
二、數據存儲,存儲到硬件中是0101的方式,存儲到系統中的表達方式都是byte方式
三、一些經常使用值的定義,好比:咱們常常用到的html中color表達,就是用的16進制方式,4個16進制位能夠表達好幾百萬的顏色信息。
3.bytes類型
python 3最重要的新特性大概要算是對文本和二進制數據做了更爲清晰的區分。文本老是Unicode,由str類型表示,二進制數據則由bytes類型表示。Python 3不會以任意隱式的方式混用str和bytes,正是這使得二者的區分特別清晰。你不能拼接字符串和字節包,也沒法在字節包裏搜索字符串(反之亦然),也不能將字符串傳入參數爲字節包的函數(反之亦然)
無論怎樣,字符串和字節包之間的界線是必然的,下面的圖解很是重要,務請牢記於心:
字符串能夠編碼成字節包,而字節包能夠解碼成字符串。
>>> '€20'.encode('utf-8') b'\xe2\x82\xac20' >>> b'\xe2\x82\xac20'.decode('utf-8') '€20' msg = "我愛北京天安門" print(msg) print(msg.encode(encoding="utf-8")) print(msg.encode(encoding="utf-8").decode(encoding="utf-8"))