Python学习之路1 - 基础入门
?本系列文章使用的Python版本為3.6.2
使用開發工具為Pycharm2017
?
一、Python介紹
Python的創始人為吉多·范羅蘇姆(Guido van Rossum)。1989年的圣誕節期間,吉多·范羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。??
最新的TIOBE排行榜,Python趕超PHP占據第五,?Python崇尚優美、清晰、簡單,是一個優秀并廣泛使用的語言。
目前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實現,每天網站處理10億個文件的上傳和下載
- Instagram:美國最大的圖片分享社交網站,每天超過3千萬張照片被分享,全部用python開發
- Facebook:大量的基礎庫均通過Python實現的
- Redhat:世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
- 豆瓣:公司幾乎所有的業務均是通過Python開發的
- 知乎:國內最大的問答社區,通過Python開發(國外Quora)
- 春雨醫生:國內知名的在線醫療網站是用Python開發的
- 除上面之外,還有搜狐、金山、騰訊、盛大、網易、百度、阿里、淘寶 、土豆、新浪、果殼等公司都在使用Python完成各種各樣的任務。?
Python?是一門什么樣的語言?
編程語言主要從以下幾個角度為進行分類,編譯型和解釋型、靜態語言和動態語言、強類型定義語言和弱類型定義語言,每個分類代表什么意思呢,我們一起來看一下。
編譯和解釋的區別
編譯器是把源程序的每一條語句都編譯成機器語言,并保存成二進制文件,這樣運行時計算機可以直接以機器語言來運行此程序,速度很快;?
而解釋器則是只在執行程序時,才一條一條的解釋成機器語言給計算機來執行,所以運行速度是不如編譯后的程序運行的快的。?
這是因為計算機不能直接認識并執行我們寫的語句,它只能認識機器語言(是二進制的形式)。
就好像你想看一本英文書,編譯器會將整本書翻譯成中文供你觀看,這時你看的就會很方便,怎么反復看都沒有問題;解釋器只會解釋你當前想要看的語句,如果你想再次看一遍同樣的語句則需要再次找解釋器解釋一遍,這樣就會給你的閱讀帶來麻煩。
?
動態語言和靜態語言
通常我們所說的動態語言、靜態語言是指動態類型語言和靜態類型語言。
(1)動態類型語言:動態類型語言是指在運行期間才去做數據類型檢查的語言,也就是說,在用動態類型的語言編程時,永遠也不用給任何變量指定數據類型,該語言會在你第一次賦值給變量時,在內部將數據類型記錄下來。Python和Ruby就是一種典型的動態類型語言,其他的各種腳本語言如VBScript也多少屬于動態類型語言。
(2)靜態類型語言:靜態類型語言與動態類型語言剛好相反,它的數據類型是在編譯其間檢查的,也就是說在寫程序時要聲明所有變量的數據類型,C/C++是靜態類型語言的典型代表,其他的靜態類型語言還有C#、JAVA等。
?
強類型定義語言和弱類型定義語言
(1)強類型定義語言:強制數據類型定義的語言。也就是說,一旦一個變量被指定了某個數據類型,如果不經過強制轉換,那么它就永遠是這個數據類型了。舉個例子:如果你定義了一個整型變量a,那么程序根本不可能將a當作字符串類型處理。強類型定義語言是類型安全的語言。
(2)弱類型定義語言:數據類型可以被忽略的語言。它與強類型定義語言相反, 一個變量可以賦不同數據類型的值。
強類型定義語言在速度上可能略遜色于弱類型定義語言,但是強類型定義語言帶來的嚴謹性能夠有效的避免許多錯誤。另外,“這門語言是不是動態語言”與“這門語言是否類型安全”之間是完全沒有聯系的!
例如:Python是動態語言,是強類型定義語言(類型安全的語言); VBScript是動態語言,是弱類型定義語言(類型不安全的語言); JAVA是靜態語言,是強類型定義語言(類型安全的語言)。
?
通過上面這些介紹,我們可以得出,python是一門動態解釋性的強類型定義語言。那這些基因使成就了Python的哪些優缺點呢?我們繼續往下看。
?
Python的優點
當你用一種語言開始作真正的軟件開發時,你除了編寫代碼外,還需要很多基本的已經寫好的現成的東西,來幫助你加快開發進度。比如說,要編寫一個電子郵件客戶端,如果先從最底層開始編寫網絡協議相關的代碼,那估計一年半載也開發不出來。高級編程語言通常都會提供一個比較完善的基礎代碼庫,讓你能直接調用,比如,針對電子郵件協議的SMTP庫,針對桌面環境的GUI庫,在這些已有的代碼庫的基礎上開發,一個電子郵件客戶端幾天就能開發出來。
Python就為我們提供了非常完善的基礎代碼庫,覆蓋了網絡、文件、GUI、數據庫、文本等大量內容,被形象地稱作“內置電池(batteries included)”。用Python開發,許多功能不必從零編寫,直接使用現成的即可。
除了內置的庫外,Python還有大量的第三方庫,也就是別人開發的,供你直接使用的東西。當然,如果你開發的代碼通過很好的封裝,也可以作為第三方庫給別人使用。
許多大型網站就是用Python開發的,例如YouTube、Instagram,還有國內的豆瓣。很多大公司,包括Google、Yahoo等,甚至NASA(美國航空航天局)都大量地使用Python。
龜叔給Python的定位是“優雅”、“明確”、“簡單”,所以Python程序看上去總是簡單易懂,初學者學Python,不但入門容易,而且將來深入下去,可以編寫那些非常非常復雜的程序。
總的來說,Python的哲學就是簡單優雅,盡量寫容易看明白的代碼,盡量寫少的代碼。如果一個資深程序員向你炫耀他寫的晦澀難懂、動不動就幾萬行的代碼,你可以盡情地嘲笑他。
那Python適合開發哪些類型的應用呢?
首選是網絡應用,包括網站、后臺服務等等;
其次是許多日常需要的小工具,包括系統管理員需要的腳本任務等等;
另外就是把其他語言開發的程序再包裝起來,方便使用。
Python的缺點
第一個缺點就是運行速度慢,和C程序相比非常慢,因為Python是解釋型語言,你的代碼在執行時會一行一行地翻譯成CPU能理解的機器碼,這個翻譯過程非常耗時,所以很慢。而C程序是運行前直接編譯成CPU能執行的機器碼,所以非常快。
但是大量的應用程序不需要這么快的運行速度,因為用戶根本感覺不出來。例如開發一個下載MP3的網絡應用程序,C程序的運行時間需要0.001秒,而Python程序的運行時間需要0.1秒,慢了100倍,但由于網絡更慢,需要等待1秒,你想,用戶能感覺到1.001秒和1.1秒的區別嗎?這就好比F1賽車和普通的出租車在北京三環路上行駛的道理一樣,雖然F1賽車理論時速高達400公里,但由于三環路堵車的時速只有20公里,因此,作為乘客,你感覺的時速永遠是20公里。
第二個缺點就是代碼不能加密。如果要發布你的Python程序,實際上就是發布源代碼,這一點跟C語言不同,C語言不用發布源代碼,只需要把編譯后的機器碼(也就是你在Windows上常見的xxx.exe文件)發布出去。要從機器碼反推出C代碼是不可能的,所以,凡是編譯型的語言,都沒有這個問題,而解釋型的語言,則必須把源碼發布出去。
這個缺點僅限于你要編寫的軟件需要賣給別人掙錢的時候。好消息是目前的互聯網時代,靠賣軟件授權的商業模式越來越少了,靠網站和移動應用賣服務的模式越來越多了,后一種模式不需要把源碼給別人。
再說了,現在如火如荼的開源運動和互聯網自由開放的精神是一致的,互聯網上有無數非常優秀的像Linux一樣的開源代碼,我們千萬不要高估自己寫的代碼真的有非常大的“商業價值”。那些大公司的代碼不愿意開放的更重要的原因是代碼寫得太爛了,一旦開源,就沒人敢用他們的產品了。
?
?
二、安裝Python解釋器
在Mac上安裝Python
如果你正在使用Mac,系統是OS X 10.8~10.10,那么系統自帶的Python版本是2.7。要安裝最新的Python 3.6,有兩個方法:
方法一:從Python官網下載Python 3.6的安裝程序(網速慢的同學請移步國內鏡像),雙擊運行并安裝;
方法二:如果安裝了Homebrew,直接通過命令brew install python3安裝即可。
在Linux上安裝Python
如果你正在使用Linux,那么基本代表你有著Linux管理經驗,Linux上自帶Python2,如果想升級到最新版應該難不倒你的。
在Windows上安裝Python
首先,根據你的Windows版本(64位還是32位)從Python的官方網站下載Python 3.6對應的64位安裝程序或32位安裝程序,然后,運行下載的EXE安裝包:
?
特別要注意勾上Add Python 3.6 to PATH,然后點“Install Now”即可完成安裝。
?
三、輸出
輸出方式經常使用的有兩種,第一種是print()函數,下面我們輸出hello world。
print("hello world")輸出結果:
第二種輸出方式需要引入sys庫,然后使用sys.stdout.write()函數輸出。
import sys sys.stdout.write("afsd")輸出結果:
從輸出結果可以看出兩種輸出方式的差別,print()函數輸出結果后會再加一個換行,而sys.stdout.write()則沒有換行。
?Python和其他常用高級語言不同的地方是Python一條語句結束時不需要加分號,并且在Python中也不會用到大括號,Python的語句就只是用換行符和縮進來表示語句之間的關系。
換行就表示一條語句的結束,縮進表示語句間的包含關系。
四、變量
由于Python是動態類型語言,所以不需要定義變量類型,直接寫變量名就可以。
name = "my name is Vector" print(name)輸出結果:
在Python3中是可以直接輸入中文的,例如print(“姓名”)這樣,但是在Python2中需要在文件的頂部加上 ?-*- coding:utf-8 -*- 這句話,因為Python3的默認字符為Unicode,而Python2的默認字符為ASCII。
?在Python中不僅有單行的字符串,還有多行的字符串,多行字符串用 '''內容''' 標記,如下。
msg = ''' 這里是第一行 這里是第二行 這里是第三行 ''' print(msg)輸出結果:
?
注釋
Python中的單行注釋用 # 來注釋,如下。
print('hello world') #這里即將輸出hello world多行注釋用三個單引號來標記 '''內容''',如下。
''' 這里是第一行注釋 這里是第二行注釋 這里是第三行注釋 '''在Python中單引號和雙引號沒有區別,都不會轉義其他字符。
?
五、輸入
?用戶輸入通常我們用input()函數,如下。
username = input('username:') password = input('password:') print(username,password)我們輸入vector和asd123
輸出結果:
有了輸入后,我們就可以控制格式化輸出了。
第一種格式化輸出方式
name = input('name:') age = input('age:')info = ''' ------------- Info -------------- Name:''' + name + ''' age:''' + age + ''' ------------- Over -------------- ''' print(info)這里我們輸入vector和18
輸出結果:
第二種格式化輸出方式
用 %s %d %f 等來控制格式,并在結尾一次傳入參數,傳參格式為 %(參數1,參數2,...)
?%s代表字符串,%d代表正數,%f代表浮點數。
name = input('name:') age = int(input('age:'))info = ''' ------------- Info -------------- Name:%s age:%d ------------- Over -------------- '''%(name,age) print(info)輸出結果:
如果想將輸出的內容變成紅色,則用\033[31;1m%s\033[0m 如果想將輸出的內容變成綠色,則用\033[32;1m%s\033[0m格式:\033[顯示方式;前景色;背景色m說明: 前景色 背景色 顏色 --------------------------------------- 30 40 黑色 31 41 紅色 32 42 綠色 33 43 黃色 34 44 藍色 35 45 紫紅色 36 46 青藍色 37 47 白色顯示方式 意義 ------------------------- 0 終端默認設置 1 高亮顯示 4 使用下劃線 5 閃爍 7 反白顯示 8 不可見例子: \033[1;31;40m <!--1-高亮顯示 31-前景色紅色 40-背景色黑色--> \033[0m <!--采用終端默認設置,即取消顏色設置-->下面演示一下輸出結果帶顏色的例子:
name = input('name:') age = int(input('age:'))info = ''' ------------- Info -------------- Name:\033[31;1m%s\033[0m #輸出結果為紅色 age:\033[32;1m%s\033[0m #輸出結果為綠色 ------------- Over -------------- '''%(name,age) print(info)輸出結果:
第三種格式化輸出方式
在字符串中插入形參(形參用大括號標記{形參}),最后在結尾給形參賦值。
name = input('name:') age = int(input('age:'))info = ''' ------------- Info -------------- Name:{_name} age:{_age} ------------- Over -------------- '''.format(_name=name,_age=age) print(info)輸出結果:
第四種格式化輸出方式
形參用數字表示,在結尾直接按照順序給形參賦值。
name = input('name:') age = int(input('age:'))info = ''' ------------- Info -------------- Name:{0} age:{1} ------------- Over -------------- '''.format(name,age) print(info)輸出結果:
?
輸入變成密文
需要引入getpass模塊。
import getpass password = getpass.getpass("password:") print(password) 但是這個getpass()這個函數在pycharm中不好使,在其他工具中好使。六、條件判斷語句
格式:
if 條件1 and 條件2 or 條件3:pass # 注意這里一定要有縮進 elif 條件4 and 條件5:pass else:pass例子:
_username = 'rev' _password = 'rev123'username = input('username:') password = input('password:')if _username == username and _password == password:print('Welcome user {name} login...'.format(name = username))# 注意這里一定要有縮進 elif _username == username and _password != password:print('password error!') else:print('login fail..')# 注意這里一定要有縮進七、循環語句
循環語句之while
Python中的while還有else處理。
例子:
while True:print('this is loop...')break else:print('如果while循環條件不符合了,則執行這里的代碼')循環語句之for
格式1:
for i in range(10):print('loop ',i)這里的range代表循環次數,i 從0來是循環
輸出結果:
格式2:
for i in range(0,10,2):print('loop ',i)range中的第一個參數代表從幾開始,第二個參數代表到幾結束(不包括10),第三個參數2代表隔一個執行一次
格式3:
for i in "fasdfasd":print('loop ',i)Python中的for循環還可以循環字符串、列表、元組等。
?輸出結果:
八、模塊講解
模塊之sys
print(sys.path) # 打印環境變量 print(sys.argv) # 打印當前腳本的路徑,在pycharm中打印絕對路徑,在命令行中打印相對路徑(本來打印的就是相對路徑) one = sys.argv[1] #用來在外部調用的時候傳參, 1代表傳入的第一個參數, two = sys.argv[2] #2代表傳入的第二個參數, 這樣外部調用的時候就可以傳多個參數了模塊之os
print(os.system('dir')) # system函數就是命令行 cmd = os.system('dir') print(cmd) # 這里輸出的是 0 因為,system是直接把輸出到屏幕上,并不是返回,如果輸出成功則返回0cmd = os.popen('dir').read() #popen()方法返回的是該對象的地址,read()方法是將地址中的內容讀出來 print(cmd)# 創建目錄函數 os.mkdir('new_dir')九、三元運算
//result = 值1 if 條件 else 值2 a,b,c = 1,3,5 d = a if a>b else c print(d) # d = c = 5 # 如果條件為真:result = 值1 # 如果條件為假:result = 值2十、字符串和二進制的相互轉化
msg = '我愛大延邊日不落帝國' print(msg) # 字符串輸出 print(msg.encode(encoding='utf-8')) # 將字符串轉換成二進制 print(msg.encode(encoding='utf-8').decode(encoding='utf-8')) # 將二進制轉換成字符串 # 如果encode和decode不寫參數,默認就是utf-8?
轉載于:https://www.cnblogs.com/y-zr/p/7906003.html
總結
以上是生活随笔為你收集整理的Python学习之路1 - 基础入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 封装构造函数,用canvas写饼状图和柱
- 下一篇: 洛谷 P1036 选数