1. 程式人生 > >python完全學習筆記

python完全學習筆記

tee lsp 般的 posix adding efi 屬性 路徑 block

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.

python完全學習筆記