1、Python發展簡介html
一、Python做者簡介java
Python的做者,Guido von Rossum,荷蘭人。1982年,Guido從阿姆斯特丹大學得到了數學和計算機碩士學位。1989年,他創立了Python語言。那時,他還在荷蘭的CWI(Centrum voor Wiskunde en Informatica,國家數學和計算機科學研究院)。1991年初,Python發佈了第一個公開發行版。Guido原居荷蘭,1995移居到美國,並遇到了他如今的妻子。在2003年初,Guido和他的家人,包括他2001年出生的兒子Orlijn一直居住在華盛頓州北弗吉尼亞的郊區。python
1989年,爲了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
1991年,第一個Python編譯器誕生。它是用C語言實現的,並可以調用C語言的庫文件。從一出生,Python已經具備了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊爲基礎的拓展系統。
1999年,Granddaddy of Python web frameworks, Zope 1 was released in 1999
1994年,Python 1.0 - January 1994 增長了 lambda, map, filter and reduce.
2000年,Python 2.0 - October 16, 2000,加入了內存回收機制,構成了如今Python語言框架的基礎
2004年,Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
2006年,Python 2.5 - September 19, 2006
2008年,Python 2.6 - October 1, 2008
2010年,Python 2.7 - July 3, 2010
2014年,In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
2008年,Python 3.0 - December 3, 2008
2009年,Python 3.1 - June 27, 2009
2011年,Python 3.2 - February 20, 2011
2012年,Python 3.3 - September 29, 2012
2014年,Python 3.4 - March 16, 2014
2015年,Python 3.5 - September 13, 2015linux
2015年,Python 3.5.1, documentation released on 07 December 2015.c++
2016年,Python 3.5.2, documentation released on 27 June 2016.web
2016年,Python 3.6.0, documentation released on 23 December 2016.算法
2017年,Python 3.6.1, documentation released on 21 March 2017.shell
參考官方文檔說明:https://www.python.org/doc/versions/編程
若是仔細閱讀的用戶確定會發現,爲何2008年就發佈了Python 3.0版本了,爲何2010年又發佈了Python2.7版本呢,這是由於當時Python3.0發佈時,就不在支持Python2.0的版本,致使不少用戶沒法正常升級使用新版本,因此後來又發佈了一個Python2.7的過渡版本,並且Python2.7會支持到2020年,因此新手仍是從Python3.0入手吧。windows
2、目前Python主要應用領域:
3、Python在一些公司的應用:
4、Python是一門什麼樣的編程語言
編程語言主要從如下幾個角度爲進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每一個分類表明什麼意思呢,咱們一塊兒來看一下。
編譯器是把源程序的每一條語句都編譯成機器語言,並保存成二進制文件,這樣運行時計算機能夠直接以機器語言來運行此程序,速度很快;
而解釋器則是隻在執行程序時,才一條一條的解釋成機器語言給計算機來執行,因此運行速度是不如編譯後的程序運行的快的.
這是由於計算機不能直接認識並執行咱們寫的語句,它只能認識機器語言(是二進制的形式)
編譯型
優勢:編譯器通常會有預編譯的過程對代碼進行優化。由於編譯只作一次,運行時不須要編譯,因此編譯型語言的程序執行效率高。能夠脫離語言環境獨立運行。
缺點:編譯以後若是須要修改就須要整個模塊從新編譯。編譯的時候根據對應的運行環境生成機器碼,不一樣的操做系統之間移植就會有問題,須要根據運行的操做系統環境編譯不一樣的可執行文件。
解釋型
優勢:有良好的平臺兼容性,在任何環境中均可以運行,前提是安裝瞭解釋器(虛擬機)。靈活,修改代碼的時候直接修改就能夠,能夠快速部署,不用停機維護。
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。
python是一門動態解釋性的強類型定義語言。
5、Python的優缺點
先看優勢:
一、Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
二、開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
三、高級語言——當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節。
四、可移植性——因爲它的開源本質,Python以及被移植到許多平臺上(通過改動使它可以工做在不一樣平臺上)。若是你當心的避免使用依賴於系統的特性,那麼你的Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行。
五、可擴展性——若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
六、可嵌入性——你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳步功能。
再看缺點:
一、速度慢,Python的運行速度相比C語言確實慢不少,跟Java相比也要慢一些,所以這是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來!
二、代碼不能加密,由於Python是解釋性語言,它的源碼都是以明文形式存放的,不過我不認爲這算是一個缺點,若是你的項目源代碼必須是加密的,那你一開始就不該該用Python來去實現。
三、線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在windows上爲Win thread,徹底由操做系統調度線程的執行。一個Python解釋器進程內有一條主線路,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止線程的並行執行。關於這個問題的折衷解決方法,咱們在之後線程和進程章節裏再進行詳細探討。
6、Python解釋器
當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py文件。
因爲整個Python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器。
CPython
官方下載並安裝號Python2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。
CPython是使用最廣範的Python解釋器。咱們默認全部代碼也都在CPython下執行。
IPython是基於CPython的一個交互式解釋器,也就是說,IPython只是在交互方式上有所加強,可是執行Python代碼的功能和CPython是徹底同樣的。比如不少國產瀏覽器雖然外觀不一樣,但內核其實都是調用了IE。
CPython用>>>做爲提示符,而IPython用In [序號]:做爲提示符。
PyPy 聽說是Python的將來,開發者也說想讓你的Python代碼塊用此解釋器。
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,而是經過網絡調用來交互,確保各程序之間的獨立性。
7、用Python2仍是Python3
官方的建議是儘快升級到Python3,並且Python3有不少新功能,新特性,因此除非有一些業務是用Python2編寫的,通常建議用Python3。
Python3.0還有一個比較大的功能沒有完成,那就是Twisted ,這是一個很是龐大的系統工程,預計最近應該快完成了吧,敬請期待吧!
8、Python安裝
windows
一、下載安裝包
https://www.python.org/downloads/
二、安裝
最新版win7及之後系統,默認安裝路徑:C:\Users\Administrator\AppData\Local\Programs\Python\Python36\
三、配置環境變量
【右鍵計算機】--》【屬性】--》【高級系統設置】--》【高級】--》【環境變量】--》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】 --> 【Python安裝目錄追加到變值值中,用 ; 分割】
如:原來的值;C:\Users\Administrator\AppData\Local\Programs\Python\Python36\,切記前面有分號
linux、Mac
無需安裝,原裝Python環境,只要更新一下版本就能夠了!
9、變量/字符編碼
變量是什麼?
簡單的說,變量就是一個標籤用來講明內存上的空間地址的。聲明變量的過程就是向內存申請一塊空間用來存放數據的過程。
聲明變量
#_*_coding:utf-8_*_
name = "Alex Li"
上述代碼聲明瞭一個變量,變量名爲: name,變量name的值爲:"Alex Li"
變量定義的規則:
①變量名只能是 字母、數字或下劃線的任意組合
②變量名的第一個字符不能是數字
③如下關鍵字不能聲明爲變量名
['and', 'as', 'assert', 'break', 'class', 'continue', 'def', 'del', 'elif', 'else', 'except', 'exec', 'finally', 'for', 'from', 'global', 'if', 'import', 'in', 'is', 'lambda', 'not', 'or', 'pass', 'print', 'raise', 'return', 'try', 'while', 'with', 'yield']
變量的賦值
name = "Alex Li"
name2 = name
print(name,name2)
name = "Jack"
print("What is the value of name2 now?")
變量名儘可能有意義,讓人能一眼就知道這個變量表示什麼意思。
若是要表示一個關係型的變量名,通常的寫法是:
gf_of_oldboy = "Chen da hua"
GFOfOldboy = "Chen da hua"
Python裏面沒有定義常量這麼個概念,可是習慣上是用大寫字符串表示常量例如:
PIE = 3.1415926
保留字段不能使用,儘可能不要使用中文名和拼音作變量名,這樣會顯得很low。
字符編碼的區別與介紹
在Python2.X版本里面,不能直接使用中文,要使用必須事先聲明:
# -*- coding:utf-8 -*-
name = "你好,世界"
print(name)
Python代碼添加註釋的方法:
一、直接在以#開頭即表示註釋。
二、多行註釋,在要註釋的代碼先後行使用三個【'''】或者【"""】把要註釋的內容放進去就能夠了。
另外,【'''】或者【"""】包括的內容能夠做爲一個總體賦值個一個變量來處理。
例子:
msg = '''
gf_of_oldboy = "wang da hua"
GFOfOldboy = "Chen rong feng"
'''
#print(gf_of_oldboy,GFOfOldboy)
print(msg)
執行結果:
gf_of_oldboy = "wang da hua"
GFOfOldboy = "Chen rong feng"
另外須要說明的是,單引號和雙引號的做用和shell中相似,單引號表示強引用,雙引號表示弱引用。
用戶交互程序
格式化輸出指定內容:
方法一:++表示法
name = input("Name:")
age = input("Age:")
job = input("Job:")
salary = input("Salry:")
info = '''
------------------------- info of ''' + name +'''---------------------------------------
Name:''' + name + '''
Age:''' + age + '''
Job:''' + job + '''
Salary:''' + salary + '''
------------------------ info of ''' + name + '''---------------------------------------
'''
print(info)
方法二:佔位符表示法
name = input("Name:")
#age = input("Age:")
age = int(input("Age:"))
print(type(age),type(str(age))) #這裏會打印age的數據類型,而後轉換成字符串後又打印出數據類型,爲了驗證上面的轉換是否生效
job = input("Job:")
salary = input("Salry:")
info2 = """
------------------------------ info of %s ---------------------------------------------
Name:%s
Age:%s #這裏可使用%d指定只能輸入整數,而非默認字符串,不過要在輸入時強制轉換數據類型,不然會報錯。
Age:%d
Job:%s
Salary:%s
----------------------------- info end %s ---------------------------------------------
""" %(name,name,age,job,salary,name)
print(info2)
方法三:{}表示法
name = input("Name:")
age = input("Age:")
job = input("Job:")
salary = input("Salry:")
info3 = """
------------------------------ info of {_name} ---------------------------------------------
Name:{_name}
Age:{_age}
Job:{_job}
Salary:{_salary}
----------------------------- info end {_name} ---------------------------------------------
""" .format(_name=name,
_age=age,
_job=job,
_salary=salary)
print(info3)
方法四:是方法三的引伸,用數字表明具體變量
info4 = """
------------------------------ info of {0} ---------------------------------------------
Name:{0}
Age:{1}
Job:{2}
Salary:{3}
----------------------------- info end {0} ---------------------------------------------
""" .format(name,age,job,salary)
print(info4)
注意:
除非無可奈何,不然儘可能不要用,由於太耗內存,其餘方法則好的多。
法一能夠和法2、法3、法四混用,可是法2、法3、法四不能混用。
10、模塊初識
Python的強大之處在於他有很是豐富和強大的標準庫和第三方庫,幾乎你想實現的任何功能都有相應的Python庫支持,之後的課程中會深刻講解經常使用到的各類庫,如今,咱們先來象徵性的學2個簡單的。
sys模塊
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import sys
print(sys.argv)
#輸出
$ python test.py helo world
['test.py', 'helo', 'world'] #把執行腳本時傳遞的參數獲取到了
os模塊
#!/usr/bin/env python
# -*- coding: utf-8 -*-
import os
os.system("df -h") #調用系統命令
徹底結合一下
import os,sys
os.system(''.join(sys.argv[1:])) #把用戶的輸入的參數看成一條命令交給os.system來執行
11、選擇表達式if ... else
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:Bill Xie
import getpass
_username = "xiaoxie"
_password = "123456"
username = input("username:")
password = input("password:")
#password = getpass.getpass("password:")
if _username == username and _password == password:
print("Welcome user %s login."%(username))
else:
print("Invalid username or password!")
注意事項:
一、Python代碼是嚴格要求語法縮寫的,若是不注意就會報錯,縮進錯誤
IndentationError: expected an indented block
學習 Python 與其餘語言最大的區別就是,Python 的代碼塊不使用大括號 {} 來控制類,函數以及其餘邏輯判斷。python 最具特點的就是用縮進來寫模塊。縮進的空白數量是可變的,可是全部代碼塊語句必須包含相同的縮進空白數量,這個必須嚴格執行。
IndentationError: unexpected indent 錯誤是 python 編譯器是在告訴你"Hi,老兄,你的文件裏格式不對了,多是tab和空格沒對齊的問題",全部 python 對格式要求很是嚴格。
若是是 IndentationError: unindent does not match any outer indentation level錯誤代表,你使用的縮進方式不一致,有的是 tab 鍵縮進,有的是空格縮進,改成一致便可。
所以,在 Python 的代碼塊中必須使用相同數目的行首縮進空格數。
建議你在每一個縮進層次使用 單個製表符 或 兩個空格 或 四個空格 , 切記不能混用
二、這裏的打印輸出命令內使用了變量引用,這裏說說兩種變量引用的方式。
① 和上面註釋那裏提到的方式相似,先使用%s佔位符,而後再指明佔位符要使用的變量。
print("Welcome user %s login."%(username))
②使用花括號{}引用
print("Welcome user {_username} login." .format(_username=username))
print("Welcome user {0} login." .format(username)) #與上面相似,只不過是用數字代替第幾個要替換的變量。
12、循環體
猜數遊戲:
#!/usr/bin/env python
# -*- coding:utf-8 -*-
#Author:Bill Xie
age_of_oldboy = 29
guess_age = int(input("Guess oldboy's age:"))
if guess_age == age_of_oldboy:
print("You got it.")
elif guess_age > age_of_oldboy:
print("Think smaller...")
else:
print("Think bigger...")
引出循環的說明:
while循環語法:
while 條件:
循環體
esle: #能夠沒有這個
循環體
for循環語法:
for i in range(開始數,結束數,步長):
循環體
else #能夠沒有
循環體
未完,待更新。。。。