1、可以採用反斜槓\明確添加一個後續行。
2、以:結束多行語句。
例如:if i=2:
pass;
3、註釋方式
a、註釋一行用# 例如:#i=2
4、python文本程序
Unix下的python腳本,需要在腳本首行設置一個“shebang",該行聲明python解釋器在系統中的位置。
例如:#!/usr/local/bin/python
今天,更流行的寫法,而且與python安裝位置無關:#!/usr/bin/env python
可以通過whereis python命令查找python在Unix系統中的所在位置。同時採用chmod +x scriptname.py 把腳本的許可部分設置爲755,以便每個用戶都可以執行它。
5、如果要在執行完一個程序後打開解釋器,則在調用腳本時使用-i變元。否則腳本執行之後,將自動關閉解釋器。
例如:python -i scriptname.py
6、主意:製表符在內部轉換成空格(1個製表符=8個空格)空行是忽略的腳本when部分。
7、如果一行擁有多個語句,則需要使用分毫把它們隔開。
例如: print "When AH"; print "were young..."
需要分解成兩行的行末尾設置反斜槓\:
例如 t="Nobody expects" + \
"the Spanish inquisition"
8、Python程序中無需聲明變量類型。同一變量名稱在不同場合可能擁有不同類型,因爲每次給變量分配一個值時都要重新初始化它。
9、python中無需釋放變量。因爲python進行引用計數,當變量引用計數減至0時,則可以把它作爲無用信息進行收集。Cpython中,引用計數一抵達0就釋放對象。
10、python中的保留字
and 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 while
11、python中的標識符
A~Z a~z 0~9以及_。但是,標識符不能以數字開頭。
python標識符是大小寫敏感的。
專用字符:$,%和@不能做標識符名稱部分。此外,$和@只能用在程序中的引證字符串內。%字符可在程序中使用,因爲它是mod運算符。
12、python中的內置數據類型
a、不可變數據類型:字符串,數值以及元組
b、可變數據類型:列表,字典
注意:
Python支持長整形,而且長度不受限制。爲了讓python把整數處理爲長整形,則需要在數字末尾設置一個L。
python把字符串當做字符序列。
13、真假邏輯值
假由零,空結構或者值None表示。
真由不爲零的結果值和非空結構表示。
14、python內置函數
載入python解釋器時,總可以獲得如下所列函數。因爲它們是__builtin__模塊的組成部分,該模塊總隨python的啓動而導入。
apply()該函數執行一個給定函數,傳遞所提供的變元。
基本語法:apply(function,(tuple of positional arguments),[dictionary of keywords arguments])
>>> apply (raise_salary,(6000),{'emplyee':'john','id':13})
coerce()用於嘗試把兩個給定變元x和y轉變成同一類型,並把它們作爲元組返回。
基本語法:coerce(x,y)
>>> coerce(43,5.4) ====>(43.0,5.4)
filter()該函數通過制定function篩選原list的每個元素生成一個新的列表,篩選原則是函數評價爲真
基本語法:filter(function,list)
>>> filter(lambda x : x<3,range(4)) ======>[0,1,2]
golobals()該函數返回全局名字空間字典
基本語法:golobals()
input() 該函數爲用戶提供一個輸入接口。只接受數字。
基本語法:input([prompt])
>>> a= input("please, type a number greater than 5:")
locals()該函數返回一個局部名字空間字典。
基本語法:locals()
map()該函數把一個制定的function應用於list的每項元素,生成另一個列表。如果把指定函數設置成None並提供多個列表,則生成列表形式的元組矩陣。
>>> lst = map (None,[1,2,3,4],[1,2,3,4,5,6])
>>> lst ===> [(1,1),(2,2),(3,3),(4,4),(None,5),(None,6)]
open()該函數打開一個文件對象
基本語法:open(filename[,model[,bufsize]])
pow()該函數範圍x**y或者(x**y)%z,具體取決於傳遞變元的個數
基本語法:pow(x,y[,z])
raw_input()該函數從標準輸入(sys.stdin)讀取,把所讀取數據作爲字符串返回。prompt是可在屏幕上顯示的可選文字。
基本語法:raw_input([prompt])
reduce()該函數向sequence中的元素項累加應用一個function(隱式循環),返回單個值。initializer是可選開始值
基本語法:reduce(function,sequence[,initializer])
>>> import operator
>>> reduce(operator.add,[1,2,3]) =====> 6
__import__()導入語句調用的函數。爲了導入一個模塊,只需通告module name即可。
基本語法:__import__(module_name,[,globals()[,locals()[,from list]]))
>>> string = __import__("string")
reload()該函數重新加載一個已導入的模塊,它在reload()內調用__import__()函數
序列函數
range()該函數根據所傳輸信息返回一個數值列表
基本語法:variable=range([initial_value,]final_value-1[,step])
>>> lst = range(1,5) ===> lst結果是[1,2,3,4]
xrange()類似於range(),但不想一個變量分配返回列表,因而前者使用的內存沒有後者多。因此,即使鍵入xrange(2000000000000000)也不會引起內存不足。
基本語法:xrange([initial_value,]final_value-1[,step])
len()該函數返回字符串元素的長度
基本語法:len(variablename)
max()該函數返回sequence的最大(最長)元素
基本語法:max(sequence)
>>> max(1,2,3) ===> 3
>>> max("my brain hurts)===>"Y"
min()該函數返回sequence的最小元素
基本語法:min(sequence)
zip()是一個多元組組成的列表,其中每個元組包含來自每個給定序列的第i個元素。該函數生成一個結果列表,其長度正好與最短給定序列的長度相同。另外注意,序列長度不同時,函數map(None,sequence1,sequence2,...)用None填補結果列表。
基本語法:zip(sequence1,sequence2,sequence3,...)
對象操作
setattr()該函數爲object.name設置新值。
基本語法:setattr(object,name,value)
getattr()該函數從object返回attractive。該函數等價於object.attribute
基本語法:getattr(object,attribute)
hasattr()如果object擁有attribute,該函數返回1;否則返回0
基本語法: hasattr(object,attribute)
delattr()該函數從object刪除attribute。該函數等價於 del object.attribute
基本語法:delattr(object,attribute)
type()該函數返回object類型。
基本語法:type(object)
dir()該函數返回取自活動名字空間的屬性名稱列表。object可以是任何類型。
基本語法:dir([object])
callable()如果object可調用,該函數返回1;否則返回0.
基本語法:callable(object)
hash()該函數返回object散列值。
基本語法:hash(object)
id()該函數返回object的系統唯一標識符
基本語法:id(object)
var()該函數返回object的符號表或局部名字空間列表。
基本語法:vars([object])
數學/邏輯函數
abs()該函數返回number的絕對值
基本語法:abs(number)
cmp() x<y時該函數返回-1;x==y時返回0,x>y時返回1.
基本語法:cmp(x,y)
round()該函數把number舍入到給定decimals。注意,該函數把擬舍數值默認舍入成整數。
基本語法:round(number[,decimals])
divmod()該函數返回元組(商,餘數),生成表達式dividend/divisor
基本語法:divmod(dividend,divisor)
>>>divmod(25,3)===>(8,1)
代碼函數
eval()該函數把編譯代碼string對象當做python代碼那樣進行評價,並返回評價結果。global和locals定義該操作的名字空間。注意,eval只能評價表達式,而不是任何語句。因此,eval('import string')無法運行。
基本語法:eval(string[,globals[,locals]])
>>>eval('2*y+(20/x)')
exec()該函數執行包含python代碼的一個string。globals和locals定義該操作的名字空間。
基本語法:exec(string[in globals[,locals]])
>>> a='for b in range(4):\n print b,\n'
>>> exec a ===> 0 1 2 3
execfile()該函數執行所提供的file中包含的語句。globals和locals定義該操作的名字空間。
基本語法:execfile(string[,globals[,locals]])
>>> globalsvar={'x':7}
>>> execfile("c:\scriptename.py",globalsvar)
compile()該函數編譯可選擇性地位於一個file中的代碼對象。type值取決於:如果string是語句序列,type是“exec”;如果string是大哥表達式,type則是“eval”;如果string是可執行的語句,type則是“single”
基本語法:compile(string,file,type)
類型轉換
int()該函數把object轉換成整數。
基本語法:int(object)
long()該函數把object轉換成長整數。
基本語法:long(object)
float()該函數把object轉換成浮點數
基本語法:float(object)
complex()該函數生成(real_imaginary)形式的複數。
基本語法:complex(real[,imaginary])
str()該函數返回object的可打印表示。其返回值與“print object”語法返回的值相同。
基本語法: str(object)
repr()該函數等價於一對反向引號``。repr()返回可評價的表達式。
基本語法:repr(object)
>>> repr('span\n) ===>'span\\012'
tuple()該函數創建基於sequence的元組。
基本語法:tuple(sequence)
list()該函數創建基於sequence的列表。
基本語法:list(sequence)
chr()該函數把integer轉換成字符。
基本語法:chr(integer)
ord()該函數返回string的ASCII值
基本語法:ord(string)
hex()該函數把object轉換成十六進制值
基本語法:hex(object)
oct()該函數把object轉換成八進制值
基本語法:oct(object)
unicode()該函數獲取一個8爲字符串並生成一個單碼字符串。
基本語法:unicode(string[,encoding][,error])
編碼(encoding)和錯誤(errors)是我們還可以提供給該函數的一些附加變元。首變元是指encoding使用的字符串。error定義當前編碼使用無效字符時該做什麼。這裏有說那個可選值:
strict表示一遇到編碼錯誤就引發異常;ignore簡單的忽略任何錯誤;replace則表示只要發現問題就使用正式替換字符U+FFFD代替無效字符。
unichr()該函數返回包含給定字符的1長度單碼字符串。
基本語法:unichr(character)
14、python控制語句
(1)if/elif/else
(2)for 語句
for variable in sequence:
pass
else:
pass
只有根本沒有執行for語句時或執行完最後一個循環後才執行else子句。換言之,除非在循環內部執行break語句,否則總執行else語句。
(3)while 語句
while <condition>:
pass
else:
pass
只有根本沒有執行while語句時或執行完最後一個循環後才執行else子句。換言之,除非在循環內部執行break語句,否則總執行else語句。
(4)break/continue
break:
break子句終止循環,而且沒有執行else子句。
continue
continue子句跳過循環體的其餘部分,一直調回循環頭。
15、python數據結構
a、列表
列表時可變的object序列,有創建後可變的自然數索引。
創建 >>> lst=[]
列表可有不同的數據類型的元素:類似於java的List<object> lst,所以列表也可以包含有其他的列表。
例如:lst=[1,"aa",[1,2,3]]
獲取列表元素: lst[1] ====> "aa"
獲取元素索引: lst.index("aa") ==>2
列表賦值: lst[1]="aa" 列表片賦值:lst[1:2]=["aa",[1,2,3]]
列表插入值:lst.insert(4,val)
列表刪除值: del lst[4]
列表綜合:也就是列表的元素從另一個列表計算而得,從而生成新的列表。從左向右評價並迭代所有for...in子句。
這意味着結果列表時給定序列的笛卡爾積。
[expression for expresion1 in sequence1
[for expression2 in sequence2]
[...for expressionN in sequenceN]
[if condition]
例如:
>>>letters="py"
>>> number=(1.52,1.5.2.0)
>>>[(1,n) for l in letters for n in numbers]
列表內置方法:>>> dir([])
['__add__', '__class__', '__contains__', '__delattr__', '__delitem__', '__delsli
ce__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getit
em__', '__getslice__', '__gt__', '__hash__', '__iadd__', '__imul__', '__init__',
'__iter__', '__le__', '__len__', '__lt__', '__mul__', '__ne__', '__new__', '__r
educe__', '__reduce_ex__', '__repr__', '__reversed__', '__rmul__', '__setattr__'
, '__setitem__', '__setslice__', '__sizeof__', '__str__', '__subclasshook__', 'a
ppend', 'count', 'extend', 'index', 'insert', 'pop', 'remove', 'reverse', 'sort'
]
b、值域
值域是整數的實際列表。內置函數range()提供這一數據類型。省略第一個變元時,假定它是0
xrange()返回一個XrangeType對象,而不是在變量中存儲大型數字列表。可以通過toList()方法把該引用轉換成實際的列表
也就是說range(5)等價於xrange(5).toList()
c、元組
元組是不可變python對象組成的序列
創建 tuple=()
獲取元組元素: tuple[0]
函數返回多個值需要用元組。例如:
def f():
retrun 0,1,2
x,y,z=f()
元組內置函數:>>>dir(())
['__add__', '__class__', '__contains__', '__delattr__', '__doc__', '__eq__', '__
format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__get
slice__', '__gt__', '__hash__', '__init__', '__iter__', '__le__', '__len__', '__
lt__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__'
, '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'count
', 'index']
d、字典(散列表)(關聯數組)
字典是python中僅有的映射類型。字典鍵值不能使可變類型變量,鍵值是根據值而不是對象身份進行比較。
創建:dict={} 鍵值必須是不可變數據類型(如字符串,數值或元組)
獲取對應鍵的值: dict["fish"]
刪除元素: del dict["fish"]
內置函數:>>> dir({})
['__class__', '__cmp__', '__contains__', '__delattr__', '__delitem__', '__doc__'
, '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__',
'__hash__', '__init__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '_
_new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__'
, '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get
', 'has_key', 'items', 'iteritems', 'iterkeys', 'itervalues', 'keys', 'pop', 'po
pitem', 'setdefault', 'update', 'values', 'viewitems', 'viewkeys', 'viewvalues']
16、函數和過程
函數和過程是可以從代碼的幾個不同部分進行訪問的代碼塊。
過程是不返回值的函數。函數和過程之間的唯一差別就是過程擁有一個不帶變元的返回命令或者不包含任何任何語句。
執行函數時,函數創建自己的名字空間
函數調用過程:
a、python在其名字空間內部執行搜索,查找用於識別這是否是python對象的function
b、python生成有傳遞arguments組成的元組。
c、python內調用函數的方式apply(function,arguments)
由上可以看出,python中可以把函數名稱與參數分割開來,把它們保存在某處並進行操作,然後使用apply內置函數執行該函數。
函數定義:
函數總以縮略字def開始。函數結束則由下面的隨縮進代碼塊的最後行定義。
def fun_name(arg1,arg2...):
func_body
無變元函數的調用必須使用空括號。
可以向變量分配函數。 例如 >>>x=abs >>>x(-2)===>2
python使用動態名字空間。每一個函數,模塊以及類在創建時定義自己的名字空間。
向python通知指令,命令或者語句時,python首先搜索局部名字空間,然後搜索全局名字空間。
python具有如下幾類名字空間:
內置名稱----int、string、def、print等等
全局名稱----在模塊頂層聲明成全局並加以賦值
局部名稱----在函數內部賦值
在函數內部獲得賦值的變量總屬於函數的名字空間。
>>> x=10 >>> x=10
>>> def ff(): >>> def dd():
... x=20 ... global x
... return x ... x=20
... ... return x
>>> print ff() >>> print dd()
20 20
>>> print x >>> print x
10 20
python通過提供有關鍵字lambda來實現匿名函數,lambda只是def的另一種書寫形式而已,而且在其中只能防止一個表達式(返回時隱式的)。實際上lambda旨在提供使小型函數書寫的簡寫方式。
參數
python語言中的所有參數(變元)都有引用傳遞。模塊,類,實例以及其他函數可用做函數變元並可動態查看。
因爲採用引用傳遞,作爲變元傳遞到函數的可變對象在函數內部改變時,他們的外部值也相應改變。
python還提供命名變元。例如:def dd(port=0): pass 命令變元可以作爲默認變元,也就是說產生默認值。
在我們無法預先查明可能需要的變元個數。可在類變元名之後使用專用符號*和**。*args以接受順序獲取值元組;而**args獲取字典映射
函數的內置方法
>>> def f():
... pass
>>> dir(f)
['__call__', '__class__', '__closure__', '__code__', '__defaults__', '__delattr_
_', '__dict__', '__doc__', '__format__', '__get__', '__getattribute__', '__globa
ls__', '__hash__', '__init__', '__module__', '__name__', '__new__', '__reduce__'
, '__reduce_ex__', '__repr__', '__setattr__', '__sizeof__', '__str__', '__subcla
sshook__', 'func_closure', 'func_code', 'func_defaults', 'func_dict', 'func_doc'
, 'func_globals', 'func_name']
模塊和包
模塊指文本文件中保存的類、函數以及變量等組成的集合。
在python應用程序中引用一個函數時,無需指定文件後綴----程序文本文件必須帶有一個.py擴展名。模塊可以由python或c編寫。無論選擇哪種語言編寫模塊,都可以使用相同語法調用兩類模塊。
下述語法爲模塊導入並創建全局名字空間:
import <module>
也可以只使用如下所示的導入語句同時導入多個模塊:import m1,m2,m3
提示:第一次導入模塊時執行所有代碼
有些模塊一直存在於python中。其他模塊則是文件並需要導入(在大部分情況下,這些文件都擁有.py或.pyc後綴).爲了導入,文件必須保存在sys.path變量中所列出的某一個目錄之下。
包是位於同一目錄下的模塊集合。包名必須是sys.path變量中所列出的其中一個目錄的子目錄。
包目錄至少必須擁有一個__init__.py文件。如果包中包含子包(子目錄)。每個子目錄也至少需要一個__init__.py文件
import a.b表示導入包a內部的子模塊b。
導入包時,其子包並不隨同一併導入。必須在__init__.py文件中明確說明。
這可能類似於在包的__init__.py文件中保存如下代碼;
import subpackage1,subpackage2
爲了定位模塊和包,python使用sys.path中保存的路徑。該變量是一個類似於任何列表的簡單列表,可以向該列表中添加想要的任何目錄。
在導入模塊的時候可以對其進行重新命名。
import module as new name 或者 from module import name as newname
from與import