計算機自己不能識別高級語言,當咱們運行一個程序的時候,須要一個「翻譯」 來把 高級語言轉換成計算機能讀懂的語言。 「翻譯」過程分兩種:java
java等基於虛擬機的語言興起以後,編程語言又不能單純的在劃分爲編譯型語言或解釋型語言。 java是首先經過編譯器將代碼編譯成字節碼文件,而後在JVM執行java字節碼,將其解釋成機器語言。 因此咱們說java是一種半編譯半解釋的語言。python
C#,在第一次執行的時候,將代碼編譯成IL中間碼文件,而後由JIT編譯器編譯成本地的機器碼執行。 至關於編譯了兩次。mysql
關於python,看下面詳解。linux
1、安裝python:(2.7和3.6通用)程序員
一、windows:sql
1 (1)、下載安裝包 2 https://www.python.org/downloads/ 3 4 (2)、安裝 5 默認安裝路徑:C:\python27 6 7 (3)、配置環境變量 8 【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】 9 如:原來的值;C:\python27,切記前面有分號
二、linux:shell
1 無需安裝,原裝Python環境 2 ps:若是自帶2.6,請更新至2.7
2、python的更新:編程
一、windows:vim
1 從新安裝便可。 windows
二、python:
1 查看默認Python版本 2 python -V 3 4 1、安裝gcc,用於編譯Python源碼 5 yum install gcc 6 7 二、下載源碼包,https://www.python.org/ftp/python/ 8 9 3、解壓並進入源碼文件 10 11 4、編譯安裝 12 ./configure 13 make all 14 make install 15 16 5、查看版本 17 /usr/local/bin/python2.7 -V 18 19 6、修改默認Python版本 20 mv /usr/bin/python /usr/bin/python2.6 21 ln -s /usr/local/bin/python2.7 /usr/bin/python 22 23 7、防止yum執行異常,修改yum使用的Python版本 24 vi /usr/bin/yum 25 將頭部 #!/usr/bin/python 修改成 #!/usr/bin/python2.6
1、python的操做模式:
一、交互模式:
1 >>> import sys 2 >>> print(sys.path) 3 ['D:\\軟件\\pychar\\PyCharm 5.0.3\\helpers\\pydev', 'E:\\python35\\lib\\site-packages\\pymysql3-0.5-py3.5.egg', 'D:\\軟件\\pychar\\PyCharm 5.0.3\\helpers\\pydev', 'E:\\python35\\python35.zip', 'E:\\python35\\DLLs', 'E:\\python35\\lib', 'E:\\python35', 'E:\\python35\\lib\\site-packages', 'D:\\軟件\\pychar\\data']
二、文本模式:
1 vim test.py 2 3 #!/usr/bin/env python 4 # -*- coding:utf8 -*- 5 print 'hellp world' 6 保存退出 7 8 python text.py
三、客戶端模式:
1 使用pychar 5進行編譯
2、python的代碼:
一、錯誤提示:
1 >>> prtin 'hello world' 2 File "<stdin>", line 1 3 prtin 'hello world' 4 ^ 5 SyntaxError: invalid syntax 6 異常類型: 7 SyntaxError:語法錯誤。 8 invalid syntax:無效的語法。
1 >>> print 'hello world' 2 hello world 3 4 >>> exit()
二、正常代碼
在 /data/python 目錄下建立 hello.py 文件,內容以下:
1 print "hello,world"
python內部執行過程以下:
三、編輯器:
Shebang 是一個由井號和歎號構成的字符串行(#!), 其出如今文本文件的第一行的前兩個字符. 在文件中存在Shebang的狀況下, 類Unix操做系統的程序載入器會分析Shebang後的內容, 將這些內容做爲解釋器指令, 並調用該指令, 並將載有Shebang的文件路徑做爲該解釋器的參數。#!先用於幫助內核找到Python解釋器, 可是在導入模塊時, 將會被忽略. 所以只有被直接執行的文件中才有必要加入#!.
上一步中執行 python /data/python/hello.py 時,明確的指出 hello.py 腳本由 python 解釋器來執行。
若是想要相似於執行shell腳本同樣執行python腳本,例: ./hello.py
,那麼就須要在 hello.py 文件的頭部指定解釋器,以下:
1 #!/usr/bin/env python 2 3 print (hello,world)
如此一來,執行: ./hello.py
便可。
注意:執行前需給予 hello.py 執行權限,chmod 755 hello.py
3、python的架構:
瞭解了python程序的執行過程,那麼也應該瞭解python的總體架構是什麼。 python的總體架構能夠分爲三個主要的部分。
1 左邊的部分 python提供的大量模塊、庫 和用戶自定義的模塊。 2 中間的部分 python的核心——解釋器,也能夠叫虛擬機,這裏的箭頭方向是python運行過程當中數據流的方向, Scanner對應詞法分析,用來將文件或命令輸入的每一行代碼切分爲一個個的token; Parser對應語法分析,在Scanner的分析結果上進行語法分析,創建抽象語法樹(AST); Compiler 則根據創建的AST 生成指令集合——字節碼; Code Evaluator 執行字節碼文件,因此又被稱爲虛擬機。 3 右邊的部分 對象/類型、內存分配 和解釋器之間的箭頭表示二者之間的「使用」關係; 運行時狀態與解釋器之間的箭頭表示「修改」關係。python在執行的過程當中會不斷的修改當前解釋器的所處的狀態,在不一樣的狀態之間切換。
4、內容編碼
咱們在顯示器看見的文字圖片等信息在電腦上存儲的時候並非咱們看到的樣子。若是你拆開硬盤,把裏面的盤片拿出來用顯微鏡來看就會看到上面有不少凹凸的地方。和咱們平時見到的光盤相似。凹凸的位置分別表示0和1。這是由於在電腦中電信號只有兩種狀態,有電和沒電。在存儲數據的時候,若是咱們要保存一個字母「A」,那麼就能夠用必定長度的0和1來表示。好比說用「01000001」來表示A。有了這樣的對應關係,咱們就能夠保存咱們平時見到的一些字符了。
因而就是有ASCII(美國(國家)信息交換標準(代)碼),使用7個或8個二進制位進行編碼的方案,最多能夠給256個字符。使用了ASCII碼,不一樣的計算機之間就能夠實現數據的標準化。
可是ASCII使用的時候有一些限制。他最多之能夠表示256個字符。若是有其餘的字符就無能爲力了。ASCII只能表示26個基本的拉丁字母、阿拉伯數字和英式標點。所以也只能用於顯示現代美國英語。
後來計算機世界開始有了其餘語言,ASCII碼已經沒法知足需求。後來不一樣語言的人各自爲本身定製了一套屬於本身的編碼,同時與ASCII保持兼容。這些編碼統稱MBCS,到了這裏你們都開始好似用雙字節。(中國的叫GB*,好比GBK).
在後來有人開始以爲,這麼多編碼,有些編碼之間還不兼容,太讓人頭大了,因而有這麼一羣人就坐在一塊兒想出了一個辦法:全部的語言都使用同一種編碼,這種編碼就是Unicode。 Unicode使用最少2個字節(1個字節=1BYTE=8bit=一個長度爲8的二進制數) 來表示字母和符號等,有時候是4個字節。這樣就解決了上面遇到的問題。
Unicode又叫萬國碼,是業界的一種標準。可是有人又以爲若是我要表示一個ASCII裏的字符,使用unicode來表示不是太浪費空間了嗎,因而就有人想出了另一種解決方案——UTF-8。
UTF-8是對Unicode編碼的壓縮和優化,最大的特色是它採用了變長的編碼方式,他再也不是最少使用2個字節,而是將全部的字符進行分類。ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存…
一、ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256,因此,ASCII碼最多隻能表示 256 個符號。
二、不一樣編碼之間的關係
python2中文件的默認編碼爲ASCII,在文件中含有中文的時候就會報錯,這時,咱們須要是設置一下文件的默認編碼,以下:
#!/usr/bin/env python # -*- coding: UTF-8 -*- # 指定python文件編碼方式
在python3中,文件的默認編碼爲UTF-8,已經不存在這個問題。
5、註釋
當行注視:# 被註釋內容
多行註釋:""" 被註釋內容 """
6、執行腳本傳入參數
Python有大量的模塊,從而使得開發Python程序很是簡潔。類庫有包括三中:
Python內部提供一個 sys 的模塊,其中的 sys.argv 用來捕獲執行執行python腳本時傳入的參數
1 #!/usr/bin/env python 2 # -*- coding: utf-8 -*- 3 4 import sys 5 6 print sys.argv
7、 pyc 文件
執行Python代碼時,若是導入了其餘的 .py 文件,那麼,執行過程當中會自動生成一個與其同名的 .pyc 文件,該文件就是Python解釋器編譯以後產生的字節碼。
ps:代碼通過編譯能夠產生字節碼;字節碼經過反編譯也能夠獲得代碼。
8、Python標識符:
1 1、在python裏,標識符有字母、數字、下劃線組成。 2 3 2、在python中,全部標識符能夠包括英文、數字以及下劃線(_),但不能以數字開頭。 4 5 3、python中的標識符是區分大小寫的。 6 7 4、如下劃線開頭的標識符是有特殊意義的: 8 a、以單下劃線開頭(_foo)的: 9 表明不能直接訪問的類屬性,需經過類提供的接口進行訪問,不能用"from xxx import *"而導入; 10 11 b、以雙下劃線開頭的(__foo)的: 12 表明類的私有成員; 13 14 c、以雙下劃線開頭和結尾的(__foo__)的: 15 表明python裏特殊方法專用的標識,如__init__()表明類的構造函數。
9、python保留字符:
1 and exec not 2 assert finally or 3 break for pass 4 class from print 5 continue global raise 6 def if return 7 del import try 8 elif in while 9 else is with 10 except lambda yield
10、行和縮進:
學習Python與其餘語言最大的區別就是,Python的代碼塊不使用大括號({})來控制類,函數以及其餘邏輯判斷。python最具特點的就是用縮進來寫模塊。
縮進的空白數量是可變的,可是全部代碼塊語句必須包含相同的縮進空白數量,這個必須嚴格執行。
1 if True: 2 3 print "True" 4 else: 5 print "False" 6 7 8 9 如下代碼將會執行錯誤: 10 11 if True: 12 print "Answer" print "True" 13 else: 14 print "Answer" 15 print "False"
所以,在Python的代碼塊中必須使用相同數目的行首縮進空格數。
11、多行語句:
Python語句中通常以新行做爲爲語句的結束符。
可是咱們可使用斜槓( \)將一行的語句分爲多行顯示,以下所示:
1 total = item_one + \ 2 item_two + \ 3 item_three 4 5 語句中包含[], {} 或 () 括號就不須要使用多行鏈接符。以下實例: 6 days = ['Monday', 'Tuesday', 'Wednesday', 7 'Thursday', 'Friday']
12、python的引號:
Python 接收單引號(' ),雙引號(" ),三引號(''' """) 來表示字符串,引號的開始與結束必須的相同類型的。
其中三引號能夠由多行組成,編寫多行文本的快捷語法,經常使用語文檔字符串,在文件的特定地點,被當作註釋
1 word = 'word' 2 sentence = "This is a sentence." 3 paragraph = """This is a paragraph. It is 4 made up of multiple lines and sentences."""
注意:''' ''' 引號除了能當字符串格式化,還能當作註釋來使用
十3、python空行:
函數之間或類的方法之間用空行分隔,表示一段新的代碼的開始。類和函數入口之間也用一行空行分隔,以突出函數入口的開始。
空行與代碼縮進不一樣,空行並非Python語法的一部分。書寫時不插入空行,Python解釋器運行也不會出錯。可是空行的做用在於分隔兩段不一樣功能或含義的代碼,便於往後代碼的維護或重構。
記住:空行也是程序代碼的一部分。
十4、同一行顯示多條語句:
python 能夠在同一行中使用多條語句,語句之間使用分號(;)分割,如下是一個簡單的實例:
1 #!/usr/bin/python 2 import sys; x = 'foo'; sys.stdout.write(x + '\n')