1、本節主要內容html
- Python介紹
- 發展史
- Python 2 or 3?
- 安裝
- Hello World程序
- 變量
- 用戶輸入
- 模塊初識
- .pyc文件
- 數據類型初識
- 數據運算
- 表達式if ...else語句
- 表達式for 循環
- break and continue
- 表達式while 循環
- 編碼問題
2、具體內容
1.python介紹
python的創始人爲吉多·範羅蘇姆(Guido van Rossum)。1989年的聖誕節期間,吉多·範羅蘇姆爲了在阿姆斯特丹打發時間,決心開發一個新的腳本解釋程序,做爲ABC語言的一種繼承。java
Python是一種解釋型、面向對象、動態數據類型的高級程序設計語言。自從20世紀90年代初Python語言誕生至今,它逐漸被普遍應用於處理系統管理任務和Web編程。Python已經成爲最受歡迎的程序設計語言之一。2011年1月,它被TIOBE編程語言排行榜評爲2010年度語言。自從2004年之後,python的使用率是呈線性增加。python
因爲Python語言的簡潔、易讀以及可擴展性,在國外用Python作科學計算的研究機構日益增多,一些知名大學已經採用Python教授程序設計課程。例如麻省理工學院的計算機科學及編程導論課程就使用Python語言講授。衆多開源的科學計算軟件包都提供了Python的調用接口,例如著名的計算機視覺庫OpenCV、三維可視化庫VTK、醫學圖像處理庫 ITK。而Python專用的科學計算擴展庫就更多了,例如以下3個十分經典的科學計算擴展庫:NumPy、SciPy和matplotlib,它們分別 爲Python提供了快速數組處理、數值運算以及繪圖功能。所以Python語言及其衆多的擴展庫所構成的開發環境十分適合工程技術、科研人員處理實驗數 據、製做圖表,甚至開發科學計算應用程序。linux
總的來講,Python能夠應用於衆多領域,如:數據分析、組件集成、網絡服務、圖像處理、數值計算和科學計算等衆多領域。目前業內幾乎全部大中型互聯網企業 都在使用Python,如:Youtube、Dropbox、BT、Quora(中國知乎)、豆瓣、知乎、Google、Yahoo!、 Facebook、NASA、百度、騰訊、汽車之家、美團等。c++
目前Python主要應用領域:
- 雲計算: 雲計算最火的語言, 典型應用OpenStack
- WEB開發: 衆多優秀的WEB框架,衆多大型網站均爲Python開發,Youtube, Dropbox, 豆瓣,知乎等;典型WEB框架有Django,flask, tornado等;
- 科學運算、人工智能: 典型庫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的優缺點:
先看優勢程序員
- Python的定位是「優雅」、「明確」、「簡單」,因此Python程序看上去老是簡單易懂,初學者學Python,不但入門容易,並且未來深刻下去,能夠編寫那些很是很是複雜的程序。
- 開發效率很是高,Python有很是強大的第三方庫,基本上你想經過計算機實現任何功能,Python官方庫裏都有相應的模塊進行支持,直接下載調用後,在基礎庫的基礎上再進行開發,大大下降開發週期,避免重複造輪子。
- 高級語言————當你用Python語言編寫程序的時候,你無需考慮諸如如何管理你的程序使用的內存一類的底層細節
- 可移植性————因爲它的開源本質,Python已經被移植在許多平臺上(通過改動使它可以工 做在不一樣平臺上)。若是你當心地避免使用依賴於系統的特性,那麼你的全部Python程序無需修改就幾乎能夠在市場上全部的系統平臺上運行
- 可擴展性————若是你須要你的一段關鍵代碼運行得更快或者但願某些算法不公開,你能夠把你的部分程序用C或C++編寫,而後在你的Python程序中使用它們。
- 可嵌入性————你能夠把Python嵌入你的C/C++程序,從而向你的程序用戶提供腳本功能。
再看缺點:web
- 速度慢,Python 的運行速度相比C語言確實慢不少,跟JAVA相比也要慢一些,所以這也是不少所謂的大牛不屑於使用Python的主要緣由,但其實這裏所指的運行速度慢在 大多數狀況下用戶是沒法直接感知到的,必須藉助測試工具才能體現出來,好比你用C運一個程序花了0.01s,用Python是0.1s,這樣C語言直接比 Python快了10倍,算是很是誇張了,可是你是沒法直接經過肉眼感知的,由於一個正常人所能感知的時間最小單位是0.15-0.4s左右,哈哈。其實 在大多數狀況下Python已經徹底能夠知足你對程序速度的要求,除非你要寫對速度要求極高的搜索引擎等,這種狀況下,固然仍是建議你用C去實現的。
- 代碼不能加密,由於PYTHON是解釋性語言,它的源碼都是以名文形式存放的,不過我不認爲這算是一個缺點,若是你的項目要求源代碼必須是加密的,那你一開始就不該該用Python來去實現。
- 線程不能利用多CPU問題,這是Python被人詬病最多的一個缺點,GIL即全局解釋器鎖(Global Interpreter Lock),是計算機程序設計語言解釋器用於同步線程的 工具,使得任什麼時候刻僅有一個線程在執行,Python的線程是操做系統的原生線程。在Linux上爲pthread,在Windows上爲Win thread,徹底由操做系統調度線程的執行。一個python解釋器進程內有一條主線程,以及多條用戶程序的執行線程。即便在多核CPU平臺上,因爲 GIL的存在,因此禁止多線程的並行執行。關於這個問題的折衷解決方法,咱們在之後線程和進程章節裏再進行詳細探討。
-
其餘缺點:算法
單行語句和命令行輸出問題:不少時候不能將程序連寫成一行,如import sys;for i in sys.path:print i。而perl和awk就無此限制,能夠較爲方便的在shell下完成簡單程序,不須要如Python同樣,必須將程序寫入一個.py文件。shell
獨特的語法編程
這也許不該該被稱爲侷限,可是它用縮進來區分語句關係的方式仍是給不少初學者帶來了困惑。即使是頗有經驗的Python程序員,也可能陷入陷阱當中。最多見的狀況是tab和空格的混用會致使錯誤,而這是用肉眼沒法分別的。
無類型?
做爲一種動態語言,隨時隨地建立和使用變量是Python給咱們帶來的巨大的便利。可是它也會使得程序不嚴謹,某些錯誤只有在運行中才可能出現。因此,使用Python編程的時候,要對類型作到內心有數。這也使得Python的IDE工具沒法提供便利的自動完成等功能。
關於「無類型」的說法,是徹底錯誤的。一看就是不瞭解python的人寫的。python是一種「強類型」「動態綁定」。
Python解釋器
當咱們編寫Python代碼時,咱們獲得的是一個包含Python代碼的以.py
爲擴展名的文本文件。要運行代碼,就須要Python解釋器去執行.py
文件。
因爲整個Python語言從規範到解釋器都是開源的,因此理論上,只要水平夠高,任何人均可以編寫Python解釋器來執行Python代碼(固然難度很大)。事實上,確實存在多種Python解釋器。
CPython
當咱們從Python官方網站下載並安裝好Python 2.7後,咱們就直接得到了一個官方版本的解釋器:CPython。這個解釋器是用C語言開發的,因此叫CPython。在命令行下運行python
就是啓動CPython解釋器。
CPython是使用最廣的Python解釋器。教程的全部代碼也都在CPython下執行。
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的解釋器不少,但使用最普遍的仍是CPython。若是要和Java或.Net平臺交互,最好的辦法不是用Jython或IronPython,而是經過網絡調用來交互,確保各程序之間的獨立性。
2.python發展史
- 1989年,爲了打發聖誕節假期,Guido開始寫Python語言的編譯器。Python這個名字,來自Guido所摯愛的電視劇Monty Python’s Flying Circus。他但願這個新的叫作Python的語言,能符合他的理想:創造一種C和shell之間,功能全面,易學易用,可拓展的語言。
- 1991年,第一個Python編譯器誕生。它是用C語言實現的,並可以調用C語言的庫文件。從一出生,Python已經具備了:類,函數,異常處理,包含表和詞典在內的核心數據類型,以及模塊爲基礎的拓展系統。
- Granddaddy of Python web frameworks, Zope 1 was released in 1999
- Python 1.0 - January 1994 增長了 lambda, map, filter and reduce.
- Python 2.0 - October 16, 2000,加入了內存回收機制,構成了如今Python語言框架的基礎
- Python 2.4 - November 30, 2004, 同年目前最流行的WEB框架Django 誕生
- Python 2.5 - September 19, 2006
- Python 2.6 - October 1, 2008
- Python 2.7 - July 3, 2010
- In November 2014, it was announced that Python 2.7 would be supported until 2020, and reaffirmed that there would be no 2.8 release as users were expected to move to Python 3.4+ as soon as possible
- Python 3.0 - December 3, 2008
- Python 3.1 - June 27, 2009
- Python 3.2 - February 20, 2011
- Python 3.3 - September 29, 2012
- Python 3.4 - March 16, 2014
- Python 3.5 - September 13, 2015
3.python2 or python3?
官方原文:
In summary : Python 2.x is legacy, Python 3.x is the present and future of the language
Python 3.0 was released in 2008. The final 2.x version 2.7 release came out in mid-2010, with a statement of extended support for this end-of-life release. The 2.x branch will see no new major releases after that. 3.x is under active development and has already seen over five years of stable releases, including version 3.3 in 2012,3.4 in 2014, and 3.5 in 2015. This means that all recent standard library improvements, for example, are only available by default in Python 3.x.
Guido van Rossum (the original creator of the Python language) decided to clean up Python 2.x properly, with less regard for backwards compatibility than is the case for new releases in the 2.x range. The most drastic improvement is the better Unicode support (with all text strings being Unicode by default) as well as saner bytes/Unicode separation.
Besides, several aspects of the core language (such as print and exec being statements, integers using floor division) have been adjusted to be easier for newcomers to learn and to be more consistent with the rest of the language, and old cruft has been removed (for example, all classes are now new-style, "range()" returns a memory efficient iterable, not a list as in 2.x).
中文解釋(裝X必備):
總而言之:Python 2.x是傳統的,Python 3.x是python的如今和將來。我的推薦儘可能用Python3。
Python 3.0於2008年發佈。2.x版本中的最後一版2.7發佈於2010年中,其中包含了python生命週期及其擴展的支持聲明。 2.x分支將沒有看到新的主要版本。 3.x正在積極開發中,已經有五年以上的穩定版本,包括2012年的3.3版本,2014年的3.4和2015年的3.5版本。這意味着全部最近的標準庫改進默認在Python 3.x.
Guido van Rossum(Python語言的原創者)決定適當地清理Python 2.x,考慮其向後兼容性,而不是在2.x範圍內的出新版本。最大的改進是更好的支持Unicode(全部文本字符串默認爲Unicode)以及saner字節/ Unicode分離。
此外,核心語言的幾個方面(例如print和exec是語句,使用floor division的整數)已經被調整爲讓新手學習起來更容易,而且與其他的語言更一致,而且舊的cruft已經被移除(例如,全部類如今都是新式的,「range()」返回一個內存高效的迭代,而不是如2.x中的列表)。
py2與3的詳細區別
1 Old: print "The answer is", 2*2 New: print("The answer is", 2*2)
2 Old: print x, # Trailing comma suppresses newline New: print(x, end=" ") # Appends a space instead of a newline
3 Old: print # Prints a newline
4 New: print() # You must call the function!
5 Old: print >>sys.stderr, "fatal error" New: print("fatal error", file=sys.stderr)
6 Old: print (x, y) # prints repr((x, y))
7 New: print((x, y)) # Not the same as print(x, y)!
You can also customize the separator between items, e.g.: (您還能夠自定義items之間的分隔符,例如:)
1 print("There are <", 2**32, "> possibilities!", sep="")
ALL IS UNICODE NOW(字符編碼統一爲Unicode)
今後再也不爲討厭的字符編碼而煩惱,還能夠這樣玩: (A,*REST,B)=RANGE(5)
1 <strong>>>> a,*rest,b = range(5)
2 >>> a,rest,b
3 (0, [1, 2, 3], 4)
4 </strong>
![](http://static.javashuo.com/static/loading.gif)
4.python安裝
windows下:
1
、下載安裝包
https:
/
/
www.python.org
/
downloads
/
2
、安裝
默認安裝路徑:C:\python35
3
、配置環境變量
【右鍵計算機】
-
-
》【屬性】
-
-
》【高級系統設置】
-
-
》【高級】
-
-
》【環境變量】
-
-
》【在第二個內容框中找到 變量名爲Path 的一行,雙擊】
-
-
> 【Python安裝目錄追加到變值值中,用 ; 分割】
如:原來的值;C:\python35\;C:\python35\Script\,切記前面有分號
linux、Mac:自帶,需更新
五、Hello World程序
在linux 下建立一個文件叫hello.py,並輸入:print("Hello Word")保存後,命令行輸入python hello.py便可。
windows下用IDE打開一個新窗口如圖:
![](http://static.javashuo.com/static/loading.gif)
在交互式窗口中:
Python 3.5.2 (v3.5.2:4def2a2901a5, Jun 25 2016, 22:01:18) [MSC v.1900 32 bit (Intel)] on win32
Type "copyright", "credits" or "license()" for more information.
>>> print("hello world!")
hello world!
>>>
6 變量
6.2Python 變量類型
變量:存儲在內存中的值。這就意味着在建立變量時會在內存中開闢一個空間。基於變量的數據類型,解釋器會分配指定內存,並決定什麼數據能夠被存儲在內存中。所以,變量能夠指定不一樣的數據類型,這些變量能夠存儲整數,小數或字符。
6.3變量賦值
Python 中的變量賦值不須要類型聲明。
每一個變量在內存中建立,都包括變量的標識,名稱和數據這些信息。每一個變量在使用前都必須賦值,變量賦值之後該變量纔會被建立。
等號「=」用來給變量賦值。
等號(=)運算符左邊是一個變量名,等號(=)運算符右邊是存儲在變量中的值。例如:
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3
4 counter = 100 # 賦值整型變量
5 miles = 1000.0 # 浮點型
6 name = "John" # 字符串
7
8 print(counter)
9 print(miles)
10 print(name)
以上實例中,100,1000.0和"John"分別賦值給counter,miles,name變量。
執行以上程序會輸出以下結果:
100 1000.0 John
6.4多個變量賦值
Python容許你同時爲多個變量賦值。例如:a = b = c = 1
以上實例,建立一個整型對象,值爲1,三個變量被分配到相同的內存空間上。
您也能夠爲多個對象指定多個變量。例如:a, b, c = 1, 2, "john"
以上實例,兩個整型對象1和2的分配給變量a和b,字符串對象"john"分配給變量c。
7 用戶輸入
>>> age = input("請輸入您的年齡:")
請輸入您的年齡:23
>>>
8 模塊初識
本篇從如今開始用的是python2.x版本,若是要轉換成3.X版本,請在print後加上()
8.1Python 模塊
模塊讓你可以有邏輯地組織你的Python代碼段。
把相關的代碼分配到一個 模塊裏能讓你的代碼更好用,更易懂。
模塊也是Python對象,具備隨機的名字屬性用來綁定或引用。
簡單地說,模塊就是一個保存了Python代碼的文件。模塊能定義函數,類和變量。模塊裏也能包含可執行的代碼。
例子
一個叫作aname的模塊裏的Python代碼通常都能在一個叫aname.py的文件中找到。下例是個簡單的模塊support.py。
1 def print_func(par):
2 print("Hello : ", par)
3 return
8.2 import 語句
想使用Python源文件,只需在另外一個源文件裏執行import語句,語法以下:
import module1[, module2[,... moduleN]
當解釋器遇到import語句,若是模塊在當前的搜索路徑就會被導入。
搜索路徑是一個解釋器會先進行搜索的全部目錄的列表。如想要導入模塊support.py,須要把命令放在腳本的頂端:
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3
4 # 導入模塊
5 import support
6
7 # 如今能夠調用模塊裏包含的函數了
8 support.print_func("Zara")
以上實例輸出結果:Hello : Zara
一個模塊只會被導入一次,無論你執行了多少次import。這樣能夠防止導入模塊被一遍又一遍地執行。
From…import 語句
Python的from語句讓你從模塊中導入一個指定的部分到當前命名空間中。語法以下:from modname import name1[, name2[, ... nameN]]
例如,要導入模塊fib的fibonacci函數,使用以下語句:from fib import fibonacci
這個聲明不會把整個fib模塊導入到當前的命名空間中,它只會將fib裏的fibonacci單個引入到執行這個聲明的模塊的全局符號表。
From…import* 語句
把一個模塊的全部內容全都導入到當前的命名空間也是可行的,只需使用以下聲明:from modname import *
這提供了一個簡單的方法來導入一個模塊中的全部項目。然而這種聲明不應被過多地使用。
定位模塊
當你導入一個模塊,Python解析器對模塊位置的搜索順序是:
- 當前目錄
- 若是不在當前目錄,Python 則搜索在 shell 變量 PYTHONPATH 下的每一個目錄。
- 若是都找不到,Python會察看默認路徑。UNIX下,默認路徑通常爲/usr/local/lib/python/。
模塊搜索路徑存儲在system模塊的sys.path變量中。變量裏包含當前目錄,PYTHONPATH和由安裝過程決定的默認目錄。
PYTHONPATH變量
做爲環境變量,PYTHONPATH由裝在一個列表裏的許多目錄組成。PYTHONPATH的語法和shell變量PATH的同樣。
在Windows系統,典型的PYTHONPATH以下:set PYTHONPATH=c:\python20\lib;
在UNIX系統,典型的PYTHONPATH以下:set PYTHONPATH=/usr/local/lib/python
命名空間和做用域
變量是擁有匹配對象的名字(標識符)。命名空間是一個包含了變量名稱們(鍵)和它們各自相應的對象們(值)的字典。
一個Python表達式能夠訪問局部命名空間和全局命名空間裏的變量。若是一個局部變量和一個全局變量重名,則局部變量會覆蓋全局變量。
每一個函數都有本身的命名空間。類的方法的做用域規則和一般函數的同樣。
Python會智能地猜想一個變量是局部的仍是全局的,它假設任何在函數內賦值的變量都是局部的。
所以,若是要給全局變量在一個函數裏賦值,必須使用global語句。
global VarName的表達式會告訴Python, VarName是一個全局變量,這樣Python就不會在局部命名空間裏尋找這個變量了。
例如,咱們在全局命名空間裏定義一個變量money。咱們再在函數內給變量money賦值,而後Python會假定money是一個局部變量。然而,咱們並無在訪問前聲明一個局部變量money,結果就是會出現一個UnboundLocalError的錯誤。取消global語句的註釋就能解決這個問題。
#!/usr/bin/python
# -*- coding: UTF-8 -*-
Money = 2000
def AddMoney():
# 想改正代碼就取消如下注釋:
# global Money
Money = Money + 1
print (Money)
AddMoney()
print (Money)
dir()函數
dir()函數一個排好序的字符串列表,內容是一個模塊裏定義過的名字。
返回的列表容納了在一個模塊裏定義的全部模塊,變量和函數。以下一個簡單的實例:
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3
4 # 導入內置math模塊
5 import math
6
7 content = dir(math)
8
9 print(content)
以上實例輸出結果:
['__doc__', '__file__', '__name__', 'acos', 'asin', 'atan', 'atan2', 'ceil', 'cos', 'cosh', 'degrees', 'e', 'exp', 'fabs', 'floor', 'fmod', 'frexp', 'hypot', 'ldexp', 'log', 'log10', 'modf', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh']
在這裏,特殊字符串變量__name__指向模塊的名字,__file__指向該模塊的導入文件名。
globals()和locals()函數
根據調用地方的不一樣,globals()和locals()函數可被用來返回全局和局部命名空間裏的名字。
若是在函數內部調用locals(),返回的是全部能在該函數裏訪問的命名。
若是在函數內部調用globals(),返回的是全部在該函數裏能訪問的全局名字。
兩個函數的返回類型都是字典。因此名字們能用keys()函數摘取。
reload()函數
當一個模塊被導入到一個腳本,模塊頂層部分的代碼只會被執行一次。
所以,若是你想從新執行模塊裏頂層部分的代碼,能夠用reload()函數。該函數會從新導入以前導入過的模塊。語法以下:
reload(module_name)
在這裏,module_name要直接放模塊的名字,而不是一個字符串形式。好比想重載hello模塊,以下:
reload(hello)
Python中的包
包是一個分層次的文件目錄結構,它定義了一個由模塊及子包,和子包下的子包等組成的Python的應用環境。
考慮一個在Phone目錄下的pots.py文件。這個文件有以下源代碼:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
def Pots():
print ("I'm Pots Phone")
一樣地,咱們有另外兩個保存了不一樣函數的文件:
- Phone/Isdn.py 含有函數Isdn()
- Phone/G3.py 含有函數G3()
如今,在Phone目錄下建立file __init__.py:
當你導入Phone時,爲了可以使用全部函數,你須要在__init__.py裏使用顯式的導入語句,以下:
from Pots import Pots
from Isdn import Isdn
from G3 import G3
當你把這些代碼添加到__init__.py以後,導入Phone包的時候這些類就全都是可用的了。
#!/usr/bin/python
# 導入 Phone 包
import Phone
Phone.Pots()
Phone.Isdn()
Phone.G3()
以上實例輸出結果:
I'm Pots Phone I'm 3G Phone I'm ISDN Phone
如上,爲了舉例,咱們只在每一個文件裏放置了一個函數,但其實你能夠放置許多函數。你也能夠在這些文件裏定義Python的類,而後爲這些類建一個包。
9 .pyc文件
9.1 Python是一門解釋型語言?
不少人說,Python是一門解釋性語言,我就這樣一直相信下去,直到發現了*.pyc文件的存在。若是是解釋型語言,那麼生成的*.pyc文件是什麼呢?c應該是compiled(編譯)的縮寫纔對啊!
爲了防止其餘學習Python的人也被這句話誤解,那麼咱們就在文中來澄清下這個問題,而且把一些基礎概念給理清。
9.2 解釋型語言和編譯型語言 ?
計算機是不可以識別高級語言的,因此當咱們運行一個高級語言程序的時候,就須要一個「翻譯機」來從事把高級語言轉變成計算機能讀懂的機器語言的過程。
這個過程分紅兩類,第一種是編譯,第二種是解釋。
編譯型語言在程序執行以前,先會經過編譯系統對程序執行一個「預處理、編譯、彙編、連接」的過程,把程序轉變成機器語言。運行時就不須要翻譯,而直接執行就能夠了。最典型的例子就是C語言。
解釋型語言就沒有這個編譯的過程,而是在程序運行的時候,經過解釋器對程序逐行做出解釋,而後直接運行,最典型的例子是Ruby。
經過以上的例子,咱們能夠來總結一下解釋型語言和編譯型語言的優缺點,由於編譯型語言在程序運行以前就已經對程序作出了「翻譯」,因此在運行時就少掉了「翻譯」的過程,因此效率比較高。可是咱們也不能一律而論,一些解釋型語言也能夠經過解釋器的優化來在對程序作出翻譯時對整個程序作出優化,從而在效率上超過編譯型語言。
此外,隨着Java等基於虛擬機的語言的興起,咱們又不能把語言純粹地分紅解釋型和編譯型這兩種。
用Java來舉例,Java首先是經過編譯系統編譯成字節碼文件,而後在運行時經過解釋器給解釋成機器文件。因此咱們說Java是一種先編譯後解釋的語言。
9.3 Python究竟是什麼 ?
其實Python和Java/C#同樣,也是一門基於虛擬機的語言,咱們先來從表面上簡單地瞭解一下Python程序的運行過程吧。
當咱們在命令行中輸入python hello.py時,實際上是激活了Python的「解釋器」,告訴「解釋器」:你要開始工做了。但是在「解釋」以前,其實執行的第一項工做和Java同樣,是編譯。
熟悉Java的同窗能夠想一下咱們在命令行中如何執行一個Java的程序:
javac hello.java
java hello
只是咱們在用Eclipse之類的IDE時,將這兩部給融合成了一部而已。其實Python也同樣,當咱們執行python hello.py時,他也同樣執行了這麼一個過程,因此咱們應該這樣來描述Python,Python是一門先編譯後解釋的語言。
9.4 簡述Python的運行過程
在說這個問題以前,咱們先來講兩個概念,PyCodeObject和.pyc文件。
咱們在硬盤上看到的pyc天然沒必要多說,而其實PyCodeObject則是Python編譯器真正編譯成的結果。咱們先簡單知道就能夠了,繼續向下看。
當python程序運行時,編譯的結果則是保存在位於內存中的PyCodeObject中,當Python程序運行結束時,Python解釋器則將PyCodeObject寫回到pyc文件中。
當python程序第二次運行時,首先程序會在硬盤中尋找pyc文件,若是找到,則直接載入,不然就重複上面的過程。
因此咱們應該這樣來定位PyCodeObject和pyc文件,咱們說pyc文件實際上是PyCodeObject的一種持久化保存方式。
10 數據類型初識
10.1Python Number(數字)
Python Number 數據類型用於存儲數值。數據類型是不容許改變的,這就意味着若是改變 Number 數據類型的值,將從新分配內存空間。
如下實例在變量賦值時 Number 對象將被建立:
您也可使用del語句刪除一些 Number 對象引用。
del語句的語法是:
del var1[,var2[,var3[....,varN]]]]
您能夠經過使用del語句刪除單個或多個對象,例如:
Python 支持四種不一樣的數值類型:
- 整型(Int) - 一般被稱爲是整型或整數,是正或負整數,不帶小數點。
- 長整型(long integers) - 無限大小的整數,整數最後是一個大寫或小寫的L。
- 浮點型(floating point real values) - 浮點型由整數部分與小數部分組成,浮點型也可使用科學計數法表示(2.5e2 = 2.5 x 102 = 250)
- 複數( (complex numbers)) - 複數由實數部分和虛數部分構成,能夠用a + bj,或者complex(a,b)表示, 複數的實部a和虛部b都是浮點型。
int |
long |
float |
complex |
10 |
51924361L |
0.0 |
3.14j |
100 |
-0x19323L |
15.20 |
45.j |
-786 |
0122L |
-21.9 |
9.322e-36j |
080 |
0xDEFABCECBDAECBFBAEl |
32.3+e18 |
.876j |
-0490 |
535633629843L |
-90. |
-.6545+0J |
-0x260 |
-052318172735L |
-32.54e100 |
3e+26J |
0x69 |
-4721885298529L |
70.2-E12 |
4.53e-7j |
- 長整型也可使用小寫"L",可是仍是建議您使用大寫"L",避免與數字"1"混淆。Python使用"L"來顯示長整型。
- Python還支持複數,複數由實數部分和虛數部分構成,能夠用a + bj,或者complex(a,b)表示, 複數的實部a和虛部b都是浮點型
10.2 Python Number 類型轉換
int(x [,base ]) 將x轉換爲一個整數
long(x [,base ]) 將x轉換爲一個長整數
float(x ) 將x轉換到一個浮點數
complex(real [,imag ]) 建立一個複數
str(x ) 將對象 x 轉換爲字符串
repr(x ) 將對象 x 轉換爲表達式字符串
eval(str ) 用來計算在字符串中的有效Python表達式,並返回一個對象
tuple(s ) 將序列 s 轉換爲一個元組
list(s ) 將序列 s 轉換爲一個列表
chr(x ) 將一個整數轉換爲一個字符
unichr(x ) 將一個整數轉換爲Unicode字符
ord(x ) 將一個字符轉換爲它的整數值
hex(x ) 將一個整數轉換爲一個十六進制字符串
oct(x ) 將一個整數轉換爲一個八進制字符串
10.3 Python數學函數
函數 |
返回值 ( 描述 ) |
abs(x) |
返回數字的絕對值,如abs(-10) 返回 10 |
ceil(x) |
返回數字的上入整數,如math.ceil(4.1) 返回 5 |
cmp(x, y) |
若是 x < y 返回 -1, 若是 x == y 返回 0, 若是 x > y 返回 1 |
exp(x) |
返回e的x次冪(ex),如math.exp(1) 返回2.718281828459045 |
fabs(x) |
返回數字的絕對值,如math.fabs(-10) 返回10.0 |
floor(x) |
返回數字的下舍整數,如math.floor(4.9)返回 4 |
log(x) |
如math.log(math.e)返回1.0,math.log(100,10)返回2.0 |
log10(x) |
返回以10爲基數的x的對數,如math.log10(100)返回 2.0 |
max(x1, x2,...) |
返回給定參數的最大值,參數能夠爲序列。 |
min(x1, x2,...) |
返回給定參數的最小值,參數能夠爲序列。 |
modf(x) |
返回x的整數部分與小數部分,兩部分的數值符號與x相同,整數部分以浮點型表示。 |
pow(x, y) |
x**y 運算後的值。 |
round(x [,n]) |
返回浮點數x的四捨五入值,如給出n值,則表明舍入到小數點後的位數。 |
sqrt(x) |
返回數字x的平方根,數字能夠爲負數,返回類型爲實數,如math.sqrt(4)返回 2+0j |
10.4Python隨機數函數
隨機數能夠用於數學,遊戲,安全等領域中,還常常被嵌入到算法中,用以提升算法效率,並提升程序的安全性。
Python包含如下經常使用隨機數函數:
10.5 Python三角函數
Python包括如下三角函數:
10.6 Python數學常量
常量 |
描述 |
pi |
數學常量 pi(圓周率,通常以π來表示) |
e |
數學常量 e,e即天然常數(天然常數)。 |
11 數據運算
11.1 Python 運算符
什麼是運算符?
本章節主要說明Python的運算符。舉個簡單的例子 4 +5 = 9 。 例子中,4 和 5 被稱爲操做數,"+" 稱爲運算符。
Python語言支持如下類型的運算符:
接下來讓咱們一個個來學習Python的運算符。
Python算術運算符
如下假設變量a爲10,變量b爲20:
運算符 |
描述 |
實例 |
+ |
加 - 兩個對象相加 |
a + b 輸出結果 30 |
- |
減 - 獲得負數或是一個數減去另外一個數 |
a - b 輸出結果 -10 |
* |
乘 - 兩個數相乘或是返回一個被重複若干次的字符串 |
a * b 輸出結果 200 |
/ |
除 - x除以y |
b / a 輸出結果 2 |
% |
取模 - 返回除法的餘數 |
b % a 輸出結果 0 |
** |
冪 - 返回x的y次冪 |
a**b 爲10的20次方, 輸出結果 100000000000000000000 |
// |
取整除 - 返回商的整數部分 |
9//2 輸出結果 4 , 9.0//2.0 輸出結果 4.0 |
如下實例演示了Python全部算術運算符的操做:
#!/usr/bin/python
a = 21
b = 10
c = 0
c = a + b
print ("1 - c 的值爲:", c)
c = a - b
print ("2 - c 的值爲:", c )
c = a * b
print ("3 - c 的值爲:", c)
c = a / b
print ("4 - c 的值爲:", c )
c = a % b
print ("5 - c 的值爲:", c)
# 修改變量 a 、b 、c
a = 2
b = 3
c = a**b
print ("6 - c 的值爲:", c)
a = 10
b = 5
c = a//b
print ("7 - c 的值爲:", c)
以上實例輸出結果:
1 - c 的值爲: 31 2 - c 的值爲: 11 3 - c 的值爲: 210 4 - c 的值爲: 2 5 - c 的值爲: 1 6 - c 的值爲: 8 7 - c 的值爲: 2
Python比較運算符
如下假設變量a爲10,變量b爲20:
運算符 |
描述 |
實例 |
== |
等於 - 比較對象是否相等 |
(a == b) 返回 False。 |
!= |
不等於 - 比較兩個對象是否不相等 |
(a != b) 返回 true. |
<> |
不等於 - 比較兩個對象是否不相等 |
(a <> b) 返回 true。這個運算符相似 != 。 |
> |
大於 - 返回x是否大於y |
(a > b) 返回 False。 |
< |
小於 - 返回x是否小於y。全部比較運算符返回1表示真,返回0表示假。這分別與特殊的變量True和False等價。注意,這些變量名的大寫。 |
(a < b) 返回 true。 |
>= |
大於等於 - 返回x是否大於等於y。 |
(a >= b) 返回 False。 |
<= |
小於等於 - 返回x是否小於等於y。 |
(a <= b) 返回 true。 |
如下實例演示了Python全部比較運算符的操做:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 21
b = 10
c = 0
if ( a == b ):
print ("1 - a 等於 b")
else:
print ("1 - a 不等於 b")
if ( a != b ):
print ("2 - a 不等於 b")
else:
print ("2 - a 等於 b")
if ( a <> b ):
print ("3 - a 不等於 b")
else:
print ("3 - a 等於 b")
if ( a < b ):
print ("4 - a 小於 b" )
else:
print ("4 - a 大於等於 b")
if ( a > b ):
print ("5 - a 大於 b")
else:
print ("5 - a 小於等於 b")
# 修改變量 a 和 b 的值
a = 5;
b = 20;
if ( a <= b ):
print ("6 - a 小於等於 b")
else:
print "6 - a 大於 b"
if ( b >= a ):
print ("7 - b 大於等於 b")
else:
print ("7 - b 小於 b")
以上實例輸出結果:
1 - a 不等於 b 2 - a 不等於 b 3 - a 不等於 b 4 - a 大於等於 b 5 - a 大於 b 6 - a 小於等於 b 7 - b 大於等於 b
Python賦值運算符
如下假設變量a爲10,變量b爲20:
運算符 |
描述 |
實例 |
= |
簡單的賦值運算符 |
c = a + b 將 a + b 的運算結果賦值爲 c |
+= |
加法賦值運算符 |
c += a 等效於 c = c + a |
-= |
減法賦值運算符 |
c -= a 等效於 c = c - a |
*= |
乘法賦值運算符 |
c *= a 等效於 c = c * a |
/= |
除法賦值運算符 |
c /= a 等效於 c = c / a |
%= |
取模賦值運算符 |
c %= a 等效於 c = c % a |
**= |
冪賦值運算符 |
c **= a 等效於 c = c ** a |
//= |
取整除賦值運算符 |
c //= a 等效於 c = c // a |
如下實例演示了Python全部賦值運算符的操做:
#!/usr/bin/python
a = 21
b = 10
c = 0
c = a + b
print "1 - c 的值爲:", c
c += a
print "2 - c 的值爲:", c
c *= a
print "3 - c 的值爲:", c
c /= a
print "4 - c 的值爲:", c
c = 2
c %= a
print "5 - c 的值爲:", c
c **= a
print "6 - c 的值爲:", c
c //= a
print "7 - c 的值爲:", c
View Code
以上實例輸出結果:
1 - c 的值爲: 31 2 - c 的值爲: 52 3 - c 的值爲: 1092 4 - c 的值爲: 52 5 - c 的值爲: 2 6 - c 的值爲: 2097152 7 - c 的值爲: 99864
Python位運算符
按位運算符是把數字看做二進制來進行計算的。Python中的按位運算法則以下:
下表中變量 a 爲 60,b 爲 13。
運算符 |
描述 |
實例 |
& |
按位與運算符:參與運算的兩個值,若是兩個相應位都爲1,則該位的結果爲1,不然爲0 |
(a & b) 輸出結果 12 ,二進制解釋: 0000 1100 |
| |
按位或運算符:只要對應的二個二進位有一個爲1時,結果位就爲1。 |
(a | b) 輸出結果 61 ,二進制解釋: 0011 1101 |
^ |
按位異或運算符:當兩對應的二進位相異時,結果爲1 |
(a ^ b) 輸出結果 49 ,二進制解釋: 0011 0001 |
~ |
按位取反運算符:對數據的每一個二進制位取反,即把1變爲0,把0變爲1 |
(~a ) 輸出結果 -61 ,二進制解釋: 1100 0011, 在一個有符號二進制數的補碼形式。 |
<< |
左移動運算符:運算數的各二進位所有左移若干位,由"<<"右邊的數指定移動的位數,高位丟棄,低位補0。 |
a << 2 輸出結果 240 ,二進制解釋: 1111 0000 |
>> |
右移動運算符:把">>"左邊的運算數的各二進位所有右移若干位,">>"右邊的數指定移動的位數 |
a >> 2 輸出結果 15 ,二進制解釋: 0000 1111 |
如下實例演示了Python全部位運算符的操做:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 60 # 60 = 0011 1100
b = 13 # 13 = 0000 1101
c = 0
c = a & b; # 12 = 0000 1100
print "1 - c 的值爲:", c
c = a | b; # 61 = 0011 1101
print "2 - c 的值爲:", c
c = a ^ b; # 49 = 0011 0001
print "3 - c 的值爲:", c
c = ~a; # -61 = 1100 0011
print "4 - c 的值爲:", c
c = a << 2; # 240 = 1111 0000
print "5 - c 的值爲:", c
c = a >> 2; # 15 = 0000 1111
print "6 - c 的值爲:", c
以上實例輸出結果:
1 - c 的值爲: 12 2 - c 的值爲: 61 3 - c 的值爲: 49 4 - c 的值爲: -61 5 - c 的值爲: 240 6 - c 的值爲: 15
Python邏輯運算符
Python語言支持邏輯運算符,如下假設變量 a 爲 10, b爲 20:
運算符 |
邏輯表達式 |
描述 |
實例 |
and |
x and y |
布爾"與" - 若是 x 爲 False,x and y 返回 False,不然它返回 y 的計算值。 |
(a and b) 返回 20。 |
or |
x or y |
布爾"或" - 若是 x 是非 0,它返回 x 的值,不然它返回 y 的計算值。 |
(a or b) 返回 10。 |
not |
not x |
布爾"非" - 若是 x 爲 True,返回 False 。若是 x 爲 False,它返回 True。 |
not(a and b) 返回 False |
以上實例輸出結果:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 10
b = 20
if ( a and b ):
print "1 - 變量 a 和 b 都爲 true"
else:
print "1 - 變量 a 和 b 有一個不爲 true"
if ( a or b ):
print "2 - 變量 a 和 b 都爲 true,或其中一個變量爲 true"
else:
print "2 - 變量 a 和 b 都不爲 true"
# 修改變量 a 的值
a = 0
if ( a and b ):
print "3 - 變量 a 和 b 都爲 true"
else:
print "3 - 變量 a 和 b 有一個不爲 true"
if ( a or b ):
print "4 - 變量 a 和 b 都爲 true,或其中一個變量爲 true"
else:
print "4 - 變量 a 和 b 都不爲 true"
if not( a and b ):
print "5 - 變量 a 和 b 都爲 false,或其中一個變量爲 false"
else:
print "5 - 變量 a 和 b 都爲 true"
View Code
以上實例輸出結果:
1 - 變量 a 和 b 都爲 true 2 - 變量 a 和 b 都爲 true,或其中一個變量爲 true 3 - 變量 a 和 b 有一個不爲 true 4 - 變量 a 和 b 都爲 true,或其中一個變量爲 true 5 - 變量 a 和 b 都爲 false,或其中一個變量爲 false
Python成員運算符
除了以上的一些運算符以外,Python還支持成員運算符,測試實例中包含了一系列的成員,包括字符串,列表或元組。
運算符 |
描述 |
實例 |
in |
若是在指定的序列中找到值返回 True,不然返回 False。 |
x 在 y 序列中 , 若是 x 在 y 序列中返回 True。 |
not in |
若是在指定的序列中沒有找到值返回 True,不然返回 False。 |
x 不在 y 序列中 , 若是 x 不在 y 序列中返回 True。 |
如下實例演示了Python全部成員運算符的操做:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 10
b = 20
list = [1, 2, 3, 4, 5 ];
if ( a in list ):
print "1 - 變量 a 在給定的列表中 list 中"
else:
print "1 - 變量 a 不在給定的列表中 list 中"
if ( b not in list ):
print "2 - 變量 b 不在給定的列表中 list 中"
else:
print "2 - 變量 b 在給定的列表中 list 中"
# 修改變量 a 的值
a = 2
if ( a in list ):
print "3 - 變量 a 在給定的列表中 list 中"
else:
print "3 - 變量 a 不在給定的列表中 list 中"
以上實例輸出結果:
1 - 變量 a 不在給定的列表中 list 中 2 - 變量 b 不在給定的列表中 list 中 3 - 變量 a 在給定的列表中 list 中
Python身份運算符
身份運算符用於比較兩個對象的存儲單元
運算符 |
描述 |
實例 |
is |
is是判斷兩個標識符是否是引用自一個對象 |
x is y, 若是 id(x) 等於 id(y) , is 返回結果 1 |
is not |
is not是判斷兩個標識符是否是引用自不一樣對象 |
x is not y, 若是 id(x) 不等於 id(y). is not 返回結果 1 |
如下實例演示了Python全部身份運算符的操做:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 20
b = 20
if ( a is b ):
print "1 - a 和 b 有相同的標識"
else:
print "1 - a 和 b 沒有相同的標識"
if ( id(a) == id(b) ):
print "2 - a 和 b 有相同的標識"
else:
print "2 - a 和 b 沒有相同的標識"
# 修改變量 b 的值
b = 30
if ( a is b ):
print "3 - a 和 b 有相同的標識"
else:
print "3 - a 和 b 沒有相同的標識"
if ( a is not b ):
print "4 - a 和 b 沒有相同的標識"
else:
print "4 - a 和 b 有相同的標識"
View Code
以上實例輸出結果:
1 - a 和 b 有相同的標識 2 - a 和 b 有相同的標識 3 - a 和 b 沒有相同的標識 4 - a 和 b 沒有相同的標識
Python運算符優先級
如下表格列出了從最高到最低優先級的全部運算符:
運算符 |
描述 |
** |
指數 (最高優先級) |
~ + - |
按位翻轉, 一元加號和減號 (最後兩個的方法名爲 +@ 和 -@) |
* / % // |
乘,除,取模和取整除 |
+ - |
加法減法 |
>> << |
右移,左移運算符 |
& |
位 'AND' |
^ | |
位運算符 |
<= < > >= |
比較運算符 |
<> == != |
等於運算符 |
= %= /= //= -= += *= **= |
賦值運算符 |
is is not |
身份運算符 |
in not in |
成員運算符 |
not or and |
邏輯運算符 |
如下實例演示了Python全部運算符優先級的操做:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
a = 20
b = 10
c = 15
d = 5
e = 0
e = (a + b) * c / d #( 30 * 15 ) / 5
print "(a + b) * c / d 運算結果爲:", e
e = ((a + b) * c) / d # (30 * 15 ) / 5
print "((a + b) * c) / d 運算結果爲:", e
e = (a + b) * (c / d); # (30) * (15/5)
print "(a + b) * (c / d) 運算結果爲:", e
e = a + (b * c) / d; # 20 + (150/5)
print "a + (b * c) / d 運算結果爲:", e
以上實例輸出結果:
(a + b) * c / d 運算結果爲: 90 ((a + b) * c) / d 運算結果爲: 90 (a + b) * (c / d) 運算結果爲: 90 a + (b * c) / d 運算結果爲: 50
12 Python 條件語句: if ...else語句
Python條件語句是經過一條或多條語句的執行結果(True或者False)來決定執行的代碼塊。
能夠經過下圖來簡單瞭解條件語句的執行過程:
![](http://static.javashuo.com/static/loading.gif)
Python程序語言指定任何非0和非空(null)值爲true,0 或者 null爲false。
Python 編程中 if 語句用於控制程序的執行,基本形式爲:
if 判斷條件:
執行語句……
else:
執行語句……
其中"判斷條件"成立時(非零),則執行後面的語句,而執行內容能夠多行,以縮進來區分表示同一範圍。
else 爲可選語句,當須要在條件不成立時執行內容則能夠執行相關語句,具體例子以下:
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3
4 # 例1:if 基本用法
5
6 flag = False
7 name = 'luren'
8 if name == 'python': # 判斷變量否爲'python'
9 flag = True # 條件成立時設置標誌爲真
10 print 'welcome boss' # 並輸出歡迎信息
11 else:
12 print name # 條件不成立時輸出變量名稱
輸出結果爲:
>>> luren # 輸出結果
if 語句的判斷條件能夠用>(大於)、<(小於)、==(等於)、>=(大於等於)、<=(小於等於)來表示其關係。
當判斷條件爲多個值時,可使用如下形式:
if 判斷條件1:
執行語句1……
elif 判斷條件2:
執行語句2……
elif 判斷條件3:
執行語句3……
else:
執行語句4……
實例以下:
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3 # 例2:elif用法
4
5 num = 5
6 if num == 3: # 判斷num的值
7 print 'boss'
8 elif num == 2:
9 print 'user'
10 elif num == 1:
11 print 'worker'
12 elif num < 0: # 值小於零時輸出
13 print 'error'
14 else:
15 print 'roadman' # 條件均不成立時輸出
輸出結果爲:
>>> roadman # 輸出結果
因爲 python 並不支持 switch 語句,因此多個條件判斷,只能用 elif 來實現,若是判斷須要多個條件需同時判斷時,可使用 or (或),表示兩個條件有一個成立時判斷條件成功;使用 and (與)時,表示只有兩個條件同時成立的狀況下,判斷條件才成功。
# 例3:if語句多個條件
num = 9
if num >= 0 and num <= 10: # 判斷值是否在0~10之間
print 'hello'
>>> hello # 輸出結果
num = 10
if num < 0 or num > 10: # 判斷值是否在小於0或大於10
print 'hello'
else:
print 'undefine'
>>> undefine # 輸出結果
num = 8
# 判斷值是否在0~5或者10~15之間
if (num >= 0 and num <= 5) or (num >= 10 and num <= 15):
print 'hello'
else:
print 'undefine'
>>> undefine # 輸出結果
當if有多個條件時可以使用括號來區分判斷的前後順序,括號中的判斷優先執行,此外 and 和 or 的優先級低於>(大於)、<(小於)等判斷符號,即大於和小於在沒有括號的狀況下會比與或要優先判斷。
簡單的語句組
你也能夠在同一行的位置上使用if條件判斷語句,以下實例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
var = 100
if ( var == 100 ) : print "變量 var 的值爲100"
print "Good bye!"
以上代碼執行輸出結果以下:
變量 var 的值爲100 Good bye!
13 表達式for 循環
Python for循環能夠遍歷任何序列的項目,如一個列表或者一個字符串。
語法:
for循環的語法格式以下:
for iterating_var in sequence:
statements(s)
流程圖:
![python_for_loop](http://static.javashuo.com/static/loading.gif)
實例:
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3
4 for letter in 'Python': # 第一個實例
5 print '當前字母 :', letter
6
7 fruits = ['banana', 'apple', 'mango']
8 for fruit in fruits: # 第二個實例
9 print '當前字母 :', fruit
10
11 print "Good bye!"
以上實例輸出結果:
當前字母 : P
當前字母 : y
當前字母 : t
當前字母 : h
當前字母 : o
當前字母 : n
當前字母 : banana
當前字母 : apple
當前字母 : mango
Good bye!
經過序列索引迭代
另一種執行循環的遍歷方式是經過索引,以下實例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
fruits = ['banana', 'apple', 'mango']
for index in range(len(fruits)):
print '當前水果 :', fruits[index]
print "Good bye!"
以上實例輸出結果:
當前水果 : banana
當前水果 : apple
當前水果 : mango
Good bye!
以上實例咱們使用了內置函數 len() 和 range(),函數 len() 返回列表的長度,即元素的個數。 range返回一個序列的數。
循環使用 else 語句
在 python 中,for … else 表示這樣的意思,for 中的語句和普通的沒有區別,else 中的語句會在循環正常執行完(即 for 不是經過 break 跳出而中斷的)的狀況下執行,while … else 也是同樣。
以下實例:
#!/usr/bin/python
# -*- coding: UTF-8 -*-
for num in range(10,20): # 迭代 10 到 20 之間的數字
for i in range(2,num): # 根據因子迭代
if num%i == 0: # 肯定第一個因子
j=num/i # 計算第二個因子
print '%d 等於 %d * %d' % (num,i,j)
break # 跳出當前循環
else: # 循環的 else 部分
print num, '是一個質數'
以上實例輸出結果:
10 等於 2 * 5
11 是一個質數
12 等於 2 * 6
13 是一個質數
14 等於 2 * 7
15 等於 3 * 5
16 等於 2 * 8
17 是一個質數
18 等於 2 * 9
19 是一個質數
14 break and continue
Python break 語句
Python break語句,就像在C語言中,打破了最小封閉for或while循環。
break語句用來終止循環語句,即循環條件沒有False條件或者序列還沒被徹底遞歸完,也會中止執行循環語句。
break語句用在while和for循環中。
若是您使用嵌套循環,break語句將中止執行最深層的循環,並開始執行下一行代碼。
Python語言 break 語句語法:
流程圖:
![](http://static.javashuo.com/static/loading.gif)
實例:
1 #!/usr/bin/python
2
3 for letter in 'Python': # First Example
4 if letter == 'h':
5 break
6 print 'Current Letter :', letter
7
8 var = 10 # Second Example
9 while var > 0:
10 print 'Current variable value :', var
11 var = var -1
12 if var == 5:
13 break
14
15 print "Good bye!"
以上實例執行結果:
Current Letter : P
Current Letter : y
Current Letter : t
Current variable value : 10
Current variable value : 9
Current variable value : 8
Current variable value : 7
Current variable value : 6
Good bye!
Python continue 語句
Python continue 語句跳出本次循環,而break跳出整個循環。
continue 語句用來告訴Python跳過當前循環的剩餘語句,而後繼續進行下一輪循環。
continue語句用在while和for循環中。
Python 語言 continue 語句語法格式以下:
流程圖:
![cpp_continue_statement](http://static.javashuo.com/static/loading.gif)
實例:
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3
4 for letter in 'Python': # 第一個實例
5 if letter == 'h':
6 continue
7 print '當前字母 :', letter
8
9 var = 10 # 第二個實例
10 while var > 0:
11 var = var -1
12 if var == 5:
13 continue
14 print '當前變量值 :', var
15 print "Good bye!"
以上實例執行結果:
當前字母 : P
當前字母 : y
當前字母 : t
當前字母 : o
當前字母 : n
當前變量值 : 9
當前變量值 : 8
當前變量值 : 7
當前變量值 : 6
當前變量值 : 4
當前變量值 : 3
當前變量值 : 2
當前變量值 : 1
當前變量值 : 0
Good bye!
15 表達式while 循環
Python 編程中 while 語句用於循環執行程序,即在某條件下,循環執行某段程序,以處理須要重複處理的相同任務。其基本形式爲:
執行語句能夠是單個語句或語句塊。判斷條件能夠是任何表達式,任何非零、或非空(null)的值均爲true。
當判斷條件假false時,循環結束。
執行流程圖以下:
![python_while_loop](http://static.javashuo.com/static/loading.gif)
實例:
1 #!/usr/bin/python
2
3 count = 0
4 while (count < 9):
5 print 'The count is:', count
6 count = count + 1
7
8 print "Good bye!"
以上代碼執行輸出結果:
The count is: 0 The count is: 1 The count is: 2 The count is: 3 The count is: 4 The count is: 5 The count is: 6 The count is: 7 The count is: 8 Good bye!
while 語句時還有另外兩個重要的命令 continue,break 來跳過循環,continue 用於跳過該次循環,break 則是用於退出循環.
此外"判斷條件"還能夠是個常值,表示循環一定成立,具體用法以下:
1 # continue 和 break 用法
2
3 i = 1
4 while i < 10:
5 i += 1
6 if i%2 > 0: # 非雙數時跳過輸出
7 continue
8 print i # 輸出雙數二、四、六、八、10
9
10 i = 1
11 while 1: # 循環條件爲1一定成立
12 print i # 輸出1~10
13 i += 1
14 if i > 10: # 當i大於10時跳出循環
15 break
無限循環
若是條件判斷語句永遠爲 true,循環將會無限的執行下去,以下實例:
1 #!/usr/bin/python
2 # -*- coding: UTF-8 -*-
3
4 var = 1
5 while var == 1 : # 該條件永遠爲true,循環將無限執行下去
6 num = raw_input("Enter a number :")
7 print "You entered: ", num
8
9 print "Good bye!"
以上實例輸出結果:
Enter a number :20 You entered: 20 Enter a number :29 You entered: 29 Enter a number :3 You entered: 3 Enter a number between :Traceback (most recent call last): File "test.py", line 5, in <module> num = raw_input("Enter a number :") KeyboardInterrupt
注意:以上的無限循環你可使用 CTRL+C 來中斷循環。
循環使用 else 語句
在 python 中,for … else 表示這樣的意思,for 中的語句和普通的沒有區別,else 中的語句會在循環正常執行完(即 for 不是經過 break 跳出而中斷的)的狀況下執行,while … else 也是同樣。
#!/usr/bin/python
count = 0
while count < 5:
print count, " is less than 5"
count = count + 1
else:
print count, " is not less than 5"
以上實例輸出結果爲:
0 is less than 5 1 is less than 5 2 is less than 5 3 is less than 5 4 is less than 5 5 is not less than 5
簡單語句組
相似if語句的語法,若是你的while循環體中只有一條語句,你能夠將該語句與while寫在同一行中, 以下所示:
#!/usr/bin/python
flag = 1
while (flag): print 'Given flag is really true!'
print "Good bye!"
注意:以上的無限循環你可使用 CTRL+C 來中斷循環。
python編碼問題:
python2.X解釋器在加載 .py 文件中的代碼時,會對內容進行編碼(默認ascill)
python3.X 默認編碼是UTF-8
ASCII GBK UNICODE UTF-8 簡介和區別:
ASCII
ASCII(American Standard Code for Information Interchange,美國標準信息交換代碼)。
咱們知道,計算機只認識0和1,那麼咱們要怎麼表示咱們的語言和信息呢?計算機最早由米國發明,若是要用01表示語言,那麼只須要表示出26個大小寫字母,0-9,還有標點符號、特殊字符等就能夠儲存各類英文數字等信息了吧?因此,他們就用規定二進制的八位來表示一個字符,這八個位能夠表示2的8次方種狀況,每一種規定表示那個字符,就OK了。這個規定就是assii碼錶了,以下圖。
![](http://static.javashuo.com/static/loading.gif)
結果他們發現只用127中狀況,就把全部的字母數字字符都表示了,根本沒用完2**8=256中狀況,剩下的咋辦?(留給其餘國家表示他們的語言)
因此,ASCII表中1個字節就能夠表示全部的英文所須要的字符。127個字符徹底就能夠表示全部英文中能用的的內容了。
GBK
可是ASCII到了中國以後,經常使用的中文都有6000多個,徹底不夠用啊!
怎們辦?中國人很是聰明:就在原有的擴展位中,擴展出本身的gbk、gb23十二、gb2318字符編碼。
他是怎麼擴展的呢?好比說在ASCII碼中的128這個位置,這個位置又指定一張單獨表,聰明吧! 其餘國家也是這樣設計的!
爲了處理漢字,程序員設計了用於簡體中文的GB2312和用於繁體中文的big5。
GB2312(1980年)一共收錄了7445個字符,包括6763個漢字和682個其它符號。漢字區的內碼範圍高字節從B0-F7,低字節從A1-FE,佔用的碼位是72*94=6768。其中有5個空位是D7FA-D7FE。
GB2312 支持的漢字太少。1995年的漢字擴展規範GBK1.0收錄了21886個符號,它分爲漢字區和圖形符號區。漢字區包括21003個字符。2000年的 GB18030是取代GBK1.0的正式國家標準。該標準收錄了27484個漢字,同時還收錄了藏文、蒙文、維吾爾文等主要的少數民族文字。如今的PC平 臺必須支持GB18030,對嵌入式產品暫不做要求。因此手機、MP3通常只支持GB2312。
從ASCII、GB23十二、GBK 到GB18030,這些編碼方法是向下兼容的,即同一個字符在這些方案中老是有相同的編碼,後面的標準支持更多的字符。在這些編碼中,英文和中文能夠統一 地處理。區分中文編碼的方法是高字節的最高位不爲0。按照程序員的稱呼,GB23十二、GBK到GB18030都屬於雙字節字符集 (DBCS)。
有的中文Windows的缺省內碼仍是GBK,能夠經過GB18030升級包升級到GB18030。不過GB18030相對GBK增長的字符,普通人是很難用到的,一般咱們仍是用GBK指代中文Windows內碼。
UNICODE
各個國家都在擴展,擴展位夠不夠?假設有兩個國家都同時用一個擴展位,是否是會致使亂碼?
基於這個亂象國際互聯網組織就說大家各個國家都別搞了,咱們給大家搞一個統一的,這個統一的是什麼呢Unicode「萬國編碼」,Unicode(統一碼、萬國碼、單一碼)是一種在計算機上使用的字符編碼。
Unicode 是爲了解決傳統的字符編碼方案的侷限而產生的,它爲每種語言中的每一個字符設定了統一而且惟一的二進制編碼,規定雖有的字符和符號最少由 16 位來表示(2個字節),即:2 **16 = 65536,注:此處說的的是最少2個字節,可能更多。
這裏還有個問題:使用的字節增長了,那麼形成的直接影響就是使用的空間就直接翻倍了!
舉例還說:一樣是ABCD這些字符存儲一篇相同的文章,使用ASCII碼若是是1M的話,那麼Unicode存儲至少2M可能還會更多。
UTF-8
爲了解決上述問題就出現了:UTF-8編碼
UTF-8編碼:是對Unicode編碼的壓縮和優化,他再也不使用至少使用2個字節,而是將全部的字符和符號進行分類:
ascii碼中的內容用1個字節保存;
歐洲的字符用2個字節保存;
東亞的字符用3個字節保存...
本篇完。。。。