標籤:開發語言 python
Python:優雅、明確、簡單
適合的領域:web網站和各種網路服務、系統工具和指令碼、作為“膠水”語言把其他語言開發的模組封裝起來方便使用
不適合的領域:貼近硬體的代碼(首先C)、移動開發:IOS/Android有各自的開發語言(ObjC,Swift/Java)、遊戲開發:C/C++
實際應用:
國外:YouTube、 OpenStack
國內:豆瓣、搜狐閃電郵箱等等。。
廣泛應用於:Google Yahoo NASA(美國航空航天局)
和其他語言對比
類型 運行速度 代碼量
C 編譯為機器碼 非常快 非常多
Java 編譯為位元組碼 快 多
Python 解釋執行 慢 少
Python源碼不能加密
跨平台的語言
2.7版――不相容――3.3版本
有些第三方庫不能再3.3版本運行――2.7版本使用
CMD 命令列視窗
python 進入Python互動式視窗
exit()退出互動式視窗
NotePad++ 設定喜好設定 utf-8(無bomd)格式
行首不能有空格 python對縮排要求嚴格
到python檔案的目錄,執行dir查看所有檔案,python 檔案名稱執行python檔案
資料類型
整型 十六進位 0x首碼 0-9,a-f表示
浮點型 10用e替代
字串 單引號 ‘‘ 雙引號 " " 括起來的任何文本
布爾值 True False(注意大小寫) 用 and or not 運算
空值 none 特殊的空值 不是0 0 是有意義的
print語句
print語句可以向螢幕上輸出指定的文字,
注意:當我們python互動式環境下編寫代碼時,>>>是python解譯器的提示符,不是代碼的一部分
文字編輯器編寫代碼不要自己添加>>>
print 語句也可以跟上多個字串,用逗號“,"隔開,就可以連成一串輸出
print回一次列印出每個字串,遇到”,”會輸出一個空格,
print 也可以列印整數或者計算結果
注釋 #
變數
用一個變數名表示,變數名必須是大小寫英文、數字和_的組合,且不能用數字開頭
等號 = 是賦值語句,可以把任意資料類型賦值給變數,同一個變數可以反覆賦值,而且可以是不同類型的變數
這種變數本身類型不固定的語言稱之為動態語言與之對應的是靜態語言。
靜態語言在定義變數是必須指定變數類型,若賦值時類型不符會報錯,Java是靜態語言(動態語言比靜態語言更靈活)
等差公式
an= a1+(n-1)*d
sn = a1*n + (n*(n-1)*d)/2
sn = (a1+an)*n/2
定義字串
字串可以用‘‘ ""括起來表示的
若包含‘ 就用"" 括起來
若包含" 就用‘‘括起來
如果包含‘ 也包含 " 就用逸出字元 \
\n 換行
\t 定位字元
\\ \字元本身
raw 字串與多行字串
一個字串包含很多需要轉義的字元,可以在字串前面加個首碼r,表示這是一個raw字串
r‘....‘
但是r‘...‘標記法不能表示多行字串,也不能表示包含‘和"的字串
如果要表示多行字串,可以用‘‘‘...‘‘‘表示
Unicode字串
ASCII編碼
GB2312編碼
print u‘中文‘
中文
轉義: u‘中文\n日文\n韓文‘
多行‘‘‘第一行
第二行‘‘‘
raw ‘‘‘python的Unicode字串支援"中文",
"日文",
"韓文"等多種語言‘‘‘
如果遇上UnicodeDecodeError
首行加上 #-*- coding:utf-8 -*-
因為Python把0、Null 字元串‘‘和None看成 False,其他數值和非Null 字元串都看成 True
List有序列表
Python內建的一種資料類型是列表:list。list是一種有序的集合,可以隨時添加和刪除其中的元素。list中的元素是按照順序排列的。直接用 [ ] 把list的所有元素都括起來,就是一個list對象
list中包含的元素並不要求都必須是同一種資料類型,我們完全可以在list中包含各種資料:
使用索引時,千萬注意不要越界
使用倒序索引時,也要注意不要越界
添加新元素
第一個辦法是用 list 的 append() 方法,把新同學追加到 list 的末尾:
append()總是把新的元素添加到 list 的尾部。
插入中間的方法是用list的 insert()方法,它接受兩個參數,第一個參數是索引號,第二個參數是待添加的新元素:
刪除元素
用list的pop()方法刪除最後一個元素
用list的pop(序號)方法刪除指定位置的元素
替換 L[1]=‘元素’
tuple有序列表
tuple是另一種有序的列表,中文翻譯為“ 元組 ”。tuple 和 list 非常類似,但是,tuple一旦建立完畢,就不能修改了。
list和tuple的區別
建立tuple和建立list唯一不同之處是用( )替代了[ ]。
tuple沒有 append()方法,也沒有insert()和pop()方法。所以,新同學沒法直接往 tuple 中添加,老同學想退出 tuple 也不行。
擷取 tuple 元素的方式和 list 是一模一樣的,我們可以正常使用 t[0],t[-1]等索引方式訪問元素,但是不能賦值成別的元素
tuple和list一樣,可以包含 0 個、1個和任意多個元素。
正是因為用()定義單元素的tuple有歧義,所以 Python 規定,單元素 tuple 要多加一個逗號“,”,這樣就避免了歧義:
tuple 元素嵌入[]可改變tuple的內容
if語句:
注意: Python代碼的縮排規則。具有相同縮排的代碼被視為代碼塊,上面的3,4行 print 語句就構成一個代碼塊(但不包括第5行的print)。如果 if 語句判斷為 True,就會執行這個代碼塊。
縮排請嚴格按照Python的習慣寫法:4個空格,不要使用Tab,更不要混合Tab和空格,否則很容易造成因為縮排引起的語法錯誤。
注意: if 語句後接運算式,然後用:表示代碼塊開始。
如果你在Python互動環境下敲代碼,還要特別留意縮排,並且退出縮排需要多敲一行斷行符號:
if...else...語句:
利用 if ... else ... 語句,我們可以根據條件運算式的值為 True 或者 False ,分別執行 if 代碼塊或者 else 代碼塊。
注意: else 後面有個“:”。
if-elif-else語句:
要避免嵌套結構的 if ... else ...,我們可以用 if ... 多個elif ... else ... 的結構,一次寫完所有的規則:
for迴圈:
依次取出list中的每一個元素,並把元素賦值給 name,然後執行for迴圈體(就是縮排的代碼塊)
While迴圈
和 for 迴圈不同的另一種迴圈是 while 迴圈,while 迴圈不會迭代 list 或 tuple 的元素,而是根據運算式判斷迴圈是否結束。
while迴圈每次先判斷 x < N,如果為True,則執行迴圈體的代碼塊,否則,退出迴圈。
在迴圈體內,x = x + 1 會讓 x 不斷增加,最終因為 x < N 不成立而退出迴圈。
如果沒有這一個語句,while迴圈在判斷 x < N 時總是為True,就會無限迴圈下去,變成死迴圈,所以要特別留意while迴圈的允出準則。
break語句:
用 for 迴圈或者 while 迴圈時,如果要在迴圈體內直接退出迴圈,可以使用 break 語句。
在迴圈過程中,可以用break退出當前迴圈,還可以用continue跳過後續迴圈代碼,繼續下一次迴圈。
嵌套迴圈:
在迴圈內部,還可以嵌套迴圈
for x in [‘A‘, ‘B‘, ‘C‘]:
for y in [‘1‘, ‘2‘, ‘3‘]:
print x + y
dict鍵值對 :
d = {
‘Adam‘: 95,
‘Lisa‘: 85,
‘Bart‘: 59
}
名字稱為key,對應的成績稱為value,dict就是通過 key 來尋找 value。
花括弧 {} 表示這是一個dict,然後按照 key: value, 寫出來即可。最後一個 key: value 的逗號可以省略。
由於dict也是集合,len() 函數可以計算任意集合的大小:
注意: 一個 key-value 算一個,因此,dict大小為3。
訪問dict
可以簡單地使用 d[key] 的形式來尋找對應的 value,這和 list 很像,不同之處是,list 必須使用索引返回對應的元素,而dict使用key:
注意: 通過 key 訪問 dict 的value,只要 key 存在,dict就返回對應的value。如果key不存在,會直接報錯:KeyError。
要避免 KeyError 發生,有兩個辦法:
一是先判斷一下 key 是否存在,用 in 操作符:
if ‘Paul‘ in d:
print d[‘Paul‘]
二是使用dict本身提供的一個 get 方法,在Key不存在的時候,返回None:
print d.get(‘Bart‘)
dict的特點
尋找速度快(而list的尋找速度隨著元素增加而逐漸下降。)
不過dict的尋找速度快不是沒有代價的,dict的缺點是佔用記憶體大,還會浪費很多內容,list正好相反,佔用記憶體小,但是尋找速度慢。
由於dict是按 key 尋找,所以,在一個dict中,key不能重複。
dict的第二個特點就是儲存的key-value序對是沒有順序的!這和list不一樣:
不能用dict儲存有序的集合。
dict的第三個特點是作為 key 的元素必須不可變,Python的基本類型如字串、整數、浮點數都是不可變的,都可以作為 key。但是list是可變的,就不能作為 key。
{
‘123‘: [1, 2, 3], # key 是 str,value是list
123: ‘123‘, # key 是 int,value 是 str
(‘a‘, ‘b‘): True # key 是 tuple,並且tuple的每個元素都是不可變對象,value是 boolean
}
最常用的key還是字串,因為用起來最方便。
dict是可變的,也就是說,我們可以隨時往dict中添加新的 key-value
d[‘Paul‘] = 72
如果 key 已經存在,則賦值會用新的 value 替換掉原來的 value:
直接使用for迴圈可以遍曆 dict 的 key:
>>> d = { ‘Adam‘: 95, ‘Lisa‘: 85, ‘Bart‘: 59 }
>>> for key in d:
... print key
...
Lisa
Adam
Bart
由於通過 key 可以擷取對應的 value,因此,在迴圈體內,可以擷取到value的值
dict的作用是建立一組 key 和一組 value 的映射關係,dict的key是不能重複的。
set無序:
建立 set 的方式是調用 set() 並傳入一個 list,list的元素將作為set的元素:
s = set([‘A‘, ‘B‘, ‘C‘])
set 持有一系列元素,這一點和 list 很像,但是set的元素沒有重複,而且是無序的,這點和 dict 的 key很像。
set不能包含重複的元素
set會自動去掉重複的元素
由於set儲存的是無序集合,所以我們沒法通過索引來訪問。
訪問 set中的某個元素實際上就是判斷一個元素是否在set中。
可以用 in 操作符判斷:
看來大小寫很重要,‘Bart‘ 和 ‘bart‘被認為是兩個不同的元素。
set的特點
set的內部結構和dict很像,唯一區別是不儲存value,因此,判斷一個元素是否在set中速度很快。
set儲存的元素和dict的key類似,必須是不變對象,因此,任何可變對象是不能放入set中的。
最後,set儲存的元素也是沒有順序的。
直接使用 for 迴圈可以遍曆 set 的元素:
注意: 觀察 for 迴圈在遍曆set時,元素的順序和list的順序很可能是不同的,而且不同的機器上啟動並執行結果也可能不同。
注意到set的元素是tuple,因此 for 迴圈的變數被依次賦值為tuple。
由於set儲存的是一組不重複的無序元素,因此,更新set主要做兩件事:
一是把新的元素添加到set中,二是把已有元素從set中刪除
添加元素時,用set的add()方法:
如果添加的元素已經存在於set中,add()不會報錯,但是不會加進去了:
刪除set中的元素時,用set的remove()方法:
如果刪除的元素不存在set中,remove()會報錯:
所以用add()可以直接添加,而remove()前需要判斷。
判斷元素是否在set中,使用in操作符。
abs()有且僅有1個參數
比較函數 cmp(x, y) 就需要兩個參數
int()函數可以把其他資料類型轉換為整數:
str()函數把其他類型轉換成 str:
函數
在Python中,定義一個函數要使用 def 語句,依次寫出函數名、括弧、括弧中的參數和冒號:,然後,在縮排塊中編寫函數體,函數的返回值用 return 語句返回。
請注意,函數體內部的語句在執行時,一旦執行到return時,函數就執行完畢,並將結果返回。因此,函數內部通過條件判斷和迴圈可以實現非常複雜的邏輯
如果沒有return語句,函數執行完畢後也會返回結果,只是結果為 None。
return None可以簡寫為return。
# math包提供了sin()和 cos()函數,我們先用import引用它:
import math
def move(x, y, step, angle):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx, ny
在文法上,返回一個tuple可以省略括弧,而多個變數可以同時接收一個tuple,按位置賦給對應的值,所以,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。
注意:Python的math包提供了sqrt()函數用於計算平方根。
使用遞迴函式需要注意防止棧溢出。在電腦中,函數調用是通過棧(stack)這種資料結構實現的,每當進入一個函數調用,棧就會加一層棧幀,每當函數返回,棧就會減一層棧幀。由於棧的大小不是無限的,所以,遞迴調用的次數過多,會導致棧溢出。
函數 move(n, a, b, c) 的定義是將 n 個圓盤從 a 藉助 b 移動到 c。
def move(n, a, b, c):
if n ==1:
print a, ‘-->‘, c
return
move(n-1, a, c, b)
print a, ‘-->‘, c
move(n-1, b, a, c)
move(4, ‘A‘, ‘B‘, ‘C‘)
.
Python內建的 int() 函數,其實就有兩個參數,我們既可以傳一個參數,又可以傳兩個參數:
int()函數的第二個參數是轉換進位,如果不傳,預設是十進位 (base=10),如果傳了,就用傳入的參數。
可見,函數的預設參數的作用是簡化調用,你只需要把必須的參數傳進去。但是在需要的時候,又可以傳入額外的參數來覆蓋預設參數值。
Learn Python in IMOOC(入門)