1、python介紹python
python 是Guido van Rossum建立與1989年聖誕節期間,爲了打發無聊的聖誕節而編寫的一個編程語言,是ABC編程語言的繼承。第一個公開發行版發行於1991年。python 是一種面向對象、直譯式計算機程序設計語言,Python語法簡捷而清晰,具備豐富和強大的類庫。linux
python 特性web
Python 是一種解釋型語言: 這意味着開發過程當中沒有了編譯這個環節。相似於PHP和Perl語言。算法
Python 是交互式語言: 這意味着,您能夠在一個Python提示符,直接互動執行寫你的程序。shell
Python 是面嚮對象語言: 這意味着Python支持面向對象的風格或代碼封裝在對象的編程技術。編程
python 排名windows
前10名編程語言的走勢圖:python3.x
編程語言排行榜 TOP 20 榜單:瀏覽器
因而可知,Python總體呈上升趨勢,反映出Python應用愈來愈普遍而且也逐漸獲得業內的承認!!!框架
python 解釋器的種類
當咱們從Python官方網站下載並安裝好Python 後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python
就是啓動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。
IPython是基於CPython之上的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用>>>
做爲提示符,而IPython用In [序號]:
做爲提示符。
PyPy是另外一個Python解釋器,它的目標是執行速度。PyPy採用JIT技術,對Python代碼進行動態編譯(注意不是解釋),因此能夠顯著提升Python代碼的執行速度。
絕大部分Python代碼均可以在PyPy下運行,可是PyPy和CPython有一些是不一樣的,這就致使相同的Python代碼在兩種解釋器下執行可能會有不一樣的結果。若是你的代碼要放到PyPy下執行,就須要瞭解PyPy和CPython的不一樣點。
Jython是運行在Java平臺上的Python解釋器,能夠直接把Python代碼編譯成Java字節碼執行。
IronPython和Jython相似,只不過IronPython是運行在微軟.Net平臺上的Python解釋器,能夠直接把Python代碼編譯成.Net的字節碼。
一、__future__
模塊
python3的一些特性能夠同過future模塊來導入,例如想要在python2.x中導入python3.x的print函數
from __future__ import print_function print('導入陳功。')
feature | optional in | mandatory in | effect |
---|---|---|---|
nested_scopes | 2.1.0b1 | 2.2 | PEP 227: Statically Nested Scopes |
generators | 2.2.0a1 | 2.3 | PEP 255: Simple Generators |
division | 2.2.0a2 | 3.0 | PEP 238: Changing the Division Operator |
absolute_import | 2.5.0a1 | 3.0 | PEP 328: Imports: Multi-Line and Absolute/Relative |
with_statement | 2.5.0a1 | 2.6 | PEP 343: The 「with」 Statement |
print_function | 2.6.0a2 | 3.0 | PEP 3105: Make print a function |
unicode_literals | 2.6.0a2 | 3.0 | PEP 3112: Bytes literals in Python 3000 |
二、print函數
在python3.x 中 print 再也不是語句,而是函數,書寫方式由 print 改成 print()
python 2.x print 'Hello World'
python 3.x print('Hello World')
三、整除,原來1/2(兩個整數相除)結果是0,如今是0.5了
python 2.x >>>1/2 0
python 3.x
>>> 1/2
0.5
四、python 3.x中沒有舊式類,只有新式類
在Python 3中,沒有舊式類,只有新式類,也就是說不用再像這樣 class Foobar(object): pass 顯式地子類化object,聲明的都是新式類。
五、xrange重命名爲range
python 3.x 中不存在 xrange 函數,而range 函數返回的就是迭代器對象,同時更改的還有一系列內置函數及方法, 都返回迭代器對象, 而不是列表或者 元組, 好比 filter, map, dict.items 等。
六、!=取代 < >
python 3.x中再也不存在 <>符號,判斷不等於的話,使用 !=號
七、long重命名爲int
python3 廢棄了 long 長整型表示方法,統一爲 int , 支持高精度整數運算
八、except Exception, e變成except (Exception) as e
注意該寫法,python 3.x中再使用以前的寫法會報錯
九、next()函數 和.next()方法
在python3.x中只有 next() 函數,廢棄了.next()方法
十、字符串格式化 由原先的 % ,在py3.x中提倡是用 format函數
十一、python3.x中某些類庫作了調整
例如python 2.x中 urllib 和 urllib2 兩個庫 在python 3.x中合併成了一個庫 urllib
由於計算機只能處理數字,若是要處理文本,就必須先把文本轉換爲數字才能處理。最先的計算機在設計時採用8個比特(bit)做爲一個字節(byte),因此,一個字節能表示的最大的整數就是255(二進制11111111=十進制255),若是要表示更大的整數,就必須用更多的字節。好比兩個字節能夠表示的最大整數是65535。
因爲計算機是美國人發明的,所以,最先只有127個字母被編碼到計算機裏,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱爲ASCII
編碼,好比大寫字母A
的編碼是65
,小寫字母z
的編碼是122。
要處理中文顯然一個字節是不夠的,至少須要兩個字節,並且還不能和ASCII編碼衝突,因此,中國製定了GB2312
編碼,用來把中文編進去。
全世界有上百種語言,日本不承認中文的編碼,日本把日文編到Shift_JIS
裏,韓國也不承認中文的編碼,韓國把韓文編到Euc-kr
裏,各國有各國的標準,就會不可避免地出現衝突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。
Unicode就誕生了。Unicode把全部語言都統一到一套編碼裏,這樣就不會再有亂碼問題了。
Unicode 最經常使用的是用兩個字節表示一個字符(部分偏僻的字符,就須要4個字節)。現代操做系統和大多數編程語言都直接支持Unicode。
可是,若是都採用Unicode的編碼的話,亂碼問題今後消失了。可是,若是你寫的文本基本上所有是英文的話,用Unicode編碼比ASCII編碼須要多一倍的存儲空間,在存儲和傳輸上就十分不划算。
因此,爲了節約空間,又出現了把Unicode編碼轉化爲「可變長編碼」的UTF-8
編碼。UTF-8編碼把一個Unicode字符根據不一樣的數字大小編碼成1-6個字節,經常使用的英文字母被編碼成1個字節,漢字一般是3個字節,只有很生僻的字符纔會被編碼成4-6個字節。若是你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間。
到這裏,編碼的歷史大概介紹了一遍,總結一下,在計算機內存中,統一使用Unicode編碼,當須要保存到硬盤或者須要傳輸的時候,就轉換爲UTF-8編碼。
下圖是編碼存儲與讀取轉換的過程
python2.x版本原生支持ASCII編碼,後來添加了對Unicode的支持,以Unicode表示的字符串用u'...'
表示。
python代碼中包含中文的時候,在保存代碼時,就須要務必指定保存爲UTF-8編碼。當Python解釋器讀取源代碼時,爲了讓它按UTF-8編碼讀取,咱們一般在文件開頭寫上這兩行:
#!/usr/bin/env python # -*- coding: utf-8 -*-
第一行適用於類Unix系統,告訴系統使用什麼解釋器
第二行聲明代碼編碼類型
變量的概念基本上和初中代數的方程變量是一致的,只是在計算機程序中,變量不只能夠是數字,還能夠是任意數據類型。
變量在程序中就是用一個變量名錶示了,變量名必須是大小寫英文、數字和_的組合,且不能用數字開頭。
在python中給變量賦值使用 = 號,python是弱類型的動態編程語言,在給變量賦值以前不須要聲明變量的類型,同一個變量能夠反覆複製,並且能夠是不一樣的類型。
例如:
>>> a = 'abc' >>> a_ = 123 >>> a_123 = True
python把一個值賦值給變量,等於在內存中開闢了一塊地址存儲該值。
>>> a = ‘QWE’
執行上邊的語句時,等於幹了兩件事情:
一、在內存中建立一個‘QWE’的字符串
二、在內存中建立一個名字爲a的變量,並將他指向‘QWE’
>>> b = a
>>> a = 'ASD'
>>> print (a, '', b)
ASD QWE
當將變量a複製給變量b的時候,其實是將變量b指向變量a的所指向的數據。
當再次給變量a賦值時,a指向了另外一個變量空間。
python3.x中使用 input函數獲取用戶的輸入,input的函數把用戶的一切輸入都看成是字符串。
#!/usr/bin/env python #_*_coding:utf-8_*_ user_input = input('input your name:' ) print (user_input)
輸入密碼時,若是想要不可見,須要利用getpass 模塊中的 getpass方法
#!/usr/bin/env python # -*- coding: utf-8 -*- import getpass # 將用戶輸入的內容賦值給 name 變量 pwd = getpass.getpass("請輸入密碼:") # 打印輸入的內容 print(pwd)
「一切數據是對象,一切命名是引用」 ,這是python數據類型的核心。
python有如下的數據類型
一、字符串
二、布爾類型
三、整數
四、浮點數
五、複數型
python使用單引號或者雙引號表示字符串,兩種表示功能方式相同
s = 'test' s = "test"
還可以使用'''三引號表示長段的字符串
s = ''' this a test with a lot pf words which show the long string in Python '''
布爾型
布爾型 實際上是整型的子類型,布爾型數據只有兩個取值:True和False,分別對應整型的1和0。
每個Python對象都天生具備布爾值(True或False),進而可用於布爾測試(如用在if、while中)。
如下對象的布爾值都是False:
__nonzero__()
或 __len__()
,而且這些方法返回0或False整型
Python語言的整型至關於C語言中的long型,在32位機器上,整型的位寬爲32位,取值範圍爲-231~231-1,即-2147483648~2147483647;在64位系統上,整型的位寬一般爲64位,取值範圍爲-263~263-1,即-9223372036854775808~9223372036854775807。
Python中的整數不只能夠用十進制表示,也能夠用八進制和十六進制表示。當用八進制表示整數時,數值前面要加上一個前綴「0」;當用十六進制表示整數時,數字前面要加上前綴0X或0x。
長整型
在python 2.x中還存在長整型,跟C語言不一樣,Python的長整型沒有指定位寬,也就是說Python沒有限制長整型數值的大小,可是實際上因爲機器內存有限,因此咱們使用的長整型數值不可能無限大。
在使用過程當中,咱們如何區分長整型和整型數值呢?一般的作法是在數字尾部加上一個大寫字母L或小寫字母l以表示該整數是長整型的。
浮點型
浮點型用來處理實數,即帶有小數的數字。Python的浮點型至關於C語言的雙精度浮點型。實數有兩種表示形式,一種是十進制數形式,它由數字和小數點組成,而且這裏的小數點是不可或缺的,如1.23,123.0,0.0等;另外一種是指數形式,好比789e3或789E3表示的都是789×103,字母e(或E)以前必須有數字,字母e(或E)以後能夠有正負號,表示指數的符號,若是沒有則表示正號;此外,指數必須爲整數。
複數類型
複數由實數部分和虛數部分組成,通常形式爲x+yj,其中的x是複數的實數部分,y是複數的虛數部分,這裏的x和y都是實數。注意,虛數部分的字母j大小寫均可以,如5.6+3.1j,5.6+3.1J是等價的。
對於複數類型變量n,咱們還能夠用n.real來提取其實數部分,用n.imag來提取其虛數部分,用n.conjugate返回複數n的共軛複數。
條件判斷
根據年齡打印不一樣的內容,在Python程序中,用if
語句實現:
1 age = 20 2 if age >= 18: 3 print('your age is', age) 4 print('adult')
根據Python的縮進規則,若是if
語句判斷是True
,就把縮進的兩行print語句執行了,不然,什麼也不作。
也能夠給if
添加一個else
語句,意思是,若是if
判斷是False
,不要執行if
的內容,去把else
執行了:
age = 3 if age >= 18: print('your age is', age) print('adult') else: print('your age is', age) print('teenager')
還能夠用elif
作更細緻的判斷:
age = 3 if age >= 18: print('adult') elif age >= 6: print('teenager') else: print('kid')
elif
是else if
的縮寫,徹底能夠有多個elif
,因此if
語句的完整形式就是:
if <條件判斷1>: <執行1> elif <條件判斷2>: <執行2> elif <條件判斷3>: <執行3> else: <執行4>
循環
for 循環
循環10次
for i in range(10): print("loop:", i )
輸出
loop: 0 loop: 1 loop: 2 loop: 3 loop: 4 loop: 5 loop: 6 loop: 7 loop: 8 loop: 9
改變下條件,遇到小於5的循環次數就不走了,直接跳入下一次循環
for i in range(10): if i<5: continue #不往下走了,直接進入下一次loop print("loop:", i )
再次改變下條件,可是遇到大於5的循環次數就不走了,直接退出
for i in range(10): if i>5: break #不往下走了,直接跳出整個loop print("loop:", i )
name = raw_input("Please input your name:") age = int(raw_input("Please input your age:")) provice = raw_input("Please input your provice:") company = raw_input("Please input your company:") msg = ''' Infomation of user %s ------------------------- name : %s age : %2f provice : %s company : %s -----------End----------- ''' % (name,name,age,provice,company) print msg
Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫
sys
import sys print(sys.argv) #輸出 $ python test.py helo world ['test.py', 'helo', 'world'] #把執行腳本時傳遞的參數獲取到了
os
import os os.system("df -h")
結合一下
import os,sys os.system(''.join(sys.argv[1:])) #把用戶的輸入的參數看成一條命令交給os.system來執行
本身寫個模塊
本身編寫模塊以後將模塊文件放到 /usr/local/lib/pythonx.x/site-packages/ 目錄下
下面添加個自動不全模塊
#!/usr/bin/env python # python startup file import sys import readline import rlcompleter import atexit import os # tab completion readline.parse_and_bind('tab: complete') # history file histfile = os.path.join(os.environ['HOME'], '.pythonhistory') try: readline.read_history_file(histfile) except IOError: pass atexit.register(readline.write_history_file, histfile) del os, histfile, readline, rlcompleter for Linux
# python startup file for window import sys import readline import rlcompleter import atexit import os # tab completion readline.parse_and_bind('tab: complete') del os,readline, rlcompleter
import sys import readline import rlcompleter if sys.platform == 'darwin' and sys.version_info[0] == 2: readline.parse_and_bind("bind ^I rl_complete") else: readline.parse_and_bind("tab: complete") # linux and python3 on mac
注:保存內容爲tab.py,使用import tab命令引用該模塊。該文件存放的位置就是 /usr/local/lib/pythonx.x/site-packages/