python基礎 一.python介紹 python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程式,作為ABC語言的一種繼承。 最新的TIOBE排行榜,Python已經占據世界第四名的位置, ...
python基礎
一.python介紹
python的創始人為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程式,作為ABC語言的一種繼承。
最新的TIOBE排行榜,Python已經占據世界第四名的位置, Python崇尚優美、清晰、簡單,是一個優秀並廣泛使用的語言。
TOP 10 編程語言 TIOBE 指數走勢(2002-2018)
由上圖可見,Python整體呈上升趨勢,反映出Python應用越來越廣泛並且也逐漸得到業內的認可!!!
Python可以應用於眾多領域,如:數據分析、組件集成、網路服務、圖像處理、數值計算和科學計算等眾多領域。目前業內幾乎所有大中型互聯網企業都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、Facebook、NASA、百度、騰訊、汽車之家、美團等。
目前Python主要應用領域:
雲計算: 雲計算最火的語言, 典型應用OpenStack
WEB開發: 眾多優秀的WEB框架,眾多大型網站均為Python開發,Youtube,
Dropbox,豆瓣。。。, 典型WEB框架有Django
科學運算、人工智慧: 典型庫NumPy, SciPy, Matplotlib, Enthought
librarys,pandas
系統運維: 運維人員必備語言
金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,而且重要性逐年提高。原因:作為動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤其擅長策略回測
圖形GUI: PyQT, WxPython,TkInter
Python在一些公司的應用:
谷歌:Google App Engine 、code.google.com 、Google earth 、谷歌爬蟲、Google廣告等項目都在大量使用Python開發
CIA: 美國中情局網站就是用Python開發的
NASA: 美國航天局(NASA)大量使用Python進行數據分析和運算
YouTube:世界上最大的視頻網站YouTube就是用Python開發的
Dropbox:美國最大的線上雲存儲網站,全部用Python實現,每天網站處理0億個文件的上傳和下載
Instagram:美國最大的圖片分享社交網站,每天超過3千萬張照片被分享,全部用python開發
Facebook:大量的基礎庫均通過Python實現的
Redhat: 世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
豆瓣: 公司幾乎所有的業務均是通過Python開發的
知乎: 國內最大的問答社區,通過Python開發(國外Quora)
春雨醫生:國內知名的線上醫療網站是用Python開發的
除上面之外,還有搜狐、金山、騰訊、盛大、網易、百度、阿裡、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務。
1.1.python是一門什麼樣的語言
編程語言主要從以下幾個角度為進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,我們先看編譯型語言和解釋型語言. 稍後再說強類型和弱類型
編譯器和解釋器的區別是什麽?
編譯器是把源程式的每一條語句句都編譯成機器語言,並保存成二進位文件,這樣運行時電腦
可以直接以機器語言來運行此程式,速度很快;
而解釋器則是只在執行程式時,才一條一條的解釋成機器語言給電腦來執行,所以運行速度是不如編譯後的程式運行的快的.
這是因為電腦不能直接認識並執行我們寫的語句,它只能認識機器語言(是二進位的形式)
編譯型vs解釋型
編譯型
優點:編譯器一般會有預編譯的過程對代碼進行優化。因為編譯只做一次,運行時不需要編譯,所以編譯型語言的程式執行效率高。可以脫離語言環境獨立運行。
缺點:編譯之後如果需要修改就需要整個模塊重新編譯。編譯的時候根據對應的運行環境生成機器碼,不同的操作系統之間移植就會有問題,需要根據運行的操作系統環境編譯不同的可執行文件。
解釋型
優點:有良好的平臺相容性,在任何環境中都可以運行,前提是安裝瞭解釋器(虛擬機)。
靈活,修改代碼的時候直接修改就可以,可以快速部署,不用停機維護。
缺點:每次運行的時候都要解釋一遍,性能上不如編譯型語言。
1.2.python的優缺點
優點:
1. Python的定位是“優雅”、“明確”、“簡單”,所以Python程式看上去總是簡單易
懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常複雜的程式。
2. 開發效率非常高,Python有非常強大的第三方庫,基本上你想通過電腦實現任何功能,Python官方庫里都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大降低開發周期,避免重覆造輪子。
3. 高級語言————當你用Python語言編寫程式的時候,你無需考慮諸如如何管理你的程式使用的記憶體⼀一類的底層細節
4. 可移植性————由於它的開源本質,Python已經被移植在許多平臺上(經過改動
使它能夠工 作在不同平臺上)。如果你小心地避免使用依賴於系統的特性,那麼你的所有Python程式無需修改就幾乎可以在市場上所有的系統平臺上運
5. 可擴展性————如果你需要你的一段關鍵代碼運行得更快或者希望某些演算法不公開,你可以把你的部分程式⽤用C或C++編寫,然後在你的Python程式中使用它們。
6. 可嵌入性————你可以把Python嵌入你的C/C++程式,從而向你的程式用戶提供腳本功能。
再看缺點:
1. 速度慢,Python 的運行速度相比C語言確實慢很多,跟JAVA相比也要慢一些,因此這也是很多所謂的大牛不屑於使用Python的主要原因,但其實這裡所指的運行速度慢在大多數情況下用戶是無法直接感知到的,必須藉助測試工具才能體現出來,比如你用C運一個程式花0.01s,Python是0.1s,這樣C語言直接比Python快了10倍,算是非常誇張,但是你是無法直接通過肉眼感知的,因為一個正常人所能感知的時間最小單位0.15-0.4s左右,哈哈。其實在大多數情況下Python已經完全可以滿足你對程式速度的要求除非你要寫對速度要求極高的搜索引擎等,這種情況下,當然還是建議你用C去實現的。
2. 代碼不能加密,因為PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認為這算是一個缺點,如果你的項目要求源代碼必須是加密的,那你一開始就不應該用Python來去實現。
3. 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是電腦程式設計語言解釋器用於同步線程的工具,使得任何時刻僅有一個線程在執行,Python的線程是操作系統的原生線程。在Linux上為pthread,在Windows上為Win thread,完全由操作系統調度線程的執。一個python解釋器進程內有一條主線程,以及多條用戶程式的執行線程。即使在多核CPU平臺上,由於GIL的存在,所以禁止多線程的並行執行。關於這個問題的折衷解決方法,我們在以後線程和進程章節里再進行詳細探討。
當然,Python還有一些其它的小缺點,在這就不一一列,我想說的是,任何一門語言都不是完美的,都有擅長和擅長做的事情,建議各位不要拿一個語言的劣勢去跟另一個語言的優勢來去比較,語言只是一個工具,是實現程式設計師思想的工具,就像我們之前中學幾何時,有的時候需要圓規,有的時候需要用三角尺一樣,拿相應的工具去做它最擅長的事才是正確的選擇。之前很多人問我Shell和Python到底哪個好?我回答說Shell是個腳本語言,但Python不只是個腳本語言,能做的事情更多,然後又有鑽牛角尖的人說完全沒必要學Python, Python能做的事情Shell都可以做,只要你足夠牛B,然後又舉了用Shell
可以寫俄羅斯方塊這樣的游戲,對此我能說表達只能是,不要跟SB理論,SB會把你拉到跟他一樣的度,然後用充分的經驗把你打倒。
1.3.python解釋器
當我們編寫Python代碼時,我們得到的是一個包含Python代碼的以.py為擴展名的文本文件。要運行代碼,就需要Python解釋器去執.py文件。由於整個Python語言從規範到解釋器都是開源的,所以理論上,只要水平夠高,任何人都可以編寫Python解釋器來執行Python代碼(當然難度很大)。事實上,確實存在多種Python解釋器。
CPython
當我們從Python官方網站下載並安裝好Python 2.7後,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令行下運python就是啟動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的所有代碼也都在CPython下執行。
IPython
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發展史
1989年,為了打發聖誕節假期,Guido(龜叔)開始寫Python語言的編譯器。
Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他
希望這個新的叫做Python的語言,能符合他的理想:創造一種C和shell之間,功能全,易學易用,可展的語言。
1991年,第一個Python編譯器誕生。它是用C語言實現的,並能夠調用C語言的庫文件。從一齣生,Python已經具有了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊為基礎的拓展系統。
- Granddaddy of Python web frameworks, Zope 1 was released in 1999
- Python 1.0 - January 1994 增加了 lambda, map, filter and reduce.
- Python 2.0 - October 16, 2000,加入了記憶體回收機制,構成了現在Python語言
框架的基礎
- Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
- Python 2.5 - September 19, 2006
- Python 2.6 - October 1, 2008
- Python 2.7 - July 3, 2010
- 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
- Python 3.0 - December 3, 2008
- Python 3.1 - June 27, 2009
- Python 3.2 - February 20, 2011
- Python 3.3 - September 29, 2012
- Python 3.4 - March 16, 2014
- Python 3.5 - September 13, 2015
三.python的安裝
一路確定即可. 記得path下打鉤,(環境變數)
下載地址:Python官網:https://www.python.org/
四. 第一個python程式
python程式有兩種編寫方式:
1. 進入cmd控制台. 輸入python進入編輯模式. 這時候我們可以直接編寫python程式,既配置好環境變數才能執行。
2. 也可以在.py文件中編寫python代碼. 通過python命令來執行python代碼
註意: python2中的中文編碼會有問題. Python2使用的是ASCII碼編碼. 處理不中文. 我們需要替換成utf-8編碼.
# -*- encoding:utf-8 -*-
五. 變數
變數:將運算的中間結果暫存到記憶體,以便便後續程式調用.
a = ‘YJ同心’ 這裡的a就是一個變數. 臨時記錄一個值. 供後面的程式繼續使用執行, 執行順序. 把等號右邊的值賦值給等號左邊的變數,變數是指會變的量。
變數的命名規則:
1, 變數由字母, 數字,下劃線搭配組合而成
2, 不可以數字開頭,更不能是全數字
3,不能是pythond的關鍵字, 這些符號和字母已經被python占用, 不可以更改
4,不要用中文
5,名字要有意義
6,不要太長
7, 區分大寫
推薦大家使用駝峰體或者下劃線命名
駝峰體: YongJie除首字母外的其他每個單詞首字母大寫
下劃線:yong _ jie 每個單詞之間用下劃線分開
六.常量
在python中不存在絕對的常量. 約定俗成, 所有字母大寫就是常量
例如: PI = 3.141592653
BIRTH_OF_SYLAR = 1990
七.註釋
有時候我們寫的東西不一定都是給用戶看的. 或者不希望解釋器執行. 那我們可以使用#來註釋掉代碼. 被註釋的內容是不會執行的.可以方便後面的程式員來拜讀你的代碼
單行註釋: # 被註釋的內容
多行註釋:''' 被註釋的內容 ''', """這個也是多行註釋"""
八.python的基本數據類型
什麼是數據類型?
我們人類可以很容易的分清數字與字元的區別,但是電腦並不能呀,電腦雖然很強大,但從某種角 度上看又很傻,除非你明確的告訴它,1是數字,“漢”是文字,否則它是分不清1和‘漢’的區別的,因此,在每個編程語言里都會有一個叫數據類型的東東,其實就是對常用的各種數據類型進行了明確的劃分,你想讓電腦進行數值運算,你就傳數字給它,你想讓他處理文字,就傳字元串類型給他。Python中常用的數據類型有多種,今天我們暫只講3種, 數字、字元串、布爾類型(命題).
8.1 整數(int)
常見的數字都是int類型.用於計算或者大小的比較
在32位機器上int的範圍是: -2**31~2**31-1,即-2147483648~2147483647
在64位機器上int的範圍是: -2**63~2**63-1,即-9223372036854775808~9223372036854775807夠你用了吧. 註意這些是整數.
8.2 字元串 (str)
在Python中,凡是用引號引起來的,全是字元串
字元串可以用單引號,雙引號,或者三引號引起來,沒有什麼區別,只是一些特殊的格式需要不用的引號比如:
msg = "My name is Feng Yongjie, 19 years old"
這個就需要單雙引號或單引號配合。
content = """
內容
"""
想多行賦值一個字元串,就需要三引號。
數字類型有 +-*/ 字元串有麽?
字元串只有 + *
字元串的拼接
1 s1 = 'a ' 2 3 s2 = 'bc' 4 5 print(s1 + s2)
相乘 str*int
1 name = 'YJ加油' 2 print(name*8)
8.3 布爾值(bool), 真或者假, True和False
九.用戶交互
使用input()函數,可以讓我們和電腦互動起來
語法: 變數 = input("提示語")
1 content = input("你叫什麼名字?") 2 3 print("我們在控制台接收到了:"+content)
這裡可以直接獲取到用戶輸入的內容
十.流程式控制制if語句
你在生活中是不是經常遇到各種選擇,比如玩色子,猜大小,比如選擇走那條路回家?Python程式中也會遇到這種情況,這就用到了if語句。
第一種語法:
if 條件: #引號是將條件與結果分開。
結果1。 # 四個空格,或者一個tab鍵,這個是告訴程式滿足這個條件的
結果2。
如果條件是真(True) 執行結果1, 然後結果2, 如果條件假(False) 直接結果2
第二種語法:
If 條件:
結果1
else:
結果2
代碼3
第三種語法:
If 條件1:
結果1
elif 條件2:
結果2
..
else:
結果n
第四種語法(嵌套):
If 條件1:
結果1
If 條件2:
結果2
else:
結果3
else:
結果4
可以無限的嵌套. 但是在實際開發中. 儘量不要超過三層嵌套。
補充1:in和not in
可以判斷xxx字元串是否出現在xxxxx字元串中
1 content = input("請輸入你的評論") 2 3 if "YJ是最牛逼的程式員" in content or 'YJ是世界第一' in content: 4 5 print('你輸入的內容不合法') 6 7 else: 8 9 print("評論成功")
十一. 流程式控制制-while迴圈
while 條件:
迴圈體
else: 迴圈在正常情況跳出之後會執行這里
1 a = 1 2 3 while a < 11: 4 5 if a == 8: 6 7 break 8 9 pass 10 11 else: 12 13 print(a) 14 15 a = a+1 16 17 else: 18 19 print("你好")
註意: 如果迴圈是通過break退出的,那麼while後面的else將不會被執行, 只有在while條件判斷是假的時候才會執行這個else
pass: 不表示任何內容. 為了代碼的完整性. 占位而已
在生活中,我們遇到過迴圈的事情吧?比如迴圈聽歌。在程式中,也是存才的,這就是流程空語句while。
模擬一下迴圈聽歌:
1 while True: 2 3 print('我們不一樣') 4 5 print('我們都⼀樣') 6 7 print('有啥不一樣')
如果條件是真, 則直接執結果. 然後再次判斷條件. 直到條件是假. 停止迴圈那我們怎麼終止迴圈呢?
結束迴圈:
1, 改變條件
2, break
十二. 流程式控制制-break和continue
1, break: 立刻跳出迴圈. 打斷的意思
2, continue: 停止本次迴圈, 繼續執行下一次迴圈.
2019年11月1日