#抽象
#判斷函式是否可呼叫
callable(x) #python2
hasattr(func.__call__) #python3
#文件字串
def square(x):
'這是......'
return x*x
print square.__doc__
help(square)
n=['a','b','c']
def change(n):
n[0]='v'
print n #['v','b','c'] #列表會被改變,此類情況需要在函式內建立新的變數並賦值
#將值放在列表中,可被改變
def inc(x):x[0]=x[0]+1
a=[10]
inc(a)
print a #11
#以上為未知引數,以下為關鍵字引數
def hello(greeting='a',name='b'): #可以提供預設值
print '%s,%s!'%(greeting,name)
hello(greeting='hello',name='world') #這樣就不影響傳參順序了
#位置引數和關鍵字引數可以混用
def hello(name,greeting='hello',punctuatuin='!'): #需要將位置引數放前邊
print '%s,%s%s'%(greeting,name,punctuatuin)
#收集引數
def print_params(title,*params): #*的意思是收集其他位置引數,只能收集位置引數
print title
print params #元組
def print_params(**params): #**只收集關鍵字引數
print params #字典
#星號只在定義不定數目的引數或分割字典或序列時才有用
#變數#變數儲存在不可見字典中,vars()函式可以返回這個字典
x=1scope=vars()
scope['x']
#1scope['x']+=1x#2
#此類不可見字典叫做命名空間或作用域
globals() #返回全域性變數的字典
locals() #獲取區域性變數的字典
#函式內宣告全域性變數
x=10
def change_global():
global x
x+=x
change_global()
x#11
#python函式可以巢狀
def foo():
def bar():
print 'hello'
bar()
#map
map(str,range(10)) #將序列中的值全部傳給函式,等價於[str[i] for i in range(10)]
#filter
def func(x):
return x.isalnum()
seq=["foo","x41","?!","***"]
filter(func,seq) #可以基於乙個返回值為boolean的函式過濾
['foo','x41']
#等價於
[x for x in seq if x.isalnum()]
#等價於
filter(lambda x:x.isalnum(),seq) #lambda表示式
#reduce:處理序列中前兩個值,其結果與第三個值再進行處理,依次,直到整個序列處理完
numbers=[1,2,3,4,5,6,7,8,9]
reduce(lambda x,y:x+y,numbers) #返回序列中所有值的和
45#等價於
sum(numbers) #求和函式
#更加抽象
#建立類
__metaclass__=type #確定使用新式類,3.0以後不存在舊式類
class persion:
def setname(self,name): #self用於訪問本身,必須作為第乙個引數
self.name=name
def getname(self):
return self.name
def greet(self):
print "hello,world!i`m %s."%self.name
#私有變數或方法
#在構造類時,變數或方法的名字前加上雙下劃線,即可成為私有方法或變數,實際上名字加上雙下劃線後,名字會被轉換成(_類名__名字)的形式,通過此名字可以訪問
#python沒有真正的私有化支援
class a:
def __aa():
print "a"
def b(self):
self.__a()
a.__aa() #報錯
a._a__aa #依然可以訪問,不建議這麼做
#帶有單下劃線的名字,不會被import *引入
#繼承,a繼承b
class a(b):
def init():
pass
#調查繼承
issubclass(a,b) #檢查a是否b的子類
a.__bases__ #檢查a的父類
o.__class__ #檢查物件是哪個類的例項
isinstance(o,a) #檢視乙個物件是否乙個類的例項
types(s) #檢視物件是哪個類的例項,限新式類
#多重繼承
class c(a,b): #注意順序,前邊類中的方法會覆蓋後邊的,例如:若a中有k(),b中有k(),則c中的k()為a中的k()
pass
random.choice(seq) #從非空序列隨機選擇元素
hasattr(object,name)
getattr(object,name[,default])
setattr(object,name,value)
#異常#自定義異常
class someexception(exception):pass
raise exception
try:
...except someexception:
if ...:
...else:
raise
except (otherexception,bexception,cexception):
...except (dexception,eexception),e: #python 3.0為except (dexception,eexception) as e
print e
except:
print 'some wrong!'
else:
print 'well'
finally:
print 'finally'
#引入自己的模組
import sys
import hello
#在模組中定義測試**
#hello.py
def hello():
...def test():
...if __name__=='___main__': #當作為模組時,__name__為hello
test()
"""引入自己的模組方法
1、將模組檔案放在python庫目錄,推薦c:\\python\\lib\\site-package(pprint.pprint(sys.path))
2、告訴編譯器去**找,bashshell如下:
環境變數:.bashrc中加入 export pythonpath=$pythonpath:~python
"""#包(__init__.py檔案用於定義包)
#ds/__init__.py
pi=3.14
#將模組檔案放入ds目錄即可
import ds
print ds.pi
#引入import drawing #僅可以使用__init__.py中的內容,不可以使用模組
import drawing.colors #可以通過全名drawing.colors使用模組
from drawing import shapes #可以通過短名shapes使用模組
"""**模組(以copy為例)
1、>>>>import copy
>>>>[n for n in dir(copy) if not n.startswith('_')]
#說明copy模組一共有這些變數
2、>>>>copy.__all__
["a","b","c","d"]
#說明copy模組定義的公有介面是這些
#from copy import * 只能匯入copy.__all__中的變數
#若要使用其他變數,需要顯性實現。如匯入copy模組m後,使用m.a(),或者from m import a
#__all__指定需要的變數、函式、類,如果不設定__all__,import * 會把所有變數匯入進去
3、>>>>help(copy.copy)
#若有__doc__變數
>>>>print copy.copy.doc
4、5、原始碼(檔案位置)
>>>>print copy.__file__
"""#模組
#sys
python入門學習筆記(三) 切片 元組
4.操作列表 4.1遍歷整個列表 forname x y z for x in name in後面是可迭代物件 不要忘記 迴圈內容要縮排,縮排是靈魂 print x 編譯結果 x yz4.2建立乙個數值列表 4.2.1 range for x in range 1,5 print x 12 344....
Python 入門筆記
前一段時間看了九天雁翎 http hi.csdn.net vagrxieeasy but powerful 總體感覺python的庫功能極其強大,這樣使得python 密度很高,用c 10行實現的內容,python可能不到3行就能實現了。當然這樣會損失一些效率,但是實現一些小的應用軟體不會有什麼問題...
python入門筆記( )
變數賦值 counter 0 miles 1000.0 name xumesang n 10 2.字串 str python str 0 p str 1 n str 2 pythonpython 3.列表,元組和字典 list 1,2,3,4 元素可變 tuple xumesang 23,101 元...