1. 程式人生 > >Python成長之路

Python成長之路

usr c++編寫 序列 strong 動態生成 安裝 enc 兩個 布爾

基礎篇

第一章 Python發展、安裝、使用

1Python簡介

2Python安裝

3、第一個Python程序

4、變量

5、字符編碼與二進制

6、字符編碼的區別

7if - else流程判斷

8while循環

第一章 Python發展、安裝、使用

Python的簡介

  說到Python語言,就不得不說一下它的創始為吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆為了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,作為ABC語言的一種繼承。

  下面看下最新的TIOBE排行榜。

  

  由上圖可以看出python已經連續在2016、2017都處在第五的位置,在前五的編程語言中只有python任處於增長的趨勢,從中可以看出Python已經被這個行業所承認。

Python現在所能應用的場景有:

Web應用開發

Python經常被用於Web開發。比如,通過mod_wsgi模塊,Apache可以運行用Python編寫的Web程序。Python定義了WSGI標準應用接口來協調Http服務器與基於Python的Web程序之間的通信。一些Web框架,如Django,TurboGears,web2py,Zope等,可以讓程序員輕松地開發和管理復雜的Web程序。

操作系統管理、服務器運維的自動化腳本

在很多操作系統裏,Python是標準的系統組件。 大多數Linux發行版以及NetBSD、OpenBSD和Mac OS X都集成了Python,可以在終端下直接運行Python。有一些Linux發行版的安裝器使用Python語言編寫,比如Ubuntu的Ubiquity安裝器,Red Hat Linux和Fedora的Anaconda安裝器。Gentoo Linux使用Python來編寫它的Portage包管理系統。Python標準庫包含了多個調用操作系統功能的庫。通過pywin32這個第三方軟件 包,Python能夠訪問Windows的COM服務及其它Windows API。使用IronPython,Python程序能夠直接調用.Net Framework。一般說來,Python編寫的系統管理腳本在可讀性、性能、代碼重用度、擴展性幾方面都優於普通的shell腳本。

科學計算

NumPy,SciPy,Matplotlib可以讓Python程序員編寫科學計算程序。

桌面軟件

PyQt、PySide、wxPython、PyGTK是Python快速開發桌面應用程序的利器。

服務器軟件(網絡軟件)

Python對於各種網絡協議的支持很完善,因此經常被用於編寫服務器軟件、網絡爬蟲。第三方庫Twisted支持異步網絡編程和多數標準的網絡協議(包含客戶端和服務器),並且提供了多種工具,被廣泛用於編寫高性能的服務器軟件。

遊戲

很多遊戲使用C++編寫圖形顯示等高性能模塊,而使用Python或者Lua編寫遊戲的邏輯、服務器。相較於Python,Lua的功能更簡單、體積更小;而Python則支持更多的特性和數據類型。

構思實現,產品早期原型和叠代

YouTube、Google、Yahoo!、NASA都在內部大量地使用Python。

還有其他的一些諸如數據分析人工智能方面的應用

Python的幾種解釋器

CPython

當我們從Python官方網站下載並安裝好Python 3.5後,我們就直接獲得了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,所以叫CPython。在命令行下運行python就是啟動CPython解釋器。

CPython是使用最廣的Python解釋器。

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的一些特點

  Python是一個解釋型、動態類型語強定義類型的編程語言,它擁有非常龐大的庫,具有非常高的開發效率、可移植性、可擴展、可嵌入性。當然它也有一些缺點就是代碼的執行速度慢、代碼不能加密、線程不能利用多cpu等問題。

  總的來說編程語言是用來實現工程師思想的一個工具沒有什麽好壞之分只有你能不能利用好它的特性,不要拿一個程序的缺點和另外一個程序的有點進行對比。

Python的安裝

Window 平臺安裝 Python:

以下為在 Window 平臺上安裝 Python 的簡單步驟:

  • 打開WEB瀏覽器訪問https://www.python.org/downloads/windows/
  • 在下載列表中選擇你想下載版本,在這裏我選擇的是最新python3的版本 。
  • 要使用安裝程序 python-XYZ.msi, Windows系統必須支持Microsoft Installer 2.0搭配使用。只要保存安裝文件到本地計算機,然後運行它,看看你的機器支持MSI。Windows XP和更高版本已經有MSI,很多老機器也可以安裝MSI。
  • 下載後,雙擊下載包,進入Python安裝向導,安裝非常簡單,你只需要使用默認的設置一直在點擊"下一步"直到安裝完成即可。
  • 然後就是配置環境變量 【右鍵計算機】-->【屬性】-->【高級系統設置】-->【高級】-->【環境變量】-->【在系統變量下選擇path】-->【選擇編輯】-->【把Python安裝目錄復制到這行的最後面記住在復制安裝目錄時要打英文的分隔符;】

Unix & Linux 平臺安裝 Python

一般情況下現在的Linux默認安裝python2,如果沒有安裝就按照下面的步驟安裝:

  • 打開WEB瀏覽器訪問http://www.python.org/download/
  • 選擇適用於Unix/Linux的源碼壓縮包。
  • 下載及解壓壓縮包。
  • 如果你需要自定義一些選項修改Modules/Setup
  • 執行 ./configure 腳本
  • make
  • make install

執行以上操作後,Python會安裝在 /usr/local/bin 目錄中,Python庫安裝在/usr/local/lib/pythonXX,XX為你使用的Python的版本號。

MAC 平臺安裝 Python

現在的Mac都默認有環境變量只要到官網下載相應的版本就能夠使用

編寫第一個Python程序

我是用的編程的軟件是pycharm在裏面創建相應的文件就ok,關於怎麽使用pycharm自己可以上網搜尋相關的文章。

執行的結果是:

如果實在Linux系統中在腳本中的頂個要加上 #!/usr/bin/env python 這個的意思就是在執行程序的時候,會去取你機器的path中指定的第一個python來執行你的腳本。這樣寫是為了防止有的Python不是安裝在默認的地方。在執行程序的時候幾個給這個文件相應的執行權限即:chmod a+x *.py 後就可以在當前的目錄下執行:./*.py 。或者再不給權限的時候直接python *.py同樣有效。

變量

變量定義的規則:

  • 變量名只能是 字母、數字或下劃線的任意組合
  • 變量名的第一個字符不能是數字
  • 以下關鍵字不能聲明為變量名
    [‘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‘]

變量命名的習慣

想要成為一個優秀的程序員首先我們要有良好的編程習慣,當你的代碼越寫越多的時候會發現你定義的變量也會越來越多,為了增加代碼的易讀性和方便調試,給變量起名時一定要遵循一定的命名習慣,你起的變量名稱最好能讓人一眼就大概知道這個變量是幹什麽用的,比如,getUserName一看就知道,這個變量應該是要獲取用戶的姓名。

check_current_conn_count代表是要檢查現在的連接數,只有這樣,別人才能在看你的代碼時知道你的這些變量的作用,而如果你把變量名全起成了var1,var2,var3…..varN,這樣別人在閱讀代碼時根本不值有這個變量是幹什麽用,給別人閱讀代碼或者調試時帶來困難這樣別人會邊看邊罵死你,同時你自己時間長了一不知道他們的意義。

變量名的定義在能表達清楚它的作用的前提下最越簡潔越好,能用一個單詞表述清楚的盡量就不要用兩個。變量起名時一般有這麽幾種寫法,你覺得哪種最簡潔,你就選哪種吧。

CheckCurrentConnCount

check_current_conn_count

checkCurrentConnCount

不好的起名:

CHECKCURRENTCONNCOUNT

Var1 var2 var3 varN

Checkcurrentconncount

變量的賦值:

在Python中變量的賦值相當於引用機制,如上面的列子:系統先在內存中把相應的“yangpan”這個字符串存儲進去,然後把變量name指向內存中存儲“yangpan”的那個地址如圖所示:

在Python中我們創建一個變量name,再把這個變量name賦值給下一個變量name2。實際上是使變量name2指向內存中的地址和變量name指向內存的地址相同的位置。當變量name改變賦值後變量name指向內存中的地址發生改變,變量name2指向內存中的地址不會發生改變。具體在內存中的變化如下圖:

註意:

1、 賦值變量時如name = “china yang”註意這個必須要用英文的雙引號括起來,雙引號裏面的字母或數字不是連續的外面必須要有雙引號

2、 name2 = name 這個不加雙引號表示把變量name賦值給name2

3、 name3 = “name”這個表示把字符串”name”賦值給name3

4、 name4 = True 這個是布爾值,一般用作邏輯判斷。

常量

剛才說到了變量,還有一概念就是常量,所謂常量就是不能變的變量,比如常用的數學常數π就是一個常量。在Python中,通常用全部大寫的變量名表示常量:

PI = 3.14159265359

但事實上PI仍然是一個變量,Python根本沒有任何機制保證PI不會被改變,所以,用全部大寫的變量名表示常量只是一個習慣上的用法,如果你一定要改變變量PI的值,也沒人能攔住你。

字符編碼

因為計算機只能處理數字,如果要處理文本,就必須先把文本轉換為數字才能處理。最早的計算機在設計時采用8個比特(bit)作為一個字節(byte),所以,一個字節能表示的最大的整數就是255(二進制11111111=十進制255),如果要表示更大的整數,就必須用更多的字節。比如兩個字節可以表示的最大整數是65535,4個字節可以表示的最大整數是4294967295。

由於計算機是美國人發明的,因此,最早只有127個字母被編碼到計算機裏,也就是大小寫英文字母、數字和一些符號,這個編碼表被稱為ASCII編碼,比如大寫字母A的編碼是65,小寫字母z的編碼是122。

但是要處理中文顯然一個字節是不夠的,至少需要兩個字節,而且還不能和ASCII編碼沖突,所以,中國制定了GB2312編碼,用來把中文編進去。

你可以想得到的是,全世界有上百種語言,日本把日文編到Shift_JIS裏,韓國把韓文編到Euc-kr裏,各國有各國的標準,就會不可避免地出現沖突,結果就是,在多語言混合的文本中,顯示出來會有亂碼。

因此,Unicode應運而生。Unicode把所有語言都統一到一套編碼裏,這樣就不會再有亂碼問題了。

Unicode標準也在不斷發展,但最常用的是用兩個字節表示一個字符(如果要用到非常偏僻的字符,就需要4個字節)。現代操作系統和大多數編程語言都直接支持Unicode。

現在,捋一捋ASCII編碼和Unicode編碼的區別:ASCII編碼是1個字節,而Unicode編碼通常是2個字節。

字母A用ASCII編碼是十進制的65,二進制的01000001;

字符0用ASCII編碼是十進制的48,二進制的00110000,註意字符‘0‘和整數0是不同的;

漢字中已經超出了ASCII編碼的範圍,用Unicode編碼是十進制的20013,二進制的01001110 00101101。

你可以猜測,如果把ASCII編碼的A用Unicode編碼,只需要在前面補0就可以,因此,A的Unicode編碼是00000000 01000001。

新的問題又出現了:如果統一成Unicode編碼,亂碼問題從此消失了。但是,如果你寫的文本基本上全部是英文的話,用Unicode編碼比ASCII編碼需要多一倍的存儲空間,在存儲和傳輸上就十分不劃算。

所以,本著節約的精神,又出現了把Unicode編碼轉化為“可變長編碼”的UTF-8編碼。UTF-8編碼把一個Unicode字符根據不同的數字大小編碼成1-6個字節,常用的英文字母被編碼成1個字節,漢字通常是3個字節,只有很生僻的字符才會被編碼成4-6個字節。如果你要傳輸的文本包含大量英文字符,用UTF-8編碼就能節省空間:

字符

ASCII

Unicode

UTF-8

A

01000001

00000000 01000001

01000001

x

01001110 00101101

11100100 10111000 10101101

從上面的表格還可以發現,UTF-8編碼有一個額外的好處,就是ASCII編碼實際上可以被看成是UTF-8編碼的一部分,所以,大量只支持ASCII編碼的歷史遺留軟件可以在UTF-8編碼下繼續工作。

搞清楚了ASCII、Unicode和UTF-8的關系,我們就可以總結一下現在計算機系統通用的字符編碼工作方式:

在計算機內存中,統一使用Unicode編碼,當需要保存到硬盤或者需要傳輸的時候,就轉換為UTF-8編碼。

用記事本編輯的時候,從文件讀取的UTF-8字符被轉換為Unicode字符到內存裏,編輯完成後,保存的時候再把Unicode轉換為UTF-8保存到文件:

瀏覽網頁的時候,服務器會把動態生成的Unicode內容轉換為UTF-8再傳輸到瀏覽器:

所以你看到很多網頁的源碼上會有類似<meta charset="UTF-8" />的信息,表示該網頁正是用的UTF-8編碼。

上面這個關於字符編碼的是看見Alex老師的。個人感覺寫的簡要明了,能夠很好的理解

if- else流程判斷

在說if語句是先說一下Python中的一個內建函數input(),通過讀取控制臺的輸入與用戶實現交互

if語句:

語法如下:

if expression:

do this

elif sxpression:

do this

....

else:

do this

如果表達式中的expression的值為真(不為零的任何值都為真),或表達式成立,程序將執行縮進後的內容(務必要正確的縮進)。如果不成立執行下面的elif語句同樣也是看expression的值為真(不為零的任何值都為真),或表達式成立。執行縮進後的內容。如果不成功就一直下面有的elif語句直到執行else語句時整個流程判斷結束,或者在前面執行if語句或者elif語句成功時結束流程判斷。一個簡單猜年齡小遊戲來實現這個流程判斷。這個遊戲只能玩一次

技術分享

技術分享

使用if-else語句中我們可以在判斷語句中嵌套判斷語句,如下面的小遊戲。

技術分享

技術分享

while循環

while循環語發結構

while expression:

while_suite

while中的expression非0或者Flash時,語句while_suite會連續不斷地循環執行,直到expression的值為0或者Flash結束循環。

技術分享

技術分享

continue、break語句

再說到while循環時再來說一下跳出循環語句break和結束本次循環語句的continue的區別。再循環語句while中當執行到break語句時整個while循環的語句都將結束。然後當執行到continue語句時,如果while的expression的值為非0或者Flash時只是結束當前的循環,開始下一個循環直到執行break語句或者while中的expression的值為0或者Flash時,整個while循環才回結束。下面我們求1到100所有偶數相加的和:

技術分享

技術分享

由上面的2個列子可以愉悅的分辨出break語句時直接結束整個循環,而continue時結束當前的循環開始下一輪循環。

for循環

for循環可以遍歷任何序列的項目現在在這我們簡單的說下for循環的應用。

for <variable> in <sequence>:

<statements>

else:

<statements>

技術分享

技術分享

在說上面之前我們先說一下range函數,range函數會生成一個list列表。

range(i)中的i代表生成一個列表從0到i-1,也可以用xrange(i)表示關於

xrange輸出的結果和range是一樣的不過它不是立馬生成一個list他返回的是一個生成器

所以xrange做循環的性能比range好,尤其是返回很大的時候!

盡量用xrange吧,除非你是要返回一個列表才用range。

現在說說for循環。

在上面的列子中我們可以看到我們每次在range(5)創建的list對象去一個值然後輸出,再取一個值在輸出,知道取完為止。這個就是for循環。

關於for循環我說的也不多,這個純屬新人。

本人第一次寫博客,個人也感覺寫的的好,但是我個人主要是加深下自己所學知識。我也會堅持寫下去,希望以後在寫博客時在加深自己的理解時,能夠有所進步給一些小白帶來幫助

Python成長之路