Python 語言簡介與入門(1)

Python 的創始人爲吉多·範羅蘇姆(Guido van Rossum).1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承.Python是純粹的自由軟件,源代碼和解釋器CPython遵循 GPL(GNU General Public License)協議.關於python的哲學:python崇尚:"優雅"、"明確"、"簡單",Python是用最簡單最優雅最明確的方法來解決問題.java



Python 語言簡介

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是用最簡單最優雅最明確的方法來解決問題.

程序員

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 編譯安裝

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()


Python 輸入輸出

◆Input標準輸入◆

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)

◆Print標準輸出◆

輸出字符串: 格式化輸出字符串.

>>> 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)


Python 模塊概述

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 文件生成

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的一種持久化保存方式.

◆生成PY文件◆

編譯成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

◆打包EXE文件◆

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
相關文章
相關標籤/搜索