Python 的創始人爲吉多·範羅蘇姆(Guido van Rossum).1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承.Python是純粹的自由軟件,源代碼和解釋器CPython遵循 GPL(GNU General Public License)協議.關於python的哲學:python崇尚:"優雅"、"明確"、"簡單",Python是用最簡單最優雅最明確的方法來解決問題.java
Python 是一種動態解釋型的編程語言,Python 簡單易學、功能強大,支持面向對象、與函數式編程.Python能夠在 Windows、Unix等多個操做系統上使用,同時Python也被稱爲"膠水語言",Python做爲最流行的腳本語言之一,其具備內置的高級數據結構和簡單有效的面向對象編程思想實現.同時語法簡潔而清晰,類庫豐富而強大,很是適合於進行快速原型開發,能夠用最少的時間換取最高效的開發效率,另外Python能夠運行在多種系統平臺下,從而使得只須要編寫一次代碼,就能夠在多個系統平臺下都保持有同等的功能,這一點絲絕不遜色於Java虛擬機.python
Python 語言是由Guido van Rossum(吉多·範羅蘇姆)
,在1989年開發的,1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,以做爲ABC語言的一種繼承,其設計思想是簡潔明瞭Python的設計具備很強的可讀性,相比其餘語言常用英文關鍵字,其餘語言的一些標點符號,它具備比其餘語言更有特點語法結構.linux
Python 語言已經誕生20多年了,正逐漸發展爲主流程序設計語言之一,目前在TIOBE編程語言排行榜中長期佔據第4的位次,因爲Python 語言的動態性,程序解釋執行的速度比編譯型語言慢,但隨着Python語言的不斷優化,一些諸如PyPy項目的不斷髮展,以及計算機硬件技術的不斷髮展,動態語言已經愈來愈受到工業領域的重視,另外最大的一點好處是,Python是純粹的自由軟件,源代碼和解釋器CPython遵循GPL(GNU General Public License)
協議,Python的哲學就是崇尚"優雅"、"明確"、"簡單",Python是用最簡單最優雅最明確的方法來解決問題.
程序員
程序設計語言在不斷髮展,從最初的彙編語言到後來的C、Pascal語言,發展到如今的C++、Java等高級編程語言,程序設計的難度在不斷減少,軟件的開發和設計已經造成了一套標準,開發工做已經再也不是複雜的任務.最初只能使用機器碼編寫代碼,而如今可使用具備良好調試功能的IDE環境編程,Python使用C語言開發,可是Python再也不有C語言中的指針等複雜數據類型,Python的簡潔性使得軟件的代碼大幅度地減小,開發任務進一步簡化.django
面向對象的特性:
面向對象的程序設計解決告終構化程序設計的複雜性,使得程序設計更貼近現實生活.結構化程序設計把數據和邏輯混合在一塊兒,不便於程序的維護.面向對象的程序設計抽象出對象的行爲和屬性,把行爲和屬性分離開,但又合理地組織在一塊兒.Python語言具備很強的面向對象特性,並且簡化了面向對象的實現,它消除了保護類型、抽象類、接口等面向對象的元素,使得面向對象的概念更容易理解.編程
內置的數據結構:
Python提供了一些內置的數據結構,這些數據結構實現了相似Java中集合類的功能,Python的數據結構包括元組、列表、字典、集合等.內置數據結構的出現簡化了程序的設計,元組至關於"只讀"的數組,列表能夠做爲可變長度的數組使用,字典至關於Java中的HashTable類型.vim
語言自己的簡潔性:
Python語言的關鍵字比較少,它沒有分號、begin、end等標記符號,代碼塊使用空格或製表鍵進縮進方式來分割,其代碼簡潔、短小,易於閱讀,Python簡化了相關循環語句,就算很是複雜的語句,也可以快速讀懂.centos
語言自己的健壯性:
Python提供了異常處理機制,能捕獲程序的異常狀況.此外Python的堆棧跟蹤對象可以指出程序出錯的位置和出錯的緣由,異常機制可以避免不安全退出的狀況,同時能幫助程序員調試程序.數組
跨平臺(相似Java):
Python代碼會先編譯爲與平臺相關的二進制代碼,而後再解釋執行,這種方式相似java,Python的執行速度提升了,Python編寫的應用程序能夠運行在 Windows、UNIX、Linux等,不一樣的操做系統上.安全
Python 的應用領域
● 雲計算:雲計算最火的語言就是Pythhon,典型應用OpenStack框架就是使用Python開發的.
● WEB開發:衆多優秀的WEB框架,衆多大型網站均爲Python開發,例如django框架.
● 人工智能:NumPy,SciPy,Matplotlib,Enthought,librarys這些框架是人工智能的主要實現.
● 系統運維:運維人員開發腳本進行自動化管理,因爲全部的Linux/Mac默認集成Python環境.
● 金融計算:量化交易,金融分析,金融工程領域的普遍應用.
● 黑客編程:擁有大量的黑客攻擊模塊,能夠很方便的使用這些模塊.
● 圖形GUI:PyQT,WxPython,TkInter等圖形框架,如今已經逐步變得更加的完善.
Python 這些公司在用
● 谷歌:Google App Engine 谷歌爬蟲等項目都在大量使用Python
● CIA:美國中情局網站就是用Python開發的
● NASA:美國航天局(NASA)大量使用Python進行數據分析和運算
● YouTube:世界上最大的視頻網站YouTube就是用Python開發的
● Dropbox:美國最大的在線雲存儲網站,所有用Python實現,天天網站處理10億個文件的上傳和下載
● Facebook:大量的基礎庫均經過Python實現的
● Redhat:世界上最流行的Linux發行版本中的yum包管理工具就是用python開發的
● 豆瓣:豆瓣公司幾乎全部的業務均是經過Python開發
Python 語言的優缺點
● 優雅:Python程序看上去老是簡單易懂,能夠編寫那些很是很是複雜的程序.
● 效率:Python有很是強大的第三方庫,避免重複造輪子,開發效率很是高.
● 高級語言:用Python語言編寫程序的時候,你無需考慮諸如如何管理程序使用的內存的底層細節.
● 可移植性:因爲開源本質,已經被移植在許多平臺上,您寫的程序能夠不加修改的運行在任何系統上.
● 可擴展性:Python被稱做膠水語言能夠與各類語言實現的功能交互互相調用.
● 可嵌入性:你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能.
● 速度慢:Python是腳本語言,解釋執行因此其執行效率很低,但通常工做足以應對.
● 代碼不能加密:python是解釋語言代碼,沒法加密,開源精神很重要.
● 線程不能利用多CPU問題:GIL即全局解釋器鎖,使得任什麼時候刻僅有一個線程在執行.
以上就是所有的關於Python的簡單介紹了,具體若是想進一步瞭解Python的其餘歷史,請自行問度娘.
參考博客 cnblogs.com/alex3714
Python的開發環境安裝和配置很是的簡單,若是是Linux系統則會默認集成安裝了Python環境,Python的可執行文件被放在了/usr/local/bin
目錄下,庫函數被安裝在了/usr/local/python
目錄中,接下來咱們將使用源碼的方式來編譯安裝一下Python解釋器.
1.首先安裝gcc編譯器,和Python的相關依賴包.
[root@localhost ~]# yum -y install gcc zlib zlib-devel openssl openssl-devel libffi-devel Package gcc-4.8.5-36.el7.x86_64 already installed and latest version Package zlib-1.2.7-18.el7.x86_64 already installed and latest version Package zlib-devel-1.2.7-18.el7.x86_64 already installed and latest version Package 1:openssl-1.0.2k-16.el7.x86_64 already installed and latest version Package 1:openssl-devel-1.0.2k-16.el7.x86_64 already installed and latest version Package libffi-devel-3.0.13-18.el7.x86_64 already installed and latest version Nothing to do
2.這裏咱們須要編譯並安裝Python解釋器.
[root@localhost ~]# yum install -y readline [root@localhost ~]# wget https://www.python.org/ftp/python/3.7.0/Python-3.7.0.tgz [root@localhost ~]# tar xvzf Python-3.7.0.tgz -C /usr/src/python3.7 [root@localhost ~]# cd /usr/src/Python-3.7.0/ [root@localhost ~]# ./configure --prefix=/usr/local/python3.7 [root@localhost ~]# make && make altinstall
3.將Python頭文件拷貝到標準目錄,避免直接使用Python找不到所需的頭文件.
[root@localhost ~]# cd /usr/local/include/python3.7/ [root@localhost ~]# cp -a ./* /usr/local/include/
4.接着咱們備份一下舊版本的Python,並建立符號連接連接到新版本的Python上面.
[root@localhost ~]# cd /usr/bin/ [root@localhost bin]# mv python python.old [root@localhost bin]# ln -s /usr/local/bin/python3.7 /usr/local/bin/python [root@localhost bin]# rm -rf /usr/bin/python [root@localhost bin]# cp /usr/local/bin/python3.7 /usr/bin/python
5.因爲yum是用Python開發的,這裏爲了不衝突要改掉他的配置.
[root@localhost ~]# vim /usr/bin/yum #!/usr/bin/python2.7 ←此處將python改爲python2.7 [root@localhost ~]# vim /usr/libexec/urlgrabber-ext-down #!/usr/bin/python2.7 ←此處將python改爲python2.7
6.最後測試python新版本是否生效了.
[root@localhost ~]# python Python 3.7.0 (default, Apr 17 2018, 11:03:21) [GCC 4.8.5 20150623 (Red Hat 4.8.5-11)] on linux Type "help", "copyright", "credits" or "license" for more information. >>> exit()
python3中格式化輸出默認接收的都視爲字符串,若是須要數字則須要另外強制轉換爲int()轉換爲數字.
>>> name = input("請輸入你的名字:") 請輸入你的名字:lyshark >>> print("Hello " + name) Hello lyshark >>> age = input("請輸入你的年齡:") 請輸入你的年齡:22 >>> type(age) <class 'str'> #默認狀況是字符串 >>> age1 = input("請輸入你的年齡:") >>> age1 = int(age1) #此處強制類型轉換 >>> type(age1) <class 'int'> #再次查詢已變成整形
輸入密碼時,若是想要不可見,須要利用getpass模塊中的getpass方法,即:
import getpass # 將用戶輸入的內容賦值給 pwd 變量 pwd = getpass.getpass("請輸入密碼:") 請輸入密碼: # 打印輸入的內容 print(pwd)
輸出字符串: 格式化輸出字符串.
>>> str="hello python" >>> print(str) hello python
輸出整數: 格式化輸出整數.
>>> strHello="the length of (%s) is %d" %("hello world",len("hello world")) >>> print(strHello) the length of (hello world) is 11
進制輸出: 格式化輸出十進制,十六進制,八進制.
>>> nHex=0x20 >>> print("十六進制=%x,十進制=%d,八進制=%o"%(nHex,nHex,nHex)) 十六進制=20,十進制=32,八進制=40
二進制輸出: 格式化輸出二進制,可使用python函數bin().
>>> bin(155) '0b10011011'
格式化輸出浮點數(float):
>>> import math >>> print("PI=%F"%math.pi) PI=3.141593 >>> print("PI=%10.2f"%math.pi) PI= 3.14 >>> print("PI=%-10.2f"%math.pi) PI=3.14
格式化輸出字符串(string):
>>> print("%3s"%("lyshark")) lyshark >>> print("%3s"%("lyshark")) lyshark >>> print("%.*s"%(4,"lyshark")) lysh >>> print("%10.3s"%("lyshark")) lys
輸出一個列表(list):
>>> list=[1,2,3,4,5,"lyshark"] >>> print(list) [1, 2, 3, 4, 5, 'lyshark'] >>> >>> dic={1:"A",2:"b",3:"c"} >>> print(dic) {1: 'A', 2: 'b', 3: 'c'}
自動換行: print會自動在行末加上回車,若是不需回車,只須要加上,便可.
>>> for i in range(0,5): ... print(i,)
萬能的%參數:
>>> format="%r %r %r %r" >>> print(format%(1,2,3,4)) 1 2 3 4
格式化打印: 讓多個print打印在一行內.
print('hello', end = " ") print('world', end = "*") print('!') """ 輸出結果是: hello world*! """
字符串拼接:
>>> str1="hello" >>> str2="lyshark" >>> print(str1+str2) hellolyshark
拓展知識: 打印一個乘法口訣表.
for i in range(1,10): for m in range (1,i+1): sum = i * m if m < i: print(m, '*', i, '=', sum ,end= ' ') else: print(m, '*', i, '=', sum)
sys模塊:
import sys print(sys.argv) root@localhost:~$ python test.py helo world ['test.py', 'helo', 'world'] #把執行腳本時傳遞的參數獲取到了
os模塊:
>>> import os >>> os.system("df -h") #調用系統命令
os.system()執行系統命令,若是有變量存儲該執行的結果,該變量只會存儲該命令執行成功或者失敗返回值,不會存儲命令執行的結果,os.system("df -h")會有返回值.
>>> result = os.system("df -h") df: ‘/mnt/hgfs’: Protocol error Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 797M 9.4M 788M 2% /run /dev/sda1 189G 10G 170G 6% /
若是須要保存命令執行的結果需喲使用os.popen("系統命令").read(),而後使用變量賦值輸出.
>>> result = os.popen("df -h").read() >>> print(result) Filesystem Size Used Avail Use% Mounted on udev 3.9G 0 3.9G 0% /dev tmpfs 797M 9.4M 788M 2% /run /dev/sda1 189G 10G 170G 6% /
本身寫個補全模塊tab.py:
#!/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
寫完後保存,導入就可使用,按下tab看到補全效果了.
>>> import tab >>> import os >>> os. Display all 238 possibilities? (y or n) os.EX_CANTCREAT os.fchdir( os.EX_CONFIG os.fchmod( os.EX_DATAERR os.fchown(
Python 並不是徹底是解釋性語言,它是有編譯的,先把源碼py文件編譯成pyc或者pyo,而後由Python的虛擬機執行,相對於py文件來講,編譯成pyc和pyo本質上和py沒有太大區別,只是對於這個模塊的加載速度提升了,並無提升代碼的執行速度,一般狀況下不用主動去編譯pyc文件,文檔上說只要調用了import model
那麼model.py就會先編譯成pyc而後加載.
當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中.
當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,若是找到,先對.pyc文件和.py文件的最近一次的修改時間進行判斷,若是.pyc文件的修改時間晚於.py文件,說明.py文件中的源代碼未修改過,則直接載入,不然就重複上面的過程.
因此咱們應該這樣來定位PyCodeObject和pyc文件,咱們說pyc文件實際上是PyCodeObject的一種持久化保存方式.
編譯成pyc文件: 將咱們寫好的一個.py文件編譯成.pyc文件.
[root@localhost ~]# ls -lh total 4.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py [root@localhost ~]# python -m test.py [root@localhost ~]# ls -lh total 8.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py -rw-r--r--. 1 root root 163 Jan 8 02:25 test.pyo
編譯成pyo文件: 將咱們寫好的一個.py文件編譯成.pyo文件.
[root@localhost ~]# ls -lh total 4.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py [root@localhost ~]# python -O -m test.py [root@localhost ~]# ls -lh total 8.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py -rw-r--r--. 1 root root 163 Jan 8 02:25 test.pyo
1.經過pip安裝打包工具pyinstaller
.
[root@localhost ~]# yum install -y python-pip Package python2-pip-8.1.2-6.el7.noarch already installed and latest version Nothing to do [root@localhost ~]# pip install pyinstaller Collecting pyinstaller Downloading https://files.pythonhosted.org/pyinstall
2.準備測試文件,執行如下命令加密生成可執行文件.
[root@localhost ~]# ls -lh total 4.0K -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py [root@localhost ~]# pyinstaller -F ./test.py 44 INFO: PyInstaller: 3.4 44 INFO: Python: 2.7.5 44 INFO: Platform: Linux-3.10.0-862.el7.x86_64-x86_64-with-centos-7.5.1804-Core 44 INFO: wrote /root/test.spec 152 INFO: UPX is not available. 155 INFO: Extending PYTHONPATH with paths ......
3.而後查看,在當前目錄會看到生成個3個目錄,其中dist
目錄中的內容,就是生成的可執行文件.
[root@localhost ~]# ls -lh total 8.0K drwxr-xr-x. 3 root root 18 Jan 8 02:29 build drwxr-xr-x. 2 root root 18 Jan 8 02:29 dist -rw-r--r--. 1 root root 43 Jan 8 02:22 test.py -rw-r--r--. 1 root root 786 Jan 8 02:29 test.spec [root@localhost dist]# ls -lh total 4.7M -rwxr-xr-x. 1 root root 4.6M Jan 8 02:29 test [root@localhost dist]# ./test hello world