一、內建函數
1、數學運算類
abs(x)#求絕對值
divmod(a, b)#分別取商和餘數
float([x])#將一個字符串或數轉換爲浮點數。如果無參數將返回0.0
int([x[, base]])#將一個字符轉換爲int類型,base表示進制
long([x[, base]])#將一個字符轉換爲long類型
range([start], stop[, step]) #產生一個序列,默認從0開始
oct(x)#將一個數字轉化爲8進制
hex(x)#將整數x轉換爲16進制字符串
chr(i)#返回整數i對應的ASCII字符
2、集合操作類
format(value [, format_spec])#格式化輸出字符串,如“I am {0},I like {1}”
iter(o[, sentinel])#生成一個對象的迭代器,第二個參數表示分隔符
max(iterable[, args...][key]) #返回集合中的最大值
min(iterable[, args...][key])#返回集合中的最小值
dict([arg])#創建數據字典
list([iterable]) #將一個集合類轉換爲另外一個集合類
str([object]) #轉換爲string類型
sorted(iterable[, cmp[, key[, reverse]]])#隊集合排序
xrange([start], stop[, step]) #返回一個xrange對象
3、邏輯判斷
all(iterable)#集合中的元素都爲真的時候爲真,若爲空串返回爲True
any(iterable)#集合中的元素有一個爲真的時候爲真,若爲空串返回爲False
cmp(x, y)#如果x < y ,返回負數;x == y, 返回0;x > y,返回正數
4、反射
hash(object)#如果對象object爲哈希表類型,返回對象object的哈希值
id(object)#返回對象的唯一標識
len(s) #返回集合長度
eload(module) #重新加載模塊
type(object)#返回該object的類型
5、io操作
input([prompt]) #獲取用戶輸入,使用raw_input該函數將不會捕獲用戶的錯誤輸入
file(filename [, mode [, bufsize]]) #
open(name[, mode[, buffering]]) 打開文件,推薦使用open
raw_input([prompt]) #設置輸入,輸入都是作爲字符串處理
二、文件操作
1、打開模式列表
#w 以寫方式打開,
#a 以追加模式打開 (從 EOF 開始, 必要時創建新文件)
#r+ 以讀寫模式打開
#w+ 以讀寫模式打開 (參見 w )
#a+ 以讀寫模式打開 (參見 a )
#rb 以二進制讀模式打開
#wb 以二進制寫模式打開 (參見 w )
#ab 以二進制追加模式打開 (參見 a )
#rb+ 以二進制讀寫模式打開 (參見 r+ )
#wb+ 以二進制讀寫模式打開 (參見 w+ )
#ab+ 以二進制讀寫模式打開 (參見 a+ )
#"U"表示在讀取時,可以將 \r \n \r\n自動轉換成 \n (與 r 或 r+ 模式同使用)rU,r+U
2、文件對象方法
file.close() # 關閉文件
file.fileno() # 返回文件的描述符
file.flush() # 刷新文件的內部緩衝區
file.isatty() # 判斷file是否是一個類tty設備
file.next() # 返回文件的下一行,或在沒有其他行時引發StopIteration異常
file.read(size=-1) # 從文件讀取size個字節,當未給定size或給定負值的時候,讀取剩餘的所有字節,然後作爲字符串返回
file.readline(size=-1) # 從文件中讀取並返回一行(包括行結束符),或返回最大size個字符
file.readlines(sizhint=0) # 讀取文件的所有行作爲一個列表返回
file.xreadlines() # 用於迭代,可替換readlines()的一個更高效的方法
file.seek(off, whence=0) # 在文件中移動文件指針,從whence(0代表文件起始,1代表當前位置,2代表文件末尾)偏移off字節
file.tell() # 返回當前在文件中的位置
file.truncate(size=file.tell()) # 截取文件到最大size字節,默認爲當前文件位置
file.write(str) # 向文件寫入字符串
file.writelines(seq) # 向文件寫入字符串序列seq;seq應該是一個返回字符串的可迭代對象
3、文件讀取
f = open('tpm.txt')
# read方式讀取
s = f.read()
print(s, '\n\n\n')
print(f.tell())
#上面讀取完後指針移動到最後,通過seek將文件指針移動到文件頭
f.seek(0)
#使用readline每次讀取一行
while(True):
line = f.readline()
print(line)
if(len(line) == 0):
break
f.close()
#爲了避免打開文件後忘記關閉,可以通過管理上下文,即:
with open('log','r') as f:
with open('log1') as obj1, open('log2') as obj2:
pass
二、函數
1、定義和使用函數
def 函數名(參數):
函數體
3、參數
形參:在定義函數的同時定義變量,如下例的a,b。
實參:供形參使用的值叫做實參,入下例的3,4。
def printMax(a, b):
if a > b:
print a, 'is maximum'
else:
rint b, 'is maximum'
printMax(3, 4)
4、局部變量
#當你在函數定義內聲明變量的時候,它們與函數外具有相同名稱的其他變量沒有任何關係,即變量名稱對
於函數來說是 局部 的。這稱爲變量的 作用域
使用global可將局部變量定義爲全局變量
例:
def func():
global x
print 'x is', x
x = 2
print 'Changed local x to', x
x = 50
func()
print 'Value of x is', x
結果:
x is 50
Changed global x to 2
Value of x is 2
5、參數
關鍵參數
#如果你的某個函數有許多參數,而你只想指定其中的一部分,那麼你可以通過命名來爲這些參數賦值——
這被稱作 關鍵參數
我們使用名字(關鍵字)而不是位置,來給函數指定實參。這樣做有兩個優勢一,由於我們不必擔心參數的順序,使用函數變得更加簡單了。二、假設其他參數
都有默認值,我們可以只給我們想要的那些參數賦值。下列中的b=5,c=10爲默認參數,在不填寫時爲默認值。
例子:
def func(a, b=5, c=10):
print 'a is', a, 'and b is', b, 'and c is', c
func(3, 7)
func(25, c=24)
func(c=50, a=100)
輸出:
a is 3 and b is 7 and c is 10
is 25 and b is 5 and c is 24
a is 100 and b is 5 and c is 50
動態參數:
例1:
def func(*args):
print args
執行1:func(11,33,4,4454,5)
執行2:li = [11,2,2,3,3,4,54] func(*li)
例2:
def func(**kwargs):
print args
執行1:func(name='lxb',age=21)
執行2:dic = {'name':'lxb', age:21, 'gender':'male'} func(**dic)
執行3:
def func(*args, **kwargs):
print args
print kwargs
6、返回值
#return 語句用來從一個函數 返回 即跳出函數。我們也可以從函數 返回一個值 。
def maximum(x, y):
if x > y:
return x
else:
return y
print maximum(2, 3)
三、內置函數
1、nmap #遍歷序列,對序列每個元素進行操作,最終獲取新序列。
#每個元素增加100
li=[11,22,33]
new_list=map(lambda a:a+100,li)
#兩個序列相加
li=[11,22,33]
li1=[1,2,3]
new_list=map(lambda a,b:a+b,li,li1)
2、filter #對序列中的每個元素進行篩選,最終獲得符合條件的序列。
new_list=filter(lambda arg:arg>12,li)#獲取大於12的序列
3、reduce #對序列內所有元素進行累計操作
li=[11,22,33]
result=reduce(lambda arg1,arg2:arg1+arg2,li)
# reduce的第一個參數,函數必須要有兩個參數
# reduce的第二個參數,要循環的序列
# reduce的第三個參數,初始值(可爲空)
四、yielod生成器
range和xrange的區別
rangge會在內存中創建所有指定的數字,而xrange,只有在迭代循環,纔去創建每個數組
自定義range
def nrange(num):
temp = -1
while True:
temp = temp + 1
if temp >= num:
return
else:
yield temp #記憶此時內容並退出函數
五、冒泡算法
按從小到大對列表[13,22,6,99,11]進行排序
思路相鄰兩個值進行比較,較大的值放在右側,依次進行比較。
li = [13, 22, 6, 99, 11]
for i in range(1,5):
for m in range(len(li)-i):
if li[m] > li[m+1]:
temp = li[m+1]
li[m+1] = li[m]
li[m] = temp
六、裝飾器
1、手工裝飾
import time
#裝飾器是一個函數,而其參數爲另一個參數
def timeit(func):
def wrapper(): #在內部定義了一個函數,封裝添加的功能
start = time.clock() #放一些在執行函數前的代碼
func() #執行原始函數
end = time.clock() # #放一些執行函數後的代碼
print 'used:', end - start
return wrapper #返回封裝函數,封裝函數已包含函數執行前後執行的代碼
@timeit #等於foo=timeit(foo),即裝飾器返回的是封裝函數
def foo():
print('in foo()')
foo() #執行封裝函數,即執行的不是原函數而是封裝後的函數
print(foo.__name__) #被修飾後函數名變爲wrapper
2、使用functools裝飾器裝飾
#函數是有幾個特殊屬性比如函數名,在被裝飾後,上例中的函數名foo會變成包裝函數的名字wrapper,
#它能將裝飾過的函數的特殊屬性保留。
import functools
def timeit(func):
@functools.wraps(func)
def wrapper():
start=time.clock()
func()
end=time.clock()
print 'used:', end - start
return wrapper
@timeit
def foo():
print 'in foo()'
foo()
print foo.__name__ #函數名還是之前的函數名foo