dir(__builtins__)
help(input)
'let\'s go' #轉義字符 \
r'c:\now' #字符串前加r 自動轉義
str= '''
shdiufhi
sdfjskldfjk
dfdfsdf
''' #多行打印
isinstance(i , str) #判斷是否符合str類型
// #地板除法
2 ** 4 #16 冪運算
-3 ** 2 #-9 優先級問題 比左側優先級高右側低
small = x if x<y else y #三元操作符
assert 3>4 #斷言 錯的拋出異常assertionexception
print(i, end = ' ') #
list.append()
list.extend()#參數中傳入的數組進行組合
list.insert(1,value)#根據位置插入到列表中
list.remove()#移除目標
del list[1]#從內存中刪除列表元素
list.pop()#隨機pop或指定索引
list[:]#獲得列表的拷貝
list可相加
in#可用來判斷列表中是否包含
'{0} love {1}'.format('i', 'u')
'{a} love {b}'.format(a= 'i', b='u')
'{0:.1f}{1}'.format(12.32323, 'mfc')
序列list turple 字符串
list('mengfanchen')
turple('mengfanchen')
sorted() #排序方法
enumerate() #轉為元組
a=[1,2,3,4,5,6,7]
b=[3,5,7,4,8]
list(zip(a,b))=[(1,3),(2,5),(3,7),(4,4),(5,8)]# 嗯應該有用
函數:
明明規則首字母大寫MengFanChen()
函數文檔:
def MengFanChen('name', 'age'):
'這是一個例子'
print('this is mengfanchen!')
MengFanChen.__doc__就會返回上面的'這是一個例子'
關鍵字參數
MengFanChen(name = 'mengfanchen', age='17')
默認參數
收集參數
def test(*params):
print('hahaha',len(params)
def test(**kwargs):
for key in kwargs:
print "another keyword arg: %s: %s" % (key, kwargs[key])
內嵌函數和閉包:
count = 5
def MyFun():
global count
count=10
print(count) #全局變量被修改global關鍵字
def FunX(x):
def FunY(y):
return x*y
return FunY
FunX(5)(8) ->40 #FunY即為一個閉包
i = FunX(5)
type(i) -> function #即為FunY
def Fun1():
x = 5
def Fun2():
nonlocal x
x *= x
return x
return Fun2() #nonlocal關鍵字可使Fun2()使用外部變量x 或者使用x[]因為不會被當作局部變量
lambda(匿名函數):
g= lamda x : 2*x+1
print(g(5)) #lamda省下定義函數的過程
filter:過濾
list(filter(None , [1,0,Falsr,True]))
->[1,True] #默認過濾出True類型
temp =range(10)
def odd(x):
return x%2
print(list(filter(odd, temp)))
->[1,3,5,7,9] #仔細想想是怎么求奇數的
用lambda實現上述例子
list(filter(lambda x : x%2, range(10))) #很強
map:映射
list(map(lambda x : x*2, range(10)))
[0,2,4,6,8,10,12,14,16,18] #map也有點有用
遞歸:
import sys
sys.setrecursionlimit(100000) #設置遞歸深度
字典與集合:
dict1 = dict.fromkeys([1,2,3,4,5], 'mengfanchen')
{1: 'mengfanchen', 2: 'mengfanchen', 3: 'mengfanchen', 4: 'mengfanchen', 5: 'mengfanchen'}
6 in dict1 ->False
set:唯一&無序
num = [1,2,3,4,5,5,6]
num = list(set(num)) -> [1,2,3,4,5,6]
frozenset:不可變集合
標准讀入文件方式:
for each_line in f:
Print(each_line) #官方文檔推薦形式
模塊是一個包含所有函數和變量的文件.py文件可引入可使用。
os模塊
函數名 |
使用方法 |
getcwd() |
返回當前工作目錄 |
chdir(path) |
改變工作目錄 |
listdir(path='.') |
列舉指定目錄中的文件名('.'表示當前目錄,'..'表示上一級目錄) |
mkdir(path) |
創建單層目錄,如該目錄已存在拋出異常 |
makedirs(path) |
遞歸創建多層目錄,如該目錄已存在拋出異常,注意:'E:\\a\\b'和'E:\\a\\c'並不會沖突 |
remove(path) |
刪除文件 |
rmdir(path) |
刪除單層目錄,如該目錄非空則拋出異常 |
removedirs(path) |
遞歸刪除目錄,從子目錄到父目錄逐層嘗試刪除,遇到目錄非空則拋出異常 |
rename(old, new) |
將文件old重命名為new |
system(command) |
運行系統的shell命令 |
walk(top) |
遍歷top路徑以下所有的子目錄,返回一個三元組:(路徑, [包含目錄], [包含文件]) |
以下是支持路徑操作中常用到的一些定義,支持所有平台 |
|
os.curdir |
指代當前目錄('.') |
os.pardir |
指代上一級目錄('..') |
os.sep |
輸出操作系統特定的路徑分隔符(Win下為'\\',Linux下為'/') |
os.linesep |
當前平台使用的行終止符(Win下為'\r\n',Linux下為'\n') |
os.name |
指代當前使用的操作系統(包括:'posix', 'nt', 'mac', 'os2', 'ce', 'java') |
os.path模塊中關於路徑常用的函數使用方法
函數名 |
使用方法 |
basename(path) |
去掉目錄路徑,單獨返回文件名 |
dirname(path) |
去掉文件名,單獨返回目錄路徑 |
join(path1[, path2[, ...]]) |
將path1, path2各部分組合成一個路徑名 |
split(path) |
分割文件名與路徑,返回(f_path, f_name)元組。如果完全使用目錄,它也會將最后一個目錄作為文件名分離,且不會判斷文件或者目錄是否存在 |
splitext(path) |
分離文件名與擴展名,返回(f_name, f_extension)元組 |
getsize(file) |
返回指定文件的尺寸,單位是字節 |
getatime(file) |
返回指定文件最近的訪問時間(浮點型秒數,可用time模塊的gmtime()或localtime()函數換算) |
getctime(file) |
返回指定文件的創建時間(浮點型秒數,可用time模塊的gmtime()或localtime()函數換算) |
getmtime(file) |
返回指定文件最新的修改時間(浮點型秒數,可用time模塊的gmtime()或localtime()函數換算) |
以下為函數返回 True 或 False |
|
exists(path) |
判斷指定路徑(目錄或文件)是否存在 |
isabs(path) |
判斷指定路徑是否為絕對路徑 |
isdir(path) |
判斷指定路徑是否存在且是一個目錄 |
isfile(path) |
判斷指定路徑是否存在且是一個文件 |
islink(path) |
判斷指定路徑是否存在且是一個符號鏈接 |
ismount(path) |
判斷指定路徑是否存在且是一個掛載點 |
samefile(path1, paht2) |
判斷path1和path2兩個路徑是否指向同一個文件 |
Pickle模塊(對象,二進制互相轉換)
Temp = [1,2,3,4,5]
Pickle_file = open(‘temp.pkl’, ‘wb’)
Pickle.dump(temp, pickle_file)
Pickle.close
Pickle_file = open(‘temp.pkl’, ‘rb’) #read binary
Temp = pickle.load(pickle_file)
異常處理:
幾個語句,try catch finally raise
else(try后面可以加else不出錯則執行else語句)
with(可以詳細看一下,感覺很高端)
AssertionError |
斷言語句(assert)失敗 |
AttributeError |
嘗試訪問未知的對象屬性 |
EOFError |
用戶輸入文件末尾標志EOF(Ctrl+d) |
FloatingPointError |
浮點計算錯誤 |
GeneratorExit |
generator.close()方法被調用的時候 |
ImportError |
導入模塊失敗的時候 |
IndexError |
索引超出序列的范圍 |
KeyError |
字典中查找一個不存在的關鍵字 |
KeyboardInterrupt |
用戶輸入中斷鍵(Ctrl+c) |
MemoryError |
內存溢出(可通過刪除對象釋放內存) |
NameError |
嘗試訪問一個不存在的變量 |
NotImplementedError |
尚未實現的方法 |
OSError |
操作系統產生的異常(例如打開一個不存在的文件) |
OverflowError |
數值運算超出最大限制 |
ReferenceError |
弱引用(weak reference)試圖訪問一個已經被垃圾回收機制回收了的對象 |
RuntimeError |
一般的運行時錯誤 |
StopIteration |
迭代器沒有更多的值 |
SyntaxError |
Python的語法錯誤 |
IndentationError |
縮進錯誤 |
TabError |
Tab和空格混合使用 |
SystemError |
Python編譯器系統錯誤 |
SystemExit |
Python編譯器進程被關閉 |
TypeError |
不同類型間的無效操作 |
UnboundLocalError |
訪問一個未初始化的本地變量(NameError的子類) |
UnicodeError |
Unicode相關的錯誤(ValueError的子類) |
UnicodeEncodeError |
Unicode編碼時的錯誤(UnicodeError的子類) |
UnicodeDecodeError |
Unicode解碼時的錯誤(UnicodeError的子類) |
UnicodeTranslateError |
Unicode轉換時的錯誤(UnicodeError的子類) |
ValueError |
傳入無效的參數 |
ZeroDivisionError |
除數為零 |
內置異常類層次結構
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- ArithmeticError
| +-- FloatingPointError
| +-- OverflowError
| +-- ZeroDivisionError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
+-- LookupError
| +-- IndexError
| +-- KeyError
+-- MemoryError
+-- NameError
| +-- UnboundLocalError
+-- OSError
| +-- BlockingIOError
| +-- ChildProcessError
| +-- ConnectionError
| | +-- BrokenPipeError
| | +-- ConnectionAbortedError
| | +-- ConnectionRefusedError
| | +-- ConnectionResetError
| +-- FileExistsError
| +-- FileNotFoundError
| +-- InterruptedError
| +-- IsADirectoryError
| +-- NotADirectoryError
| +-- PermissionError
| +-- ProcessLookupError
| +-- TimeoutError
+-- ReferenceError
+-- RuntimeError
| +-- NotImplementedError
+-- SyntaxError
| +-- IndentationError
| +-- TabError
+-- SystemError
+-- TypeError
+-- ValueError
| +-- UnicodeError
| +-- UnicodeDecodeError
| +-- UnicodeEncodeError
| +-- UnicodeTranslateError
+-- Warning
+-- DeprecationWarning
+-- PendingDeprecationWarning
+-- RuntimeWarning
+-- SyntaxWarning
+-- UserWarning
+-- FutureWarning
+-- ImportWarning
+-- UnicodeWarning
+-- BytesWarning
+-- ResourceWarning
Easygui
繼承:
Class mylist(list):
實現了繼承
多態
Python的魔法方法:
__init__(self) 構造方法
函數或變量名前加上兩個’_’就會變成私有,偽私有。
class person():
__name = ‘mengfanchen’
p.__name不能調用,但是p._person__name就可以調用。
Python中也可以進行方法重寫。
注意__init__方法也會被重寫,按上面的方法寫可以繼承父類的屬性。
Python可以進行多重繼承。
盡量避免使用
__dict__方法可以顯示對象的所有屬性以及方法。
BIF:
Hasattr(),Getattr(),setattr(),delattr()
Property()方法,能夠將對一個屬性的操作集合到一個屬性上。
如上圖,del(c1.x)就可以調用delSize()將size屬性刪除。
構造和析構
魔法方法:
__init__
這里面的__new__一般不需要重寫但是當類繼承自不可變類型時(及不能進行__init__)可進行重寫,必須要有返回值。
__del__方法,當對象被銷毀時調用。
工廠函數:
如果想要類對象可以用print輸出,需要重寫__str__方法
如果想要直接得到類對象的值需要重寫__repr__方法
通過屬性調用屬性,這個很有用啊。
這個是訪問屬性的時候他要先調用__getattribute__然后再是相關操作,__getattr__是當調用的屬性不存儲在的時候默認調用的方法。
Property的原理:描述符。如上
定制容器,如果容器不可變需要定義__len__()和__getitem__()方法。
如果可變則需要定義__setitem__()和__getitem()__方法。
上面的自定義容器是不可變的。
迭代器
__iter__(), __next__()兩個魔法方法
生成器
Yield生成一個迭代器
關於yield的高級作用:http://bbs.fishc.com/thread-56023-1-3.html
模塊:
Already know.