初識PYthon
1.1 Python介紹
python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。java
最新的TIOBE排行榜,Python趕超PHP佔據第五, Python崇尚優美、清晰、簡單,是一個優秀並普遍使用的語言。python
1.2Python應用領域
- 雲計算: 雲計算最火的語言, 典型應用OpenStack
- WEB開發: 衆多優秀的WEB框架,衆多大型網站均爲Python開發,Youtube, Dropbox, 豆瓣。。。, 典型WEB框架有Django
- 科學運算、人工智能: 典型庫NumPy, SciPy, Matplotlib, Enthought librarys,pandas
- 系統運維: 運維人員必備語言
- 金融:量化交易,金融分析,在金融工程領域,Python不但在用,且用的最多,並且重要性逐年提升。緣由:做爲動態語言的Python,語言結構清晰簡單,庫豐富,成熟穩定,科學計算和統計分析都很牛逼,生產效率遠遠高於c,c++,java,尤爲擅長策略回測
- 圖形GUI: PyQT, WxPython,TkInter
1.3Python的優缺點
1.3.1Python的優勢
- Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
- 開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
- 高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
- 可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工 做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行
- 可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
- 可嵌入性————你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。
1.3.2Python的缺點
- 速度慢,Python 的運行速度相比C語言確實慢不少,跟JAVA相比也要慢一些,所以這也是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運一個程序花了0.1s,用Python是0.01s,這樣C語言直接比Python快了10s,算是很是誇張了,可是你是沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實在大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下,固然仍是建議你用C去實現的。
- 代碼不能加密,由於PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認爲這算是一個缺點,若是你的項目要求源代碼必須是加密的,那你一開始就不該該用Python來去實現。
- 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲GIL的存在,因此禁止多線程的並行執行。
1.4Python安裝部署
1.4.1Windows端的部署
- 下載安裝包 https://www.python.org/downloads/
- 安裝 默認安裝路徑:C:\python3.5.2
- 配置環境變量(原來的值;C:\python27,切記前面有分號) 右鍵計算機–>屬性–>高級系統設置–>環境變量–>找到變量名爲Path的一行雙擊–>Python安裝目錄追加到變量值中。用分號;分割
1.4.2Linux端的部署
Linux端默認都會自帶Python客戶端,其中Centos6.x自帶Python2.6,Ubuntu16.04自帶Python2.7和3.5兩個版本。c++
1.5第一個Python程序
- #!/usr/bin/env python
- print(「hello,world!」)
執行此Python程序算法
- [root@lizhong2 python]# python hello.py
- hello,world!
1.6Python的註釋
1.6.1單行註釋:和shell的註釋方法相同
- #print(「hello,world!」)
1.6.2多行註釋:批量註釋使用三引號
- #每行最多不能超過80個字符
- 」’
- This is a note!
- This is a note!
- This is a note!
- 」’
1.6.3三引號的另外一個用途:格式化輸出
- #!/usr/bin/env python
- a=」’hello,everybody,I am lizhong\n
- this is the second line
- haha
- 4
- 5
- ok
- ;;;
- 」’
- print a
執行上述Python腳本,獲得的結果以下:shell
- hello,everybody,I am lizhong
- this is the second line
- haha
- 4
- 5
- ok
- ;;;
1.7Python的變量
1.7.1聲明變量
- #_*_coding:utf-8_*_
- name = 「lizhong」
1.7.2變量定義的規則:
- 變量名只能是 字母、數字或下劃線的任意組合
- 變量名的第一個字符不能是數字
- 如下關鍵字不能聲明爲變量名
[‘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’]
1.7.3變量的賦值
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- name1 = 「lizhong」
- name2 = 「Alex」
- name1 = 「me」
- print name1
則此時name1爲me,而不是lizhong,name2爲Alex。多線程
1.7.4變量的運算
變量能夠直接運算框架
- #!/usr/bin/env python
- User_name=’Alex’
- Age=27
- Next_year_age=Age+1
- print Next_year_age
則此時輸出的值應爲28,變量能夠直接進行運算。運維
1.8Python字符編碼
python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascillASCII(American Standard Code for InformationInterchange,美國標準信息交換代碼)是基於拉丁字母的一套電腦編碼系統,主要用於顯示現代英語和其餘西歐語言,其最多隻能用 8 位來表示(一個字節),即:2**8 = 256-1,因此,ASCII碼最多隻能表示 255 個符號。
顯然ASCII碼沒法將世界上的各類文字和符號所有表示,因此,就須要新出一種能夠表明全部字符和符號的編碼,即:Unicode Unicode(萬國碼)是一種在計算機上使用的字符編碼。Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536.
UTF-8,是對Unicode編碼的壓縮和優化,他再也不使用最少使用2個字節,而是將全部的字符和符號進行分類:ascii碼中的內容用1個字節保存、歐洲的字符用2個字節保存,東亞的字符用3個字節保存…因此,python解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill),若是是以下代碼的話:工具
報錯:ascii碼沒法表示中文測試
- #!/usr/bin/env python
- # name = 「你好,世界」
- # print (name)
改正:應該告訴python解釋器,用什麼編碼來執行源代碼 (在Python3默認支持中文)
- #!/usr/bin/env python
- # -*- coding: utf-8 -*-
- # name = 「你好,世界」
- # print (name)
1.9Python用戶輸入
- #!/usr/bin/env python
- #將用戶輸入的內容賦值給name變量
- name = input(「請輸入用戶名:」)
- #打印輸入的內容
- print(name)
輸入密碼時,若是想要不可見,能夠利用getpass模塊中的getpass方法
- #!/usr/bin/env python
- #導入getpass庫
- import getpass
- #將用戶輸入的內容賦值給name變量
- name = input(「請輸入用戶名:」)
- pwd = getpass.getpass(「請輸入密碼:」) #在Pycharm下不支持此模塊
- #打印輸入的內容
- print(「username:」,name,」password:」,pwd)
1.10Python格式化輸出
Python格式化輸入分爲如下三種方式。推薦使用第三種方式,而且有的狀況必須使用第三種方式
1.10.1.方法一:字符串是 %s;整數 %d;浮點數%f
- #!/usr/bin/env python
- name = input(「name:」)
- age = int(input(「age:」))
- job = input(「job:」)
- salary = input(「salary:」)
- info = 」’
- ——-info of %s ——
- Name:%s
- Age:%d
- Job:%s
- Salary:%s
- 」’ % (name,name,age,job,salary)
- print(info)
1.10.2.方法二:
- #!/usr/bin/env python
- name = input(「name:」)
- age = int(input(「age:」))
- job = input(「job:」)
- salary = input(「salary:」)
- info2 = 」’
- ——-info of {0} ——
- Name:{0}
- Age:{1}
- Job:{2}
- Salary:{3}
- 」’ .format(name,age,job,salary)
- print(info2)
1.10.3.方法三:
- #!/usr/bin/env python
- # print (name)
- name = input(「name:」)
- age = int(input(「age:」))
- job = input(「job:」)
- salary = input(「salary:」)
- info3 = 」’
- ——-info of {_name_} ——
- Name:{_name_}
- Age:{_age_}
- Job:{_job_}
- Salary:{_salary_}
- 」’ .format(_name_=name,
- _age_=age,
- _job_=job,
- _salary_=salary)
- print(info3)
執行結果以下:
- name:lizhong
- age:24
- job:engineer
- salary:20000
- ——-info of lizhong ——
- Name:lizhong
- Age:24
- Job:engineer
- Salary:20000
1.11流程控制
1.11.1 if….else
- #!/usr/bin/env python
- # 提示輸入用戶名和密碼
- # 驗證用戶名和密碼
- # 若是錯誤,則輸出用戶名或密碼錯誤
- # 若是成功,則輸出 歡迎,XXX!
- import getpass
- user = 「lizhong」
- passwd = 「123」
- username = input(「請輸入用戶:」)
- #pwd = input(「請輸入密碼:」) #明文
- pwd = getpass.getpass(「請輸入密碼:」) #密文
- if user == username and pwd == passwd:
- print(「歡迎,lizhong!」)
- else:
- print (「用戶名和密碼錯誤」)
1.11.2 if…elif…else
- #!/usr/bin/env python
- name = input(‘Name:’)
- age =int(input(‘Age:’))
- job = input(‘Job:’)
- if age >40:
- msg = ‘You are too old!’
- elif age >30:
- msg = ‘You have a few years to have fun’
- else:
- msg = ‘You are still quite young.’
- info= 」’\tName:%s
- \tAge: %d
- \tJob: %s
- ——————————————–
- %s
- 」’ % (name,age,job,msg)
- print(info)