一、python介紹
1、版本區別
2.x.x:運行速度更快,使用它開發的庫和軟件更多。
3.x.x:擁有很多新型編程語言特性。
2、開發環境搭建
-
www.python.org:下載安裝python運行環境
(1)配置環境變量,使得cmd可用:path-> C:\Python27
cmd進入python開發模式:python + Enter鍵
cmd退出python開發模式:exit() + Enter鍵 / ctrl + Z + Enter鍵
cmd運行python源程序:cmd進入源文件所在位置,輸入:python xx.py
(2)python自帶編譯器:IDLE。
使用Ctrl+N可輸入多行python語句,保存后按F5運行。
www.aptana.com:aptana編譯器
www.jetbrains.com:下載pyCharm Professional版本,即python集成開發環境。(注冊碼)
www.web2py.com:非常強大的python網站開發框架:web2py。
3、python語言介紹
3大優點:
- 簡單
- 功能強大
- 支持面向對象
7個特點:
- 大小寫嚴格區分
- 簡單、易學、支持面向對象
- 開源
- 庫非常豐富。
如標準庫:電子郵件、正則表達式、密碼系統、GUI、FTP等;非標準庫即擴展庫:wxpython、圖像庫等。 - 跨平臺使用。
任何平臺寫的python程序,在其他平臺通用。 - 解釋型語言
- 高級語言
二、數據類型
1、數
- int
- long
- float
- bool
- complex 復數型(如4+2j、-9+20j、56+7j等)
2、字符串
用單引號、雙引號和三引號引起來的字符串。
單引號:
c1 = 'hello'
print c1
c2 = 'It is a "dog"!' # 單引號中可使用雙引號,且雙引號可輸出出來
print c2
雙引號:
c1 = "hello"
print c1
c2 = "It is a 'dog'!" # 雙引號中可使用單引號,且單引號可輸出出來
print c2
三引號:
c1 = '''he # 3個單引號
she
my
you are'''
print c1
c2 = """he # 3個雙引號
she
my
you are"""
print c2
# 三引號引起的字符串可換行。
例子:
# 輸出 It's a dog!
print "It's a dog!"
print 'It\'s a dog!'
# 輸出 hello world!
# hello python!
print '''hello world!
hello python!'''
print "hello world!\nhello python!"
自然字符串
若一串字符串需要原樣保留轉義符,不進行任何處理,則使用自然字符串:在字符串前加上r。
print r"hello world!\nhello python!"
字符串的重復
# 方法1:手動重復輸入
# 方法2:重復運算符 *
"hello"*20 # 計算機自動執行重復輸出指令,將hello重復輸出20次
子字符串
索引運算法:[]
返回下標所對應的一個字符。
切片運算法:[:]
[a:b] 從第a下標開始到第b-1下標。
[:b]
[a:]
取字符串長度
a="helloworld"
print len(a) # 10
切割字符串
a="student"
b=a.split("u")
print b # ['st', 'dent']
3、列表 []
用來存儲一連串元素的容器。
列表中的元素值可以修改、添加或刪除。
# coding=utf-8
students = ["小明", "小華", "小軍", "小云"]
print students[3]
students[3] = "小東"
print students[3]
4、元組 ()
用來存儲一連串元素的容器。
元組中的元素值不可以修改、添加或刪除。
# coding=utf-8
students = ("小明", "小華", "小軍", "小云")
print students[1]
students[1] = "小強"
print students[1] # 報錯:TypeError: 'tuple' object does not support item assignment
5、集合 set(元素)
# 去除重復元素
a = set("abcnmaaaaggsng")
print a # 打印:set(['a', 'c', 'b', 'g', 'm', 'n', 's'])
b = set("cdfm")
# 交集
x = a&b
# 并集
y = a|b
# 差集
z = a-b
6、字典/關聯數組 {}
字典中包含的是一整個事情,里面包括各方面的具體信息。
zidian = {'name':'zhangsan', 'home':'beijing', 'like':'music'}
# 搜某個信息的值
k = {'name':'zhangsan', 'home':'beijing'}
print k['home']
# 添加字典里的項
k['like'] = 'music'
print k['name']
print k['like']
三、python對象
1、python對象類型
內置的對象類型有:數、字符串、列表、元組、字典、集合等。
在python中,一切皆對象。
2、pickle腌制
在python中如果我們有一些對象需要持久性存儲,并且不丟失我們這個對象的類型與數據,則需要將這些對象進行序列化,序列化之后,在需要使用時,我們再恢復為原來的數據。
序列化的這個過程,稱為pickle(腌制)。
import pickle
# 方法1:把對象序列化后存儲到內存中
# dumps(object) 將對象序列化
lista=["mingyue","jishi","you"]
listb=pickle.dumps(lista)
print listb
# loads(string) 將對象數據原樣恢復,并且對象類型也恢復為原來的格式
listc=pickle.loads(listb)
print listc
# 方法2:把對象序列化后存儲到第三方文件中
# dump(object,file) 將對象存儲到文件中序列化
group1=("bajiu","wen","qingtian")
f1=file("1.pk1","wb") # wb:寫入
pickle.dump(group1,f1,True)
f1.close()
# load(object,file) 將dump()存儲在文件里面的數據恢復
f2=file("1.pk1","rb") # rb:讀取
t=pickle.load(f2)
print t
f2.close()
四、行與縮進
1、邏輯行與物理行
邏輯行:一段代碼意義上的行數
物理行:一段代碼實際占用的行數
# coding=utf-8
print "abc"; print "789"; print "777" # 1個物理行,3個邏輯行
print '''這里是
北京!
歡迎來玩!''' # 1個邏輯行,3個物理行
2、分號使用規則
每個邏輯行后面必須有分號;每個物理行行末可省略分號(也可不省略)。
3、行連接
1個邏輯行,寫在多個物理行,需要使用反斜扛“\”進行行連接。
# coding=utf-8
print "我們都是\
好孩子"
4、縮進
python中,邏輯行行首的空白是有規定的,行首空白不對,會導致程序執行出錯。
- 行首不應出現空白
- if和while,縮進一個TAB
a="789"
print a # 報錯:IndentationError: unexpected indent
五、運算符
優先級:
- 函數調用、尋址、下標
- **
- ~
- 正負號
- *、/、%
- +、-
- <<、>>
- &、^、|
- 比較運算符
- not、and、or
- lambda表達式
六、控制流
1、for
for i in 集合:
執行該部分
else:
執行該部分
例子:
# One
for i in [1,2,8,9,0]:
print i
#Two
for i in range(1,7): # range()函數的作用:生成一個集合的序列
print i
#Three
for i in range(1,10,2): # range(start,stop,step)
print i
2、if
例子:
for i in range(1,10):
if i%2==0: # 注意:python中比較必須是==,=只做賦值運算符
print "odd"
else:
print "even"
3、while
例子:
a=7
while a:
print "hello"
a=a-1
else: # 注意:python中,while還可以加else
print "world"
4、break
在雙層循環語句中,break只能跳出內層循環:
a=10
while a<=12:
a=a+1
for i in range(1,7):
print i
if i==5:
break
如果要跳出多層循環外,要使用標示:
// Java代碼
public class BreakTest{
public statis void main(String args[]){
out:
for(int i=0; i<10; i++){
for(int j=0; j<10; j++){
if(j=9){
break out;
}
}
}
}
}
七、函數
1、自定義函數
def 函數名():
函數內容; 函數內容
函數內容
# 例子
def a():
print "hello"
2、參數
參數:函數在執行功能時所要用到的數據。
關鍵參數:一個函數中出現多個參數時,可通過參數名字直接給參數賦值,這些參數稱為關鍵參數。
def function(a=1,b=6,c=7):
print a
print b
print c
function(5) # 5 6 7
function(b=7,a=8) # 8 7 7
function(5,c=2,b=3) # 5,3,2
function(b=4,c=2,a=1) # 1,4,2
3、全局變量
def func3():
global i
i=7
print i
func3()
4、函數調用
#無返回值
def a():
i=1
a()
#有1個返回值
def test1():
i=7
return i # 代表函數整體值為i
print test1()
#有多個返回值
def test2(i,j):
k=i*j
return (i,j,k) # 元組
x=test2(4,5)
print x # (4,5,20)
y,z,m=test2(4,5) # 分別存儲
print y # 4
print z # 5
print m # 20
5、文檔字符串
針對函數多了就會雜亂的問題,有2種方法解決:
在開發時為每個函數寫一個文檔進行說明;
在每個函數開頭的地方,加上一行說明性文字,即文檔字符串。
每次看到函數時,即可看到文檔字符串的說明,很方便。
編寫:文檔字符串必須寫在函數定義的正下方;必須用三引號。
def d(i,j):
'''該函數實現了一個乘法運算。 # 簡述函數功能
函數會返回一個乘法運算的結果。''' # 具體功能描述
k=i*j
return k
查看:
# 查看d函數的文檔字符串內容
print d.__doc__ # 方法1
help(d) # 方法2
八、python模塊
1、什么是模塊?
函數:實現一項/多項功能的一段程序。
模塊:函數功能的擴展,是實現一類功能的程序塊。
模塊內可以重用多個函數。
# 模塊位置
C:\Python27\Lib
# 后綴名:.py / .pyc
2、標準庫模塊與自定義模塊
標準庫模塊:python官方提供的自帶的模塊,伴隨python的安裝而產生。它是某一類模塊,而不是特指某一種模塊。
# sys模塊是其中一種標準庫模塊
import sys
sys.version #查看python版本信息
sys.executable #查看當前運行程序的地址
sys.getwindowsversion() #返回當前windows OS的運行環境
sys.modules.keys() #返回當前導入模塊的關鍵字
自定義模塊:將自己編寫的python程序放在Lib目錄下,即成為一個模塊。
3、如何導入模塊?
import 模塊名:導入一個模塊
import sys
sys.version #查看python版本信息
from 模塊名 import 方法名:不僅導入模塊,還導入模塊中對應的一個功能(屬性或方法)。注意:只能一次導入一個模塊的一個功能。
from sys import version
version
4、__name__
屬性
__name__
是系統的一個變量,用于判斷一個模塊是否是主模塊。
if __name__=="__main__":
print "It's main"
else:
print "It's not main"
主模塊:一個模塊是被直接使用的,而未被調用
非主模塊:一個模塊被調用(被import了)
主函數:調用其他函數完成一項功能的函數
非主函數:沒有調用其他函數的函數
5、dir()函數
python中有非常多的模塊,但有時我們會忘記一個模塊有哪些功能。此時,可以用dir()
函數來查看指定模塊的功能列表。
6、字節編譯
(1)什么是.pyc文件?
執行python模塊的2種方式:
- 先將模塊中的內容編譯成二進制語言,然后執行這些二進制語言
- 直接執行對應模塊的二進制語言程序(省略了編譯,速度更快)
字節編譯:把模塊編譯成二進制語言程序的過程。
字節編譯會產生一個與編譯的模塊(.py)對應的二進制文件:.pyc文件
(2)字節編譯 vs 編譯
編譯型語言:軟件中有一個獨立的編譯模塊去將程序編譯。
python中字節編譯是由解釋器完成的,因此python仍然是解釋型語言。
(3).pyc文件的產生
運行某一模塊時,會先找對應的.pyc文件,若有,則直接執行.pyc文件。
# 以zipfile.py模塊為例
# 方法1
import zipfile
# 方法2
cd c:\Python27\Lib
python -m compileall zipfile.py
(4).pyc文件的用途
加快了模塊的運行速度
可以進行反編譯:二進制文件 --> 源文件
使用二進制文件查看器Binary Viewer可以查看.pyc文件的內容。
九、數據結構
python內置的數據結構:元組、列表、字典等。
python擴展的數據結構:棧、隊列、樹等。
1、棧
class Stack():
def __init__(st, size): #初始化
st.stack=[]
st.size=size
st.top=-1
def push(st, content):
if st.Full():
print "Stack is Full!"
else:
st.stack.append(content)
st.top=st.top+1
def out(st):
if st.Empty():
print "Stack is Empty!"
else:
st.top=st.top-1
def Full(st):
if st.top==st.size:
return True
else:
return False
def Empty(st):
if st.top==-1:
return True
else:
return False
2、隊列
class Queue(qu,size):
def __init__(qu,size):
qu.queue=[]
qu.size=size
qu.head=-1
qu.tail=-1
def Full(qu):
if qu.tail-qu.head+1==qu.size:
return True
else:
return False
def Empty(qu):
if qu.head==qu.tail:
return True
else:
return False
def enQueue(qu,content):
if qu.Full():
print "Queue is Full!"
else:
qu.queue.append(content)
qu.tail=qu.tail+1
def outQueue(qu):
if qu.Empty():
print "Queue is Empty!"
else:
qu.head=qu.head+1