# _*_ coding: utf-8 _*_
"""ç±»ååè¿ç®----ç±»ååè¿ç®----ç±»ååè¿ç®----ç±»ååè¿ç®----ç±»ååè¿ç®----ç±»ååè¿ç®----ç±»ååè¿ç®----ç±»ååè¿ç®----ç±»ååè¿ç®----ç±»ååè¿ç®----ç±»ååè¿ç®"""
#-- 寻æ±å¸®å©:
dir(obj) # ç®åçååºå¯¹è±¡objæå
å«çæ¹æ³åç§°ï¼è¿åä¸ä¸ªå符串å表
help(obj.func) # æ¥è¯¢obj.funcçå
·ä½ä»ç»åç¨æ³
#-- æµè¯ç±»åçä¸ç§æ¹æ³ï¼æ¨è第ä¸ç§
if type(L) == type([]): print("L is list")
if type(L) == list: print("L is list")
if isinstance(L, list): print("L is list")
#-- Pythonæ°æ®ç±»åï¼åå¸ç±»åãä¸å¯åå¸ç±»å
# åå¸ç±»åï¼å³å¨åå°ä¸è½æ¹åçåéç±»åï¼ä¸å¯åç±»åãå¯å©ç¨hash彿°æ¥çå
¶hashå¼ï¼ä¹å¯ä»¥ä½ä¸ºåå
¸çkey
"æ°åç±»åï¼int, float, decimal.Decimal, fractions.Fraction, complex"
"å符串类åï¼str, bytes"
"å
ç»ï¼tuple"
"å»ç»éåï¼frozenset"
"å¸å°ç±»åï¼True, False"
"None"
# ä¸å¯hashç±»åï¼åå°å¯åç±»åï¼listãdictåsetãå®ä»¬ä¸å¯ä»¥ä½ä¸ºåå
¸çkeyã
#-- æ°å常é
1234, -1234, 0, 999999999 # æ´æ°
1.23, 1., 3.14e-10, 4E210, 4.0e+210 # æµ®ç¹æ°
0o177, 0x9ff, 0X9FF, 0b101010 # å
«è¿å¶ãåå
è¿å¶ãäºè¿å¶æ°å
3+4j, 3.0+4.0j, 3J # 夿°å¸¸éï¼ä¹å¯ä»¥ç¨complex(real, image)æ¥å建
hex(I), oct(I), bin(I) # å°åè¿å¶æ°è½¬å为åå
è¿å¶ãå
«è¿å¶ãäºè¿å¶è¡¨ç¤ºçâå符串â
int(string, base) # å°å符串转åä¸ºæ´æ°ï¼base为è¿å¶æ°
# 2.xä¸ï¼æä¸¤ç§æ´æ°ç±»åï¼ä¸è¬æ´æ°ï¼32ä½ï¼åé¿æ´æ°ï¼æ 穷精度ï¼ãå¯ä»¥ç¨læLç»å°¾ï¼è¿«ä½¿ä¸è¬æ´æ°æä¸ºé¿æ´æ°
float('inf'), float('-inf'), float('nan') # æ 穷大, æ ç©·å°, éæ°
#-- æ°åçè¡¨è¾¾å¼æä½ç¬¦
yield x # çæå¨å½æ°åéåè®®
lambda args: expression # çæå¿å彿°
x if y else z # ä¸å
éæ©è¡¨è¾¾å¼
x and y, x or y, not x # é»è¾ä¸ãé»è¾æãé»è¾é
x in y, x not in y # æå对象æµè¯
x is y, x is not y # 对象å®ä½æµè¯
xy, x>=y, x==y, x!=y # 大尿¯è¾ï¼éååéæè¶
éå¼ç¸çæ§æä½ç¬¦
1 < a < 3 # Pythonä¸å
许è¿ç»æ¯è¾
x|y, x&y, x^y # 使ãä½ä¸ãä½å¼æ
x<>y # 使ä½ï¼x左移ãå³ç§»yä½
+, -, *, /, //, %, ** # ç餿³ãfloor餿³ï¼è¿åä¸å¤§äºç餿³ç»æçæ´æ°å¼ãåä½ãå¹è¿ç®
-x, +x, ~x # ä¸å
åæ³ãè¯å«ãæä½æ±è¡¥ï¼ååï¼
x[i], x[i:j:k] # ç´¢å¼ãåçãè°ç¨
int(3.14), float(3) # 强å¶ç±»å转æ¢
#-- æ´æ°å¯ä»¥å©ç¨bit_length彿°æµè¯æå ç使°
a = 1; a.bit_length() # 1
a = 1024; a.bit_length() # 11
#-- repråstræ¾ç¤ºæ ¼å¼çåºå«
"""
repræ ¼å¼ï¼é»è®¤çäº¤äºæ¨¡å¼åæ¾ï¼äº§ççç»æçèµ·æ¥å®ä»¬å°±åæ¯ä»£ç ã
stræ ¼å¼ï¼æå°è¯å¥ï¼è½¬åæä¸ç§å¯¹ç¨æ·æ´å åå¥½çæ ¼å¼ã
"""
#-- æ°åç¸å
³ç模å
# math模å
# Decimal模åï¼å°æ°æ¨¡å
import decimal
from decimal import Decimal
Decimal("0.01") + Decimal("0.02") # è¿åDecimal("0.03")
decimal.getcontext().prec = 4 # 设置å
¨å±ç²¾åº¦ä¸º4 å³å°æ°ç¹åè¾¹4ä½
# Fraction模åï¼åæ°æ¨¡å
from fractions import Fraction
x = Fraction(4, 6) # åæ°ç±»å 4/6
x = Fraction("0.25") # åæ°ç±»å 1/4 æ¥æ¶å符串类åçåæ°
#-- éåset
"""
setæ¯ä¸ä¸ªæ åºä¸éå¤å
ç´ é, åºæ¬åè½å
æ¬å
³ç³»æµè¯åæ¶é¤éå¤å
ç´ ã
setæ¯æunion(èå), intersection(交), difference(å·®)åsysmmetric difference(对称差é)çæ°å¦è¿ç®ã
setæ¯æx in set, len(set), for x in setã
setä¸è®°å½å
ç´ ä½ç½®æè
æå
¥ç¹, å æ¤ä¸æ¯æindexing, slicing, æå
¶å®ç±»åºåçæä½
"""
s = set([3,5,9,10]) # å建ä¸ä¸ªæ°å¼éåï¼è¿å{3, 5, 9, 10}
t = set("Hello") # å建ä¸ä¸ªå¯ä¸å符çéåè¿å{}
a = t | s; t.union(s) # t å sçå¹¶é
b = t & s; t.intersection(s) # t å sç交é
c = t â s; t.difference(s) # æ±å·®éï¼é¡¹å¨tä¸, ä½ä¸å¨sä¸ï¼
d = t ^ s; t.symmetric_difference(s) # 对称差éï¼é¡¹å¨tæsä¸, ä½ä¸ä¼åæ¶åºç°å¨äºè
ä¸ï¼
t.add('x'); t.remove('H') # å¢å /å é¤ä¸ä¸ªitem
t.update([10,37,42]) # å©ç¨[......]æ´æ°séå
x in s, x not in s # éå䏿¯å¦åå¨æä¸ªå¼
s.issubset(t); s.issuperset(t); s.copy(); s.discard(x); s.clear()
{x**2 for x in [1, 2, 3, 4]} # éåè§£æï¼ç»æï¼{16, 1, 4, 9}
{x for x in 'spam'} # éåè§£æï¼ç»æï¼{'a', 'p', 's', 'm'}
#-- éåfrozensetï¼ä¸å¯å对象
"""
setæ¯å¯å对象ï¼å³ä¸åå¨hashå¼ï¼ä¸è½ä½ä¸ºåå
¸çé®å¼ãåæ ·çè¿ælistãtupleç
frozensetæ¯ä¸å¯å对象ï¼å³åå¨hashå¼ï¼å¯ä½ä¸ºåå
¸çé®å¼
frozenset对象没æaddãremoveçæ¹æ³ï¼ä½æunion/intersection/differenceçæ¹æ³
"""
a = set([1, 2, 3])
b = set()
b.add(a) # error: setæ¯ä¸å¯åå¸ç±»å
b.add(frozenset(a)) # okï¼å°setå为frozensetï¼å¯åå¸
#-- å¸å°ç±»åbool
type(True) # è¿å
isinstance(False, int) # boolç±»åå±äºæ´å½¢ï¼æä»¥è¿åTrue
True == 1; True is 1 # è¾åº(True, False)
#-- å¨æç±»åç®ä»
"""
åéåéè¿å¼ç¨ï¼æå对象ã
Pythonä¸çâç±»åâå±äºå¯¹è±¡ï¼è䏿¯åéï¼æ¯ä¸ªå¯¹è±¡é½å
嫿头é¨ä¿¡æ¯ï¼æ¯å¦"ç±»åæ ç¤ºç¬¦" "å¼ç¨è®¡æ°å¨"ç
"""
#å
±äº«å¼ç¨åå¨åå¤ä¿®æ¹ï¼å¯¹äºå¯å对象ï¼è¦æ³¨æå°½éä¸è¦å
±äº«å¼ç¨ï¼
#å
±äº«å¼ç¨åç¸çæµè¯ï¼
L = [1], M = [1], L is M # è¿åFalse
L = M = [1, 2, 3], L is M # è¿åTrueï¼å
±äº«å¼ç¨
#å¢å¼ºèµå¼åå
±äº«å¼ç¨ï¼æ®é+å·ä¼çææ°ç对象ï¼èå¢å¼ºèµå¼+=ä¼å¨åå¤ä¿®æ¹
L = M = [1, 2]
L = L + [3, 4] # L = [1, 2, 3, 4], M = [1, 2]
L += [3, 4] # L = [1, 2, 3, 4], M = [1, 2, 3, 4]
#-- 常è§å符串常éå表达å¼
S = '' # 空å符串
S = "spamâs" # åå¼å·ååå¼å·ç¸å
S = "s\np\ta\x00m" # 转ä¹å符
S = """spam""" # ä¸éå¼å·å符串ï¼ä¸è¬ç¨äºå½æ°è¯´æ
S = r'\temp' # Rawå符串ï¼ä¸ä¼è¿è¡è½¬ä¹ï¼æå¶è½¬ä¹
S = b'Spam' # Python3ä¸çåèå符串
S = u'spam' # Python2.6ä¸çUnicodeå符串
s1+s2, s1*3, s[i], s[i:j], len(s) # å符串æä½
'a %s parrot' % 'kind' # åç¬¦ä¸²æ ¼å¼å表达å¼
'a {0} parrot'.format('kind') # åç¬¦ä¸²æ ¼å¼åæ¹æ³
for x in s: print(x) # å符串è¿ä»£ï¼æåå
³ç³»
[x*2 for x in s] # å符串å表解æ
','.join(['a', 'b', 'c']) # å符串è¾åºï¼ç»æï¼a,b,c
#-- å
ç½®strå¤ç彿°ï¼
str1 = "stringobject"
str1.upper(); str1.lower(); str1.swapcase(); str1.capitalize(); str1.title() # å
¨é¨å¤§åï¼å
¨é¨å°åã大å°å转æ¢ï¼é¦åæ¯å¤§åï¼æ¯ä¸ªåè¯çé¦åæ¯é½å¤§å
str1.ljust(width) # è·ååºå®é¿åº¦ï¼å·¦å¯¹é½ï¼å³è¾¹ä¸å¤ç¨ç©ºæ ¼è¡¥é½
str1.rjust(width) # è·ååºå®é¿åº¦ï¼å³å¯¹é½ï¼å·¦è¾¹ä¸å¤ç¨ç©ºæ ¼è¡¥é½
str1.center(width) # è·ååºå®é¿åº¦ï¼ä¸é´å¯¹é½ï¼ä¸¤è¾¹ä¸å¤ç¨ç©ºæ ¼è¡¥é½
str1.zfill(width) # è·ååºå®é¿åº¦ï¼å³å¯¹é½ï¼å·¦è¾¹ä¸è¶³ç¨0è¡¥é½
str1.find('t',start,end) # æ¥æ¾å符串ï¼å¯ä»¥æå®èµ·å§åç»æä½ç½®æç´¢
str1.rfind('t') # ä»å³è¾¹å¼å§æ¥æ¾å符串
str1.count('t') # æ¥æ¾å符串åºç°ç次æ°
#ä¸é¢æææ¹æ³é½å¯ç¨index代æ¿ï¼ä¸åçæ¯ä½¿ç¨indexæ¥æ¾ä¸å°ä¼æå¼å¸¸ï¼èfindè¿å-1
str1.replace('old','new') # æ¿æ¢å½æ°ï¼æ¿æ¢old为newï¼åæ°ä¸å¯ä»¥æå®maxReplaceTimesï¼å³æ¿æ¢æå®æ¬¡æ°çold为new
str1.strip(); str1.lstrip(); str1.rstrip(); str1.strip('d'); str1.lstrip('d'); str1.rstrip('d')
str1.startswith('start') # æ¯å¦ä»¥startå¼å¤´
str1.endswith('end') # æ¯å¦ä»¥endç»å°¾
str1.isalnum(); str1.isalpha(); str1.isdigit(); str1.islower(); str1.isupper() # 夿å符串æ¯å¦å
¨ä¸ºåç¬¦ãæ°åã大åãå°å
#-- ä¸éå¼å·ç¼åå¤è¡å符串åï¼å¹¶ä¸å¨ä»£ç æè¡å¤åµå
¥æ¢è¡å符\n
mantra = """hello world
hello python
hello my friend"""
# mantra为"""hello world \n hello python \n hello my friend"""
#-- ç´¢å¼ååçï¼
S[0], S[len(S)â1], S[-1] # ç´¢å¼
S[1:3], S[1:], S[:-1], S[1:10:2] # åçï¼ç¬¬ä¸ä¸ªåæ°æå®æ¥é¿
#-- å符串转æ¢å·¥å
·ï¼
int('42'), str(42) # è¿å(42, '42')
float('4.13'), str(4.13) # è¿å(4.13, '4.13')
ord('s'), chr(115) # è¿å(115, 's')
int('1001', 2) # å°å符串ä½ä¸ºäºè¿å¶æ°åï¼è½¬å为æ°åï¼è¿å9
bin(13), oct(13), hex(13) # å°æ´æ°è½¬å为äºè¿å¶/å
«è¿å¶/åå
è¿å¶å符串ï¼è¿å('1001', '0o15', '0xd')
#-- å¦ç±»åç¬¦ä¸²è¿æ¥
name = "wang" "hong" # åè¡ï¼name = "wanghong"
name = "wang" \
"hong" # å¤è¡ï¼name = "wanghong"
#-- Pythonä¸çåç¬¦ä¸²æ ¼å¼åå®ç°1--åç¬¦ä¸²æ ¼å¼å表达å¼
"""
åºäºCè¯è¨ç'print'模åï¼å¹¶ä¸å¨å¤§å¤æ°çç°æçè¯è¨ä¸ä½¿ç¨ã
éç¨ç»æï¼%[(name)][flag][width].[precision]typecode
"""
"this is %d %s bird" % (1, 'dead') # ä¸è¬çæ ¼å¼å表达å¼
"%s---%s---%s" % (42, 3.14, [1, 2, 3]) # å符串è¾åºï¼'42---3.14---[1, 2, 3]'
"%d...%6d...%-6d...%06d" % (1234, 1234, 1234, 1234) # 坹齿¹å¼åå¡«å
ï¼"1234... 1234...1234 ...001234"
x = 1.23456789
"%e | %f | %g" % (x, x, x) # 坹齿¹å¼ï¼"1.234568e+00 | 1.234568 | 1.23457"
"%6.2f*%-6.2f*%06.2f*%+6.2f" % (x, x, x, x) # 坹齿¹å¼ï¼' 1.23*1.23 *001.23* +1.23'
"%(name1)d---%(name2)s" % {"name1":23, "name2":"value2"} # åºäºåå
¸çæ ¼å¼å表达å¼
"%(name)s is %(age)d" % vars() # vars()彿°è°ç¨è¿åä¸ä¸ªåå
¸ï¼å
å«äºæææ¬å½æ°è°ç¨æ¶åå¨çåé
#-- Pythonä¸çåç¬¦ä¸²æ ¼å¼åå®ç°2--åç¬¦ä¸²æ ¼å¼åè°ç¨æ¹æ³
# æ®éè°ç¨
"{0}, {1} and {2}".format('spam', 'ham', 'eggs') # åºäºä½ç½®çè°ç¨
"{motto} and {pork}".format(motto = 'spam', pork = 'ham') # åºäºKeyçè°ç¨
"{motto} and {0}".format('ham', motto = 'spam') # æ··åè°ç¨
# æ·»å é® å±æ§ åç§»é (import sys)
"my {1[spam]} runs {0.platform}".format(sys, {'spam':'laptop'}) # åºäºä½ç½®çé®å屿§
"{config[spam]} {sys.platform}".format(sys = sys, config = {'spam':'laptop'}) # åºäºKeyçé®å屿§
"first = {0[0]}, second = {0[1]}".format(['A', 'B', 'C']) # åºäºä½ç½®çåç§»é
# å
·ä½æ ¼å¼å
"{0:e}, {1:.3e}, {2:g}".format(3.14159, 3.14159, 3.14159) # è¾åº'3.141590e+00, 3.142e+00, 3.14159'
"{fieldname:format_spec}".format(......)
# 说æ:
"""
fieldnameæ¯æå®åæ°çä¸ä¸ªæ°åæå
³é®å, åè¾¹å¯è·å¯éç".name"æ"[index]"æåå¼ç¨
format_spec ::= [[fill]align][sign][#][0][width][,][.precision][type]
fill ::= #å¡«å
å符
align ::= "<" | ">" | "=" | "^" #坹齿¹å¼
sign ::= "+" | "-" | " " #符å·è¯´æ
width ::= integer #å符串宽度
precision ::= integer #æµ®ç¹æ°ç²¾åº¦
type ::= "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"
"""
# ä¾å:
'={0:10} = {1:10}'.format('spam', 123.456) # è¾åº'=spam = 123.456'
'={0:>10}='.format('test') # è¾åº'= test='
'={0:<10}='.format('test') # è¾åº'=test ='
'={0:^10}='.format('test') # è¾åº'= test ='
'{0:X}, {1:o}, {2:b}'.format(255, 255, 255) # è¾åº'FF, 377, 11111111'
'My name is {0:{1}}.'.format('Fred', 8) # è¾åº'My name is Fred .' 卿æå®åæ°
#-- 常ç¨å表常éåæä½
L = [[1, 2], 'string', {}] # åµå¥å表
L = list('spam') # å表åå§å
L = list(range(0, 4)) # å表åå§å
list(map(ord, 'spam')) # å表解æ
len(L) # æ±å表é¿åº¦
L.count(value) # æ±åè¡¨ä¸æä¸ªå¼ç个æ°
L.append(obj) # åå表ç尾鍿·»å æ°æ®ï¼æ¯å¦append(2)ï¼æ·»å å
ç´ 2
L.insert(index, obj) # åå表çæå®indexä½ç½®æ·»å æ°æ®ï¼indexåå
¶ä¹åçæ°æ®åç§»
L.extend(interable) # éè¿æ·»å iterableä¸çå
ç´ æ¥æ©å±åè¡¨ï¼æ¯å¦extend([2])ï¼æ·»å å
ç´ 2ï¼æ³¨æåappendçåºå«
L.index(value, [start, [stop]]) # è¿åå表ä¸å¼valueç第ä¸ä¸ªç´¢å¼
L.pop([index]) # å é¤å¹¶è¿åindexå¤çå
ç´ ï¼é»è®¤ä¸ºå é¤å¹¶è¿åæåä¸ä¸ªå
ç´
L.remove(value) # å é¤å表ä¸çvalueå¼ï¼åªå é¤ç¬¬ä¸æ¬¡åºç°çvalueçå¼
L.reverse() # å转å表
L.sort(cmp=None, key=None, reverse=False) # æåºå表
a = [1, 2, 3], b = a[10:] # 注æï¼è¿éä¸ä¼å¼åIndexErrorå¼å¸¸ï¼åªä¼è¿åä¸ä¸ªç©ºçå表[]
a = [], a += [1] # è¿éå®å¨åæå表çåºç¡ä¸è¿è¡æä½ï¼å³å表çidæ²¡ææ¹å
a = [], a = a + [1] # è¿éæåçaè¦æå»ºä¸ä¸ªæ°çå表ï¼å³açidåçäºåå
#-- ç¨åçæ¥å é¤åºåçæä¸æ®µ
a = [1, 2, 3, 4, 5, 6, 7]
a[1:4] = [] # a = [1, 5, 6, 7]
a = [0, 1, 2, 3, 4, 5, 6, 7]
del a[::2] # å»é¤å¶æ°é¡¹(å¶æ°ç´¢å¼ç)ï¼a = [1, 3, 5, 7]
#-- 常ç¨åå
¸å¸¸éåæä½
D = {}
D = {'spam':2, 'tol':{'ham':1}} # åµå¥åå
¸
D = dict.fromkeys(['s', 'd'], 8) # {'d': 8, 's': 8}
D = dict(name = 'tom', age = 12) # {'age': 12, 'name': 'tom'}
D = dict([('name', 'tom'), ('age', 12)]) # {'age': 12, 'name': 'tom'}
D = dict(zip(['name', 'age'], ['tom', 12])) # {'age': 12, 'name': 'tom'}
D.keys(); D.values(); D.items() # åå
¸é®ãå¼ä»¥åé®å¼å¯¹
D.get(key, default) # get彿°
D.update(D_other) # åå¹¶åå
¸ï¼å¦æåå¨ç¸åçé®å¼ï¼D_otherçæ°æ®ä¼è¦çæDçæ°æ®
D.pop(key, [D]) # å é¤åå
¸ä¸é®å¼ä¸ºkeyç项ï¼è¿åé®å¼ä¸ºkeyçå¼ï¼å¦æä¸åå¨ï¼è¿åé»è®¤å¼Dï¼å¦åå¼å¸¸
D.popitem() # popåå
¸ä¸çä¸é¡¹ï¼ä¸ä¸ªé®å¼å¯¹ï¼
D.setdefault(k[, d]) # 设置D䏿ä¸é¡¹çé»è®¤å¼ã妿kåå¨ï¼åè¿åD[k]ï¼å¦å设置D[k]=dï¼åæ¶è¿åD[k]ã
del D # å é¤åå
¸
del D['key'] # å é¤åå
¸çæä¸é¡¹
if key in D: if key not in D: # æµè¯åå
¸é®æ¯å¦åå¨
# åå
¸æ³¨æäºé¡¹ï¼ï¼1ï¼å¯¹æ°ç´¢å¼èµå¼ä¼æ·»å ä¸é¡¹ï¼2ï¼åå
¸é®ä¸ä¸å®é徿¯å符串ï¼ä¹å¯ä»¥ä¸ºä»»ä½çä¸å¯å对象
#-- åå
¸è§£æ
D = {k:8 for k in ['s', 'd']} # {'d': 8, 's': 8}
D = {k:v for (k, v) in zip(['name', 'age'], ['tom', 12])}
#-- åå
¸çç¹æ®æ¹æ³__missing__ï¼å½æ¥æ¾æ¾ä¸å°keyæ¶ï¼ä¼æ§è¡è¯¥æ¹æ³
class Dict(dict):
def __missing__(self, key):
self[key] = []
return self[key]
dct = Dict()
dct["foo"].append(1) # è¿æç¹ç±»ä¼¼äºcollections.defalutdict
dct["foo"] # [1]
#-- å
ç»åå表çå¯ä¸åºå«å¨äºå
ç»æ¯ä¸å¯å对象ï¼å表æ¶å¯å对象
a = [1, 2, 3] # a[1] = 0, OK
a = (1, 2, 3) # a[1] = 0, Error
a = ([1, 2]) # a[0][1] = 0, OK
a = [(1, 2)] # a[0][1] = 0, Error
#-- å
ç»çç¹æ®è¯æ³: éå·å忬å·
D = (12) # æ¤æ¶D为ä¸ä¸ªæ´æ° å³D = 12
D = (12, ) # æ¤æ¶D为ä¸ä¸ªå
ç» å³D = (12, )
#-- æä»¶åºæ¬æä½
output = open(r'C:\spam', 'w') # æå¼è¾åºæä»¶ï¼ç¨äºå
input = open('data', 'r') # æå¼è¾å
¥æä»¶ï¼ç¨äºè¯»ãæå¼çæ¹å¼å¯ä»¥ä¸º'w', 'r', 'a', 'wb', 'rb', 'ab'ç
fp.read([size]) # size为读åçé¿åº¦ï¼ä»¥byte为åä½
fp.readline([size]) # 读ä¸è¡ï¼å¦æå®ä¹äºsizeï¼æå¯è½è¿åçåªæ¯ä¸è¡çä¸é¨å
fp.readlines([size]) # ææä»¶æ¯ä¸è¡ä½ä¸ºä¸ä¸ªlistçä¸ä¸ªæåï¼å¹¶è¿åè¿ä¸ªlistãå
¶å®å®çå
鍿¯éè¿å¾ªç¯è°ç¨readline()æ¥å®ç°çã妿æä¾sizeåæ°ï¼sizeæ¯è¡¨ç¤ºè¯»åå
å®¹çæ»é¿ã
fp.readable() # æ¯å¦å¯è¯»
fp.write(str) # æstråå°æä»¶ä¸ï¼write()å¹¶ä¸ä¼å¨stråå ä¸ä¸ä¸ªæ¢è¡ç¬¦
fp.writelines(seq) # æseqçå
容å
¨é¨åå°æä»¶ä¸(å¤è¡ä¸æ¬¡æ§åå
¥)
fp.writeable() # æ¯å¦å¯å
fp.close() # å
³éæä»¶ã
fp.flush() # æç¼å²åºçå
容åå
¥ç¡¬ç
fp.fileno() # è¿åä¸ä¸ªé¿æ´åçâæä»¶æ ç¾â
fp.isatty() # æä»¶æ¯å¦æ¯ä¸ä¸ªç»ç«¯è®¾å¤æä»¶ï¼unixç³»ç»ä¸çï¼
fp.tell() # è¿åæä»¶æä½æ è®°çå½åä½ç½®ï¼ä»¥æä»¶çå¼å¤´ä¸ºåç¹
fp.next() # è¿åä¸ä¸è¡ï¼å¹¶å°æä»¶æä½æ è®°ä½ç§»å°ä¸ä¸è¡ãæä¸ä¸ªfileç¨äºfor ⦠in fileè¿æ ·çè¯å¥æ¶ï¼å°±æ¯è°ç¨next()彿°æ¥å®ç°éåçã
fp.seek(offset[,whence]) # å°æä»¶ææä½æ è®°ç§»å°offsetçä½ç½®ãwhenceå¯ä»¥ä¸º0表示ä»å¤´å¼å§è®¡ç®ï¼1表示以å½åä½ç½®ä¸ºåç¹è®¡ç®ã2表示以æä»¶æ«å°¾ä¸ºåç¹è¿è¡è®¡ç®ã
fp.seekable() # æ¯å¦å¯ä»¥seek
fp.truncate([size]) # ææä»¶è£æè§å®ç大å°ï¼é»è®¤çæ¯è£å°å½åæä»¶æä½æ è®°çä½ç½®ã
for line in open('data'):
print(line) # 使ç¨forè¯å¥ï¼æ¯è¾éç¨äºæå¼æ¯è¾å¤§çæä»¶
open('f.txt', encoding = 'latin-1') # Python3.x Unicodeææ¬æä»¶
open('f.bin', 'rb') # Python3.x äºè¿å¶bytesæä»¶
# æä»¶å¯¹è±¡è¿æç¸åºç屿§ï¼buffer closed encoding errors line_buffering name newlinesç
#-- å
¶ä»
# Pythonä¸ççåå¼å«ä¹ï¼1. æ°å妿éé¶ï¼å为çï¼0为åã 2. å
¶ä»å¯¹è±¡å¦æé空ï¼å为ç
# é常æä¹ä¸çç±»ååç±»ï¼1. æ°åãåºåãæ å°ã 2. å¯åç±»ååä¸å¯åç±»å
"""è¯æ³åè¯å¥----è¯æ³åè¯å¥----è¯æ³åè¯å¥----è¯æ³åè¯å¥----è¯æ³åè¯å¥----è¯æ³åè¯å¥----è¯æ³åè¯å¥----è¯æ³åè¯å¥----è¯æ³åè¯å¥----è¯æ³åè¯å¥----è¯æ³åè¯å¥"""
#-- èµå¼è¯å¥çå½¢å¼
spam = 'spam' # åºæ¬å½¢å¼
spam, ham = 'spam', 'ham' # å
ç»èµå¼å½¢å¼
[spam, ham] = ['s', 'h'] # å表èµå¼å½¢å¼
a, b, c, d = 'abcd' # åºåèµå¼å½¢å¼
a, *b, c = 'spam' # åºåè§£å
å½¢å¼ï¼Python3.x䏿æï¼
spam = ham = 'no' # å¤ç®æ èµå¼è¿ç®ï¼æ¶åå°å
±äº«å¼ç¨
spam += 42 # å¢å¼ºèµå¼ï¼æ¶åå°å
±äº«å¼ç¨
#-- åºåèµå¼ åºåè§£å
[a, b, c] = (1, 2, 3) # a = 1, b = 2, c = 3
a, b, c, d = "spam" # a = 's', b = 'p'
a, b, c = range(3) # a = 0, b = 1
a, *b = [1, 2, 3, 4] # a = 1, b = [2, 3, 4]
*a, b = [1, 2, 3, 4] # a = [1, 2, 3], b = 4
a, *b, c = [1, 2, 3, 4] # a = 1, b = [2, 3], c = 4
# 带æ*æ¶ ä¼ä¼å
å¹é
*ä¹å¤çåé å¦
a, *b, c = [1, 2] # a = 1, c = 2, b = []
#-- print彿°åå
print(value, ..., sep=' ', end='\n', file=sys.stdout, flush=False)
# æµçéå®å
print('hello world') # çäºsys.stdout.write('hello world')
temp = sys.stdout # åææµçä¿å
sys.stdout = open('log.log', 'a') # æµçéå®å
print('hello world') # åå
¥å°æä»¶log.log
sys.stdout.close()
sys.stdout = temp # åææµçå¤å
#-- Pythonä¸andæoræ»æ¯è¿å对象(左边ç对象æå³è¾¹ç对象) ä¸å
·æçè·¯æ±å¼çç¹æ§
1 or 2 or 3 # è¿å 1
1 and 2 and 3 # è¿å 3
#-- if/elseä¸å
表达符ï¼ifè¯å¥å¨è¡å
ï¼
A = 1 if X else 2
A = 1 if X else (2 if Y else 3)
# ä¹å¯ä»¥ä½¿ç¨and-orè¯å¥ï¼ä¸æ¡è¯å¥å®ç°å¤ä¸ªif-elseï¼
result = (a > 20 and "big than 20" or a > 10 and "big than 10" or a > 5 and "big than 5")
#-- Pythonçwhileè¯å¥æè
forè¯å¥å¯ä»¥å¸¦elseè¯å¥ å½ç¶ä¹å¯ä»¥å¸¦continue/break/passè¯å¥
while a > 1:
anything
else:
anything
# elseè¯å¥ä¼å¨å¾ªç¯ç»æåæ§è¡ï¼é¤éå¨å¾ªç¯ä¸æ§è¡äºbreakï¼åæ ·çè¿æforè¯å¥
for i in range(5):
anything
else:
anything
#-- for循ç¯çå
ç»èµå¼
for (a, b) in [(1, 2), (3, 4)]: # æç®åçèµå¼
for ((a, b), c) in [((1, 2), 3), ((4, 5), 6)]: # èªå¨è§£å
èµå¼
for ((a, b), c) in [((1, 2), 3), ("XY", 6)]: # èªå¨è§£å
a = X, b = Y, c = 6
for (a, *b) in [(1, 2, 3), (4, 5, 6)]: # èªå¨è§£å
èµå¼
#-- å表解æè¯æ³
M = [[1,2,3], [4,5,6], [7,8,9]]
res = [sum(row) for row in M] # G = [6, 15, 24] ä¸è¬çå表解æ çæä¸ä¸ªå表
res = [c * 2 for c in 'spam'] # ['ss', 'pp', 'aa', 'mm']
res = [a * b for a in [1, 2] for b in [4, 5]] # å¤è§£æè¿ç¨ è¿å[4, 5, 8, 10]
res = [a for a in [1, 2, 3] if a < 2] # 另夿æ¡ä»¶çè§£æè¿ç¨
res = [a if a > 0 else 0 for a in [-1, 0, 1]] # 另夿æ¡ä»¶çé«çº§è§£æè¿ç¨
# 两个åè¡¨åæ¶è§£æï¼ä½¿ç¨zip彿°
for teama, teamb in zip(["Packers", "49ers"], ["Ravens", "Patriots"]):
print(teama + " vs. " + teamb)
# 带索å¼çå表解æï¼ä½¿ç¨enumerate彿°
for index, team in enumerate(["Packers", "49ers", "Ravens", "Patriots"]):
print(index, team) # è¾åº0, Packers \n 1, 49ers \n ......
#-- çæå¨è¡¨è¾¾å¼
G = (sum(row) for row in M) # 使ç¨å°æ¬å·å¯ä»¥å建æéç»æççæå¨generator object
next(G), next(G), next(G) # è¾åº(6, 15, 24)
G = {sum(row) for row in M} # G = {6, 15, 24} è§£æè¯æ³è¿å¯ä»¥çæéåååå
¸
G = {i:sum(M[i]) for i in range(3)} # G = {0: 6, 1: 15, 2: 24}
#-- ææ¡£å符串:åºç°å¨Moduleçå¼ç«¯ä»¥åå
¶ä¸å½æ°æç±»çå¼ç«¯ 使ç¨ä¸éå¼å·å符串
"""
module document
"""
def func():
"""
function document
"""
print()
class Employee:
"""
class document
"""
print()
print(func.__doc__) # è¾åºå½æ°ææ¡£å符串
print(Employee.__doc__) # è¾åºç±»çææ¡£å符串
#-- å½åæ¯ä¾:
"""
以åä¸ä¸å线å¼å¤´çåéå(_X)ä¸ä¼è¢«from module import*çè¯å¥å¯¼å
¥
ååæä¸¤ä¸ªä¸å线çåéå(__X__)æ¯ç³»ç»å®ä¹çåéåï¼å¯¹è§£éå¨æç¹æ®æä¹
以两个ä¸å线å¼å¤´ä½ä¸ä»¥ä¸å线ç»å°¾çåéå(__X)æ¯ç±»çæ¬å°(ç§æ)åé
"""
#-- å表解æ inæåå
³ç³»æµè¯ map sorted zip enumerateå
ç½®å½æ°çé½ä½¿ç¨äºè¿ä»£åè®®
'first line' in open('test.txt') # inæµè¯ è¿åTrueæFalse
list(map(str.upper, open('t'))) # mapå
ç½®å½æ°
sorted(iter([2, 5, 8, 3, 1])) # sortedå
ç½®å½æ°
list(zip([1, 2], [3, 4])) # zipå
ç½®å½æ° [(1, 3), (2, 4)]
#-- delè¯å¥: æå¨å é¤æä¸ªåé
del X
#-- è·åå表çåè¡¨çæ¹æ³:
x = [1,2,3,4,5,6]
x[:3] # å3个[1,2,3]
x[1:5] # ä¸é´4个[2,3,4,5]
x[-3:] # æå3个[4,5,6]
x[::2] # 奿°é¡¹[1,3,5]
x[1::2] # å¶æ°é¡¹[2,4,6]
#-- æå¨è¿ä»£ï¼iterånext
L = [1, 2]
I = iter(L) # I为Lçè¿ä»£å¨
I.next() # è¿å1
I.next() # è¿å2
I.next() # Error:StopIteration
#-- Pythonä¸çå¯è¿ä»£å¯¹è±¡
"""
1.rangeè¿ä»£å¨
2.mapãzipåfilterè¿ä»£å¨
3.åå
¸è§å¾è¿ä»£å¨ï¼D.keys()), D.items()ç
4.æä»¶ç±»å
"""
"""彿°è¯æ³è§å----彿°è¯æ³è§å----彿°è¯æ³è§å----彿°è¯æ³è§å----彿°è¯æ³è§å----彿°è¯æ³è§å----彿°è¯æ³è§å----彿°è¯æ³è§å----彿°è¯æ³è§å----彿°è¯æ³è§å"""
#-- 彿°ç¸å
³çè¯å¥å表达å¼
myfunc('spam') # 彿°è°ç¨
def myfunc(): # 彿°å®ä¹
return None # 彿°è¿åå¼
global a # å
¨å±åé
nonlocal x # å¨å½æ°æå
¶ä»ä½ç¨åä¸ä½¿ç¨å¤å±ï¼éå
¨å±ï¼åé
yield x # çæå¨å½æ°è¿å
lambda # å¿å彿°
#-- Python彿°åéåè§£æ:LEGBååï¼å³:
"""
local(functin) --> encloseing function locals --> global(module) --> build-in(python)
说æ:以ä¸è¾¹ç彿°makerä¸ºä¾ åç¸å¯¹äºactionèè¨ X为Local N为Encloseing
"""
#-- åµå¥å½æ°ä¸¾ä¾:å·¥å彿°
def maker(N):
def action(X):
return X ** N
return action
f = maker(2) # pass 2 to N
f(3) # 9, pass 3 to X
#-- åµå¥å½æ°ä¸¾ä¾:lambdaå®ä¾
def maker(N):
action = (lambda X: X**N)
return action
f = maker(2) # pass 2 to N
f(3) # 9, pass 3 to X
#-- nonlocalåglobalè¯å¥çåºå«
# nonlocalåºç¨äºä¸ä¸ªåµå¥ç彿°çä½ç¨åä¸çä¸ä¸ªåç§° ä¾å¦:
start = 100
def tester(start):
def nested(label):
nonlocal start # æå®start为tester彿°å
çlocalåé è䏿¯globalåéstart
print(label, start)
start += 3
return nested
# global为å
¨å±çåé å³defä¹å¤çåé
def tester(start):
def nested(label):
global start # æå®start为globalåéstart
print(label, start)
start += 3
return nested
#-- 彿°åæ°ï¼ä¸å¯ååæ°éè¿âå¼âä¼ éï¼å¯ååæ°éè¿âå¼ç¨âä¼ é
def f(a, b, c): print(a, b, c)
f(1, 2, 3) # åæ°ä½ç½®å¹é
f(1, c = 3, b = 2) # åæ°å
³é®åå¹é
def f(a, b=1, c=2): print(a, b, c)
f(1) # é»è®¤åæ°å¹é
f(1, 2) # é»è®¤åæ°å¹é
f(a = 1, c = 3) # å
³é®ååæ°åé»è®¤åæ°çæ··å
# Keyword-Onlyåæ°:åºç°å¨*argsä¹å å¿
é¡»ç¨å
³é®åè¿è¡å¹é
def keyOnly(a, *b, c): print('') # c就为keyword-onlyå¹é
å¿
须使ç¨å
³é®åc = valueå¹é
def keyOnly(a, *, b, c): ...... # b c为keyword-onlyå¹é
å¿
须使ç¨å
³é®åå¹é
def keyOnly(a, *, b = 1): ...... # bæé»è®¤å¼ æè
çç¥ æè
使ç¨å
³é®ååæ°b = value
#-- å¯ååæ°å¹é
: * å **
def f(*args): print(args) # å¨å
ç»ä¸æ¶éä¸å¹é
çä½ç½®åæ°
f(1, 2, 3) # è¾åº(1, 2, 3)
def f(**args): print(args) # å¨åå
¸ä¸æ¶éä¸å¹é
çå
³é®ååæ°
f(a = 1, b = 2) # è¾åº{'a':1, 'b':2}
def f(a, *b, **c): print(a, b, c) # 两è
æ··å使ç¨
f(1, 2, 3, x=4, y=5) # è¾åº1, (2, 3), {'x':4, 'y':5}
#-- 彿°è°ç¨æ¶çåæ°è§£å
: * å ** åå«è§£å
å
ç»ååå
¸
func(1, *(2, 3)) <==> func(1, 2, 3)
func(1, **{'c':3, 'b':2}) <==> func(1, b = 2, c = 3)
func(1, *(2, 3), **{'c':3, 'b':2}) <==> func(1, 2, 3, b = 2, c = 3)
#-- 彿°å±æ§:(èªå·±å®ä¹ç)彿°å¯ä»¥æ·»å 屿§
def func():.....
func.count = 1 # èªå®ä¹å½æ°æ·»å 屿§
print.count = 1 # Error å
ç½®å½æ°ä¸å¯ä»¥æ·»å 屿§
#-- 彿°æ³¨è§£: ç¼åå¨def头é¨è¡ 主è¦ç¨äºè¯´æåæ°èå´ãåæ°ç±»åãè¿åå¼ç±»åç
def func(a:'spam', b:(1, 10), c:float) -> int :
print(a, b, c)
func.__annotations__ # {'c':, 'b':(1, 10), 'a':'spam', 'return':}
# ç¼å注解çåæ¶ è¿æ¯å¯ä»¥ä½¿ç¨å½æ°é»è®¤å¼ 并䏿³¨è§£çä½ç½®ä½äº=å·çåè¾¹
def func(a:'spam'='a', b:(1, 10)=2, c:float=3) -> int :
print(a, b, c)
#-- å¿å彿°:lambda
f = lambda x, y, z : x + y + z # æ®éå¿å彿°ï¼ä½¿ç¨æ¹æ³f(1, 2, 3)
f = lambda x = 1, y = 1: x + y # 带é»è®¤åæ°çlambda彿°
def action(x): # åµå¥lambda彿°
return (lambda y : x + y)
f = lambda: a if xxx() else b # æ åæ°çlambda彿°ï¼ä½¿ç¨æ¹æ³f()
#-- lambda彿°ä¸map filter reduce彿°çç»å
list(map((lambda x: x + 1), [1, 2, 3])) # [2, 3, 4]
list(filter((lambda x: x > 0), range(-4, 5))) # [1, 2, 3, 4]
functools.reduce((lambda x, y: x + y), [1, 2, 3]) # 6
functools.reduce((lambda x, y: x * y), [2, 3, 4]) # 24
#-- çæå¨å½æ°:yield VS return
def gensquare(N):
for i in range(N):
yield i** 2 # ç¶ææèµ· å¯ä»¥æ¢å¤å°æ¤æ¶çç¶æ
for i in gensquare(5): # ä½¿ç¨æ¹æ³
print(i, end = ' ') # [0, 1, 4, 9, 16]
x = gensquare(2) # xæ¯ä¸ä¸ªçæå¯¹è±¡
next(x) # çåäºx.__next__() è¿å0
next(x) # çåäºx.__next__() è¿å1
next(x) # çåäºx.__next__() æåºå¼å¸¸StopIteration
#-- çæå¨è¡¨è¾¾å¼:å°æ¬å·è¿è¡å表解æ
G = (x ** 2 for x in range(3)) # 使ç¨å°æ¬å·å¯ä»¥å建æéç»æççæå¨generator object
next(G), next(G), next(G) # åä¸è¿°ä¸ççæå¨å½æ°çè¿åå¼ä¸è´
#ï¼1ï¼çæå¨(çæå¨å½æ°/çæå¨è¡¨è¾¾å¼)æ¯å个è¿ä»£å¯¹è±¡
G = (x ** 2 for x in range(4))
I1 = iter(G) # è¿éå®é
ä¸iter(G) = G
next(I1) # è¾åº0
next(G) # è¾åº1
next(I1) # è¾åº4
#ï¼2ï¼çæå¨ä¸ä¿çè¿ä»£åçç»æ
gen = (i for i in range(4))
2 in gen # è¿åTrue
3 in gen # è¿åTrue
1 in gen # è¿åFalseï¼å
¶å®æ£æµ2çæ¶åï¼1å·²ç»å°±ä¸å¨çæå¨ä¸äºï¼å³1å·²ç»è¢«è¿ä»£è¿äºï¼åç2ã3ä¹ä¸å¨äº
#-- æ¬å°å鿝鿿£æµç
X = 22 # å
¨å±åéXç声æåå®ä¹
def test():
print(X) # å¦ææ²¡æä¸ä¸è¯å¥ å该å¥åæ³ æå°å
¨å±åéX
X = 88 # è¿ä¸è¯å¥ä½¿å¾ä¸ä¸è¯å¥éæ³ å 为å®ä½¿å¾Xåæäºæ¬å°åé ä¸ä¸å¥åæäºæå°ä¸ä¸ªæªå®ä¹çæ¬å°åé(å±é¨åé)
if False: # å³ä½¿è¿æ ·çè¯å¥ ä¹ä¼æprintè¯å¥è§ä¸ºéæ³è¯å¥ å 为:
X = 88 # Python伿 è§ifè¯å¥èä»ç¶å£°æäºå±é¨åéX
def test(): # æ¹è¿
global X # 声æåéX为å
¨å±åé
print(X) # æå°å
¨å±åéX
X = 88 # æ¹åå
¨å±åéX
#-- 彿°çé»è®¤å¼æ¯å¨å½æ°å®ä¹çæ¶åå®ä¾åç è䏿¯å¨è°ç¨çæ¶å ä¾å:
def foo(numbers=[]): # è¿éç[]æ¯å¯åç
numbers.append(9)
print(numbers)
foo() # first time, like before, [9]
foo() # second time, not like before, [9, 9]
foo() # third time, not like before too, [9, 9, 9]
# æ¹è¿:
def foo(numbers=None):
if numbers is None: numbers = []
numbers.append(9)
print(numbers)
# å¦å¤ä¸ä¸ªä¾å åæ°çé»è®¤å¼ä¸ºä¸å¯åç:
def foo(count=0): # è¿éç0æ¯æ°å, æ¯ä¸å¯åç
count += 1
print(count)
foo() # è¾åº1
foo() # è¿æ¯è¾åº1
foo(3) # è¾åº4
foo() # è¿æ¯è¾åº1
"""彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å----彿°ä¾å"""
"""æ°å¦è¿ç®ç±»"""
abs(x) # æ±ç»å¯¹å¼ï¼åæ°å¯ä»¥æ¯æ´åï¼ä¹å¯ä»¥æ¯å¤æ°ï¼è¥åæ°æ¯å¤æ°ï¼åè¿å夿°ç模
complex([real[, imag]]) # å建ä¸ä¸ªå¤æ°
divmod(a, b) # åå«ååå使°ï¼æ³¨æï¼æ´åãæµ®ç¹åé½å¯ä»¥
float([x]) # å°ä¸ä¸ªåç¬¦ä¸²ææ°è½¬æ¢ä¸ºæµ®ç¹æ°ã妿æ åæ°å°è¿å0.0
int([x[, base]]) # å°ä¸ä¸ªåç¬¦ä¸²ææµ®ç¹æ°è½¬æ¢ä¸ºintç±»åï¼base表示è¿å¶
long([x[, base]]) # å°ä¸ä¸ªåç¬¦ä¸²ææµ®ç¹æ°è½¬æ¢ä¸ºlongç±»å
pow(x, y) # è¿åxçy次å¹
range([start], stop[, step]) # 产çä¸ä¸ªåºåï¼é»è®¤ä»0å¼å§
round(x[, n]) # åèäºå
¥
sum(iterable[, start]) # 对éåæ±å
oct(x) # å°ä¸ä¸ªæ°å转å为8è¿å¶å符串
hex(x) # å°ä¸ä¸ªæ°å转æ¢ä¸º16è¿å¶å符串
chr(i) # è¿åç»å®intç±»å对åºçASCIIå符
unichr(i) # è¿åç»å®intç±»åçunicode
ord(c) # è¿åASCIIå符对åºçæ´æ°
bin(x) # å°æ´æ°x转æ¢ä¸ºäºè¿å¶å符串
bool([x]) # å°x转æ¢ä¸ºBooleanç±»å
"""éåç±»æä½"""
basestring() # stråunicodeçè¶
ç±»ï¼ä¸è½ç´æ¥è°ç¨ï¼å¯ä»¥ç¨ä½isinstance夿
format(value [, format_spec]) # æ ¼å¼åè¾åºåç¬¦ä¸²ï¼æ ¼å¼åçåæ°é¡ºåºä»0å¼å§ï¼å¦âI am {0},I like {1}â
enumerate(sequence[, start=0]) # è¿åä¸ä¸ªå¯æä¸¾çå¯¹è±¡ï¼æ³¨æå®æç¬¬äºä¸ªåæ°
iter(obj[, sentinel]) # çæä¸ä¸ªå¯¹è±¡çè¿ä»£å¨ï¼ç¬¬äºä¸ªåæ°è¡¨ç¤ºåé符
max(iterable[, args...][key]) # è¿åéåä¸çæå¤§å¼
min(iterable[, args...][key]) # è¿åéåä¸çæå°å¼
dict([arg]) # åå»ºæ°æ®åå
¸
list([iterable]) # å°ä¸ä¸ªéå类转æ¢ä¸ºå¦å¤ä¸ä¸ªéåç±»
set() # set对象å®ä¾å
frozenset([iterable]) # 产çä¸ä¸ªä¸å¯åçset
tuple([iterable]) # çæä¸ä¸ªtupleç±»å
str([object]) # 转æ¢ä¸ºstringç±»å
sorted(iterable[, cmp[, key[, reverse]]]) # éåæåº
L = [('b',2),('a',1),('c',3),('d',4)]
sorted(L, key=lambda x: x[1]), reverse=True) # 使ç¨Keyåæ°åreverseåæ°
sorted(L, key=lambda x: (x[0], x[1])) # 使ç¨keyåæ°è¿è¡å¤æ¡ä»¶æåºï¼å³å¦æx[0]ç¸åï¼åæ¯è¾x[1]
"""é»è¾å¤æ"""
all(iterable) # éåä¸çå
ç´ é½ä¸ºççæ¶å为çï¼ç¹å«çï¼è¥ä¸ºç©ºä¸²è¿å为True
any(iterable) # éåä¸çå
ç´ æä¸ä¸ªä¸ºççæ¶å为çï¼ç¹å«çï¼è¥ä¸ºç©ºä¸²è¿å为False
cmp(x, y) # 妿x < y ,è¿åè´æ°ï¼x == y, è¿å0ï¼x > y,è¿åæ£æ°
"""IOæä½"""
file(filename [, mode [, bufsize]]) # fileç±»åçæé 彿°ã
input([prompt]) # è·åç¨æ·è¾å
¥ï¼æ¨è使ç¨raw_inputï¼å ä¸ºè¯¥å½æ°å°ä¸ä¼æè·ç¨æ·çé误è¾å
¥
raw_input([prompt]) # 设置è¾å
¥ï¼è¾å
¥é½æ¯ä½ä¸ºå符串å¤ç
open(name[, mode[, buffering]]) # æå¼æä»¶ï¼ä¸fileæä»ä¹ä¸åï¼æ¨è使ç¨open
"""å
¶ä»"""
callable(object) # æ£æ¥å¯¹è±¡objectæ¯å¦å¯è°ç¨
classmethod(func) # ç¨æ¥è¯´æè¿ä¸ªfuncæ¯ä¸ªç±»æ¹æ³
staticmethod(func) # ç¨æ¥è¯´æè¿ä¸ªfuncä¸ºéææ¹æ³
dir([object]) # ä¸å¸¦åæ°æ¶ï¼è¿åå½åèå´å
çåéãæ¹æ³åå®ä¹çç±»åå表ï¼å¸¦åæ°æ¶ï¼è¿ååæ°ç屿§ãæ¹æ³å表ã
help(obj) # è¿åobjç帮å©ä¿¡æ¯
eval(expression) # 计ç®è¡¨è¾¾å¼expressionçå¼ï¼å¹¶è¿å
exec(str) # å°strä½ä¸ºPythonè¯å¥æ§è¡
execfile(filename) # ç¨æ³ç±»ä¼¼exec()ï¼ä¸åçæ¯execfileçåæ°filename为æä»¶åï¼èexecçåæ°ä¸ºå符串ã
filter(function, iterable) # æé ä¸ä¸ªåºåï¼çä»·äº[item for item in iterable if function(item)]ï¼functionè¿åå¼ä¸ºTrueæFalseç彿°
list(filter(bool, range(-3, 4)))# è¿å[-3, -2, -1, 1, 2, 3], 没æ0
hasattr(object, name) # å¤æå¯¹è±¡objectæ¯å¦å
å«å为nameçç¹æ§
getattr(object, name [, defalut]) # è·åä¸ä¸ªç±»ç屿§
setattr(object, name, value) # è®¾ç½®å±æ§å¼
delattr(object, name) # å é¤object对象å为nameç屿§
globals() # è¿åä¸ä¸ªæè¿°å½åå
¨å±ç¬¦å·è¡¨çåå
¸
hash(object) # å¦æå¯¹è±¡object为åå¸è¡¨ç±»åï¼è¿å对象objectçåå¸å¼
id(object) # è¿å对象çå¯ä¸æ è¯ï¼ä¸ä¸²æ°å
isinstance(object, classinfo) # 夿objectæ¯å¦æ¯classçå®ä¾
isinstance(1, int) # 夿æ¯ä¸æ¯intç±»å
isinstance(1, (int, float)) # isinstanceç第äºä¸ªåæ°æ¥åä¸ä¸ªå
ç»ç±»å
issubclass(class, classinfo) # 夿classæ¯å¦ä¸ºclassinfoçåç±»
locals() # è¿åå½åçåéå表
map(function, iterable, ...) # éåæ¯ä¸ªå
ç´ ï¼æ§è¡functionæä½
list(map(abs, range(-3, 4))) # è¿å[3, 2, 1, 0, 1, 2, 3]
next(iterator[, default]) # 类似äºiterator.next()
property([fget[, fset[, fdel[, doc]]]]) # 屿§è®¿é®çå
è£
ç±»ï¼è®¾ç½®åå¯ä»¥éè¿c.x=valueçæ¥è®¿é®setterågetter
reduce(function, iterable[, initializer]) # åå¹¶æä½ï¼ä»ç¬¬ä¸ä¸ªå¼å§æ¯åä¸¤ä¸ªåæ°ï¼ç¶åæ¯å两个çç»æä¸ç¬¬ä¸ä¸ªåå¹¶è¿è¡å¤çï¼ä»¥æ¤ç±»æ¨
def add(x,y):return x + y
reduce(add, range(1, 11)) # è¿å55 (注:1+2+3+4+5+6+7+8+9+10 = 55)
reduce(add, range(1, 11), 20) # è¿å75
reload(module) # éæ°å 载模å
repr(object) # å°ä¸ä¸ªå¯¹è±¡åå¹»ä¸ºå¯æå°çæ ¼å¼
slice(start, stop[, step]) # 产çåç对象
type(object) # è¿å该objectçç±»å
vars([object]) # è¿å对象çåéåãåéå¼å¾åå
¸
a = Class(); # Class为ä¸ä¸ªç©ºç±»
a.name = 'qi', a.age = 9
vars(a) # {'name':'qi', 'age':9}
zip([iterable, ...]) # è¿åå¯¹åºæ°ç»
list(zip([1, 2, 3], [4, 5, 6])) # [(1, 4), (2, 5), (3, 6)]
a = [1, 2, 3], b = ["a", "b", "c"]
z = zip(a, b) # å缩ï¼[(1, "a"), (2, "b"), (3, "c")]
zip(*z) # è§£å缩ï¼[(1, 2, 3), ("a", "b", "c")]
unicode(string, encoding, errors) # å°å符串string转å为unicodeå½¢å¼ï¼string为encoded stringã
"""模åMoudle----模åMoudle----模åMoudle----模åMoudle----模åMoudle----模åMoudle----模åMoudle----模åMoudle----模åMoudle----模åMoudle----模åMoudle"""
#-- Python模åæç´¢è·¯å¾:
"""
(1)ç¨åºç主ç®å½ (2)PYTHONPATHç®å½ (3)æ å龿¥åºç®å½ (4)ä»»ä½.pthæä»¶çå
容
"""
#-- æ¥çå
¨é¨ç模åæç´¢è·¯å¾
import sys
sys.path
#-- 模åç使ç¨ä»£ç
import module1, module2 # 导å
¥module1 使ç¨module1.printer()
from module1 import printer # 导å
¥module1ä¸çprinteråé 使ç¨printer()
from module1 imoprt * # 导å
¥module1ä¸çå
¨é¨åé 使ç¨ä¸å¿
æ·»å module1åç¼
#-- é载模åreload: è¿æ¯ä¸ä¸ªå
ç½®å½æ° è䏿¯ä¸æ¡è¯å¥
from imp import reload
reload(module)
#-- 模åçå
导å
¥:使ç¨ç¹å·(.)è䏿¯è·¯å¾(dir1\dir2)è¿è¡å¯¼å
¥
import dir1.dir2.mod # d导å
¥å
(ç®å½)dir1ä¸çå
dir2ä¸çmodæ¨¡å æ¤æ¶dir1å¿
é¡»å¨Pythonå¯æç´¢è·¯å¾ä¸
from dir1.dir2.mod import * # fromè¯æ³çå
导å
¥
#-- __init__.pyå
æä»¶:æ¯ä¸ªå¯¼å
¥çå
ä¸é½åºè¯¥å
å«è¿ä¹ä¸ä¸ªæä»¶
"""
该æä»¶å¯ä»¥ä¸ºç©º
馿¬¡è¿è¡å
导å
¥æ¶ 该æä»¶ä¼èªå¨æ§è¡
é«çº§åè½:å¨è¯¥æä»¶ä¸ä½¿ç¨__all__å表æ¥å®ä¹å
(ç®å½)以from*çå½¢å¼å¯¼å
¥æ¶ éè¦å¯¼å
¥ä»ä¹
"""
#-- å
ç¸å¯¹å¯¼å
¥:使ç¨ç¹å·(.) åªè½ä½¿ç¨fromè¯å¥
from . import spam # 导å
¥å½åç®å½ä¸çspam模åï¼é误: å½åç®å½ä¸ç模å, ç´æ¥å¯¼å
¥å³å¯ï¼
from .spam import name # 导å
¥å½åç®å½ä¸çspam模åçname屿§ï¼é误: å½åç®å½ä¸ç模å, ç´æ¥å¯¼å
¥å³å¯ï¼ä¸ç¨å .ï¼
from .. import spam # 导å
¥å½åç®å½çç¶ç®å½ä¸çspam模å
#-- å
ç¸å¯¹å¯¼å
¥ä¸æ®é导å
¥çåºå«
from string import * # è¿é导å
¥çstring模å为sys.pathè·¯å¾ä¸ç è䏿¯æ¬ç®å½ä¸çstring模å(妿åå¨ä¹ä¸æ¯)
from .string import * # è¿é导å
¥çstring模å为æ¬ç®å½ä¸ç(ä¸åå¨å导å
¥å¤±è´¥) è䏿¯sys.pathè·¯å¾ä¸ç
#-- æ¨¡åæ°æ®éè:æå°åfrom*çç ´å
_X # åéååå ä¸å线å¯ä»¥é²æ¢from*导å
¥æ¶è¯¥åéå被å¤å¶åºå»
__all__ = ['x', 'x1', 'x2'] # 使ç¨__all__å表æå®from*æ¶å¤å¶åºå»çåéå(åéåå¨å表ä¸ä¸ºå符串形å¼)
#-- å¯ä»¥ä½¿ç¨__name__è¿è¡æ¨¡åçåå
æµè¯:彿¨¡åä¸ºé¡¶å±æ§è¡æä»¶æ¶å¼ä¸º'__main__' 彿¨¡å被导å
¥æ¶ä¸ºæ¨¡åå
if __name__ == '__main__':
doSomething
# 模å屿§ä¸è¿æå
¶ä»å±æ§ï¼ä¾å¦ï¼
__doc__ # 模åçè¯´æææ¡£
__file__ # 模åæä»¶çæä»¶åï¼å
æ¬å
¨è·¯å¾
__name__ # 主æä»¶æè
被导å
¥æä»¶
__package__ # 模åæå¨çå
#-- importè¯å¥fromè¯å¥çasæ©å±
import modulename as name
from modulename import attrname as name
#-- å¾å°æ¨¡å屿§çå ç§æ¹æ³ å设为äºå¾å°name屿§çå¼
M.name
M.__dict__['name']
sys.modules['M'].name
getattr(M, 'name')
"""ç±»ä¸é¢å对象----ç±»ä¸é¢å对象----ç±»ä¸é¢å对象----ç±»ä¸é¢å对象----ç±»ä¸é¢å对象----ç±»ä¸é¢å对象----ç±»ä¸é¢å对象----ç±»ä¸é¢å对象----ç±»ä¸é¢å对象----ç±»ä¸é¢å对象"""
#-- ææ®éçç±»
class C1(C2, C3):
spam = 42 # æ°æ®å±æ§
def __init__(self, name): # 彿°å±æ§:æé 彿°
self.name = name
def __del__(self): # 彿°å±æ§:ææå½æ°
print("goodbey ", self.name)
I1 = C1('bob')
#-- Pythonç类没æåºäºåæ°ç彿°éè½½
class FirstClass:
def test(self, string):
print(string)
def test(self): # æ¤æ¶ç±»ä¸åªæä¸ä¸ªtest彿° å³åè
test(self) å®è¦çæåè
另忰çtest彿°
print("hello world")
#-- åç±»æ©å±è¶
ç±»: å°½éè°ç¨è¶
ç±»çæ¹æ³
class Manager(Person):
def giveRaise(self, percent, bonus = .10):
self.pay = int(self.pay*(1 + percent + bonus)) # ä¸å¥½çæ¹å¼ å¤å¶ç²è´´è¶
类代ç
Person.giveRaise(self, percent + bonus) # å¥½çæ¹å¼ å°½éè°ç¨è¶
ç±»æ¹æ³
#-- ç±»å
çå·¥å
·
bob = Person('bob')
bob.__class__ #
bob.__class__.__name__ # 'Person'
bob.__dict__ # {'pay':0, 'name':'bob', 'job':'Manager'}
#-- è¿å1ä¸ æ°æ®å±æ§spamæ¯å±äºç±» è䏿¯å¯¹è±¡
I1 = C1('bob'); I2 = C2('tom') # æ¤æ¶I1åI2çspamé½ä¸º42 使¯é½æ¯è¿åçC1çspam屿§
C1.spam = 24 # æ¤æ¶I1åI2çspamé½ä¸º24
I1.spam = 3 # æ¤æ¶I1æ°å¢èªæå±æ§spam å¼ä¸º2 I2åC1çspamè¿é½ä¸º24
#-- ç±»æ¹æ³è°ç¨çä¸¤ç§æ¹å¼
instance.method(arg...)
class.method(instance, arg...)
#-- æ½è±¡è¶
ç±»çå®ç°æ¹æ³
# (1)æä¸ªå½æ°ä¸è°ç¨æªå®ä¹ç彿° åç±»ä¸å®ä¹è¯¥å½æ°
def delegate(self):
self.action() # æ¬ç±»ä¸ä¸å®ä¹action彿° æä»¥ä½¿ç¨delegate彿°æ¶å°±ä¼åºé
# (2)å®ä¹action彿° 使¯è¿åå¼å¸¸
def action(self):
raise NotImplementedError("action must be defined")
# (3)ä¸è¿°çä¸¤ç§æ¹æ³è¿é½å¯ä»¥å®ä¹å®ä¾å¯¹è±¡ å®é
ä¸å¯ä»¥å©ç¨@è£
饰å¨è¯æ³çæä¸è½å®ä¹çæ½è±¡è¶
ç±»
from abc import ABCMeta, abstractmethod
class Super(metaclass = ABCMeta):
@abstractmethod
def action(self): pass
x = Super() # è¿å TypeError: Can't instantiate abstract class Super with abstract methods action
#-- # OOPåç»§æ¿: "is-a"çå
³ç³»
class A(B):
pass
a = A()
isinstance(a, B) # è¿åTrue, Aæ¯Bçåç±» a乿¯Bçä¸ç§
# OOPåç»å: "has-a"çå
³ç³»
pass
# OOPåå§æ: "å
è£
"对象 å¨Pythonä¸å§æé常æ¯ä»¥"__getattr__"é©åæ¹æ³å®ç°ç, è¿ä¸ªæ¹æ³ä¼æ¦æªå¯¹ä¸åå¨å±æ§ç读å
# å
è£
ç±»(æè
称为代çç±»)å¯ä»¥ä½¿ç¨__getattr__æä»»æè¯»å转åç»è¢«å
è£
ç对象
class wrapper:
def __init__(self, object):
self.wrapped = object
def __getattr(self, attrname):
print('Trace: ', attrname)
return getattr(self.wrapped, attrname)
# 注:è¿é使ç¨getattr(X, N)å
ç½®å½æ°ä»¥åéåå符串Nä»å
è£
对象Xä¸ååºå±æ§ 类似äºX.__dict__[N]
x = wrapper([1, 2, 3])
x.append(4) # è¿å "Trace: append" [1, 2, 3, 4]
x = wrapper({'a':1, 'b':2})
list(x.keys()) # è¿å "Trace: keys" ['a', 'b']
#-- ç±»çä¼ªç§æå±æ§:使ç¨__attr
class C1:
def __init__(self, name):
self.__name = name # æ¤æ¶ç±»ç__name屿§ä¸ºä¼ªç§æå±æ§ åç å®ä¼èªå¨åæself._C1__name = name
def __str__(self):
return 'self.name = %s' % self.__name
I = C1('tom')
print(I) # è¿å self.name = tom
I.__name = 'jeey' # è¿éæ æ³è®¿é® __nameä¸ºä¼ªç§æå±æ§
I._C1__name = 'jeey' # è¿éå¯ä»¥ä¿®æ¹æå self.name = jeey
#-- ç±»æ¹æ³æ¯å¯¹è±¡:æ ç»å®ç±»æ¹æ³å¯¹è±¡ / ç»å®å®ä¾æ¹æ³å¯¹è±¡
class Spam:
def doit(self, message):
print(message)
def selfless(message)
print(message)
obj = Spam()
x = obj.doit # ç±»çç»å®æ¹æ³å¯¹è±¡ å®ä¾ + 彿°
x('hello world')
x = Spam.doit # ç±»çæ ç»å®æ¹æ³å¯¹è±¡ ç±»å + 彿°
x(obj, 'hello world')
x = Spam.selfless # ç±»çæ ç»å®æ¹æ³æ¯å½æ° å¨3.0ä¹åæ æ
x('hello world')
#-- è·å对象信æ¯: 屿§åæ¹æ³
a = MyObject()
dir(a) # 使ç¨dir彿°
hasattr(a, 'x') # æµè¯æ¯å¦æx屿§ææ¹æ³ å³a.xæ¯å¦å·²ç»åå¨
setattr(a, 'y', 19) # è®¾ç½®å±æ§ææ¹æ³ çåäºa.y = 19
getattr(a, 'z', 0) # è·å屿§ææ¹æ³ 妿屿§ä¸åå¨ åè¿åé»è®¤å¼0
#è¿éæä¸ªå°æå·§ï¼setattrå¯ä»¥è®¾ç½®ä¸ä¸ªä¸è½è®¿é®å°ç屿§ï¼å³åªè½ç¨getattrè·å
setattr(a, "can't touch", 100) # è¿éç屿§å带æç©ºæ ¼ï¼ä¸è½ç´æ¥è®¿é®
getattr(a, "can't touch", 0) # 使¯å¯ä»¥ç¨getattrè·å
#-- ä¸ºç±»å¨æç»å®å±æ§ææ¹æ³: MethodTypeæ¹æ³
# ä¸è¬å建äºä¸ä¸ªclassçå®ä¾å, å¯ä»¥ç»è¯¥å®ä¾ç»å®ä»»ä½å±æ§åæ¹æ³, è¿å°±æ¯å¨æè¯è¨ççµæ´»æ§
class Student(object):
pass
s = Student()
s.name = 'Michael' # 卿ç»å®ä¾ç»å®ä¸ä¸ªå±æ§
def set_age(self, age): # å®ä¹ä¸ä¸ªå½æ°ä½ä¸ºå®ä¾æ¹æ³
self.age = age
from types import MethodType
s.set_age = MethodType(set_age, s) # ç»å®ä¾ç»å®ä¸ä¸ªæ¹æ³ ç±»çå
¶ä»å®ä¾ä¸åæ¤å½±å
s.set_age(25) # è°ç¨å®ä¾æ¹æ³
Student.set_age = MethodType(set_age, Student) # 为类ç»å®ä¸ä¸ªæ¹æ³ ç±»çææå®ä¾é½æ¥æè¯¥æ¹æ³
"""ç±»çé«çº§è¯é¢----ç±»çé«çº§è¯é¢----ç±»çé«çº§è¯é¢----ç±»çé«çº§è¯é¢----ç±»çé«çº§è¯é¢----ç±»çé«çº§è¯é¢----ç±»çé«çº§è¯é¢----ç±»çé«çº§è¯é¢----ç±»çé«çº§è¯é¢----ç±»çé«çº§è¯é¢"""
#-- å¤éç»§æ¿: "æ··åç±»", æç´¢æ¹å¼"ä»ä¸å°ä¸ ä»å·¦å°å³ 广度ä¼å
"
class A(B, C):
pass
#-- ç±»çç»§æ¿ååç±»çåå§å
# 1.åç±»å®ä¹äº__init__æ¹æ³æ¶ï¼è¥æªæ¾ç¤ºè°ç¨åºç±»__init__æ¹æ³ï¼pythonä¸ä¼å¸®ä½ è°ç¨ã
# 2.åç±»æªå®ä¹__init__æ¹æ³æ¶ï¼pythonä¼èªå¨å¸®ä½ è°ç¨é¦ä¸ªåºç±»ç__init__æ¹æ³ï¼æ³¨ææ¯é¦ä¸ªã
# 3.åç±»æ¾ç¤ºè°ç¨åºç±»çåå§å彿°ï¼
class FooParent(object):
def __init__(self, a):
self.parent = 'I\'m the Parent.'
print('Parent:a=' + str(a))
def bar(self, message):
print(message + ' from Parent')
class FooChild(FooParent):
def __init__(self, a):
FooParent.__init__(self, a)
print('Child:a=' + str(a))
def bar(self, message):
FooParent.bar(self, message)
print(message + ' from Child')
fooChild = FooChild(10)
fooChild.bar('HelloWorld')
#-- #å®ä¾æ¹æ³ / éææ¹æ³ / ç±»æ¹æ³
class Methods:
def imeth(self, x): print(self, x) # å®ä¾æ¹æ³ï¼ä¼ å
¥çæ¯å®ä¾åæ°æ®ï¼æä½çæ¯å®ä¾ç屿§
def smeth(x): print(x) # éææ¹æ³ï¼åªä¼ å
¥æ°æ® ä¸ä¼ å
¥å®ä¾ï¼æä½çæ¯ç±»ç屿§è䏿¯å®ä¾ç屿§
def cmeth(cls, x): print(cls, x) # ç±»æ¹æ³ï¼ä¼ å
¥çæ¯ç±»å¯¹è±¡åæ°æ®
smeth = staticmethod(smeth) # è°ç¨å
ç½®å½æ°ï¼ä¹å¯ä»¥ä½¿ç¨@staticmethod
cmeth = classmethod(cmeth) # è°ç¨å
ç½®å½æ°ï¼ä¹å¯ä»¥ä½¿ç¨@classmethod
obj = Methods()
obj.imeth(1) # å®ä¾æ¹æ³è°ç¨ <__main__.Methods object...> 1
Methods.imeth(obj, 2) # <__main__.Methods object...> 2
Methods.smeth(3) # éææ¹æ³è°ç¨ 3
obj.smeth(4) # è¿éå¯ä»¥ä½¿ç¨å®ä¾è¿è¡è°ç¨
Methods.cmeth(5) # ç±»æ¹æ³è°ç¨ 5
obj.cmeth(6) # 6
#-- 彿°è£
饰å¨:æ¯å®åè¾¹ç彿°çè¿è¡æ¶ç声æ ç±@符å·ä»¥åå边紧è·ç"å
彿°"(metafunction)ç»æ
@staticmethod
def smeth(x): print(x)
# çåäº:
def smeth(x): print(x)
smeth = staticmethod(smeth)
# åç
@classmethod
def cmeth(cls, x): print(x)
# çåäº
def cmeth(cls, x): print(x)
cmeth = classmethod(cmeth)
#-- 类修饰å¨:æ¯å®åè¾¹çç±»çè¿è¡æ¶ç声æ ç±@符å·ä»¥åå边紧è·ç"å
彿°"(metafunction)ç»æ
def decorator(aClass):.....
@decorator
class C:....
# çåäº:
class C:....
C = decorator(C)
#-- éå¶class屿§: __slots__屿§
class Student:
__slots__ = ('name', 'age') # éå¶Studentåå
¶å®ä¾åªè½æ¥ænameåage屿§
# __slots__屿§åªå¯¹å½å类起ä½ç¨, 对å
¶åç±»ä¸èµ·ä½ç¨
# __slots__屿§è½å¤èçå
å
# __slots__屿§å¯ä»¥ä¸ºå表listï¼æè
å
ç»tuple
#-- ç±»å±æ§é«çº§è¯é¢: @property
# å设å®ä¹äºä¸ä¸ªç±»:Cï¼è¯¥ç±»å¿
须继æ¿èªobjectç±»ï¼æä¸ç§æåé_x
class C(object):
def __init__(self):
self.__x = None
# 第ä¸ç§ä½¿ç¨å±æ§çæ¹æ³
def getx(self):
return self.__x
def setx(self, value):
self.__x = value
def delx(self):
del self.__x
x = property(getx, setx, delx, '')
# property彿°åå为property(fget=None,fset=None,fdel=None,doc=None)
# 使ç¨
c = C()
c.x = 100 # èªå¨è°ç¨setxæ¹æ³
y = c.x # èªå¨è°ç¨getxæ¹æ³
del c.x # èªå¨è°ç¨delxæ¹æ³
# 第äºç§æ¹æ³ä½¿ç¨å±æ§çæ¹æ³
@property
def x(self):
return self.__x
@x.setter
def x(self, value):
self.__x = value
@x.deleter
def x(self):
del self.__x
# 使ç¨
c = C()
c.x = 100 # èªå¨è°ç¨setteræ¹æ³
y = c.x # èªå¨è°ç¨xæ¹æ³
del c.x # èªå¨è°ç¨deleteræ¹æ³
#-- å®å¶ç±»: éåç±»çæ¹æ³
# (1)__str__æ¹æ³ã__repr__æ¹æ³: å®å¶ç±»çè¾åºå符串
# (2)__iter__æ¹æ³ãnextæ¹æ³: å®å¶ç±»çå¯è¿ä»£æ§
class Fib(object):
def __init__(self):
self.a, self.b = 0, 1 # åå§å两个计æ°å¨aï¼b
def __iter__(self):
return self # å®ä¾æ¬èº«å°±æ¯è¿ä»£å¯¹è±¡ï¼æ
è¿åèªå·±
def next(self):
self.a, self.b = self.b, self.a + self.b
if self.a > 100000: # éåºå¾ªç¯çæ¡ä»¶
raise StopIteration()
return self.a # è¿åä¸ä¸ä¸ªå¼
for n in Fib():
print(n) # 使ç¨
# (3)__getitem__æ¹æ³ã__setitem__æ¹æ³: å®å¶ç±»ç䏿 æä½[] æè
åçæä½slice
class Indexer(object):
def __init__(self):
self.data = {}
def __getitem__(self, n): # å®ä¹getitemæ¹æ³
print('getitem:', n)
return self.data[n]
def __setitem__(self, key, value): # å®ä¹setitemæ¹æ³
print('setitem:key = {0}, value = {1}'.format(key, value))
self.data[key] = value
test = Indexer()
test[0] = 1; test[3] = '3' # è°ç¨setitemæ¹æ³
print(test[0]) # è°ç¨getitemæ¹æ³
# (4)__getattr__æ¹æ³: å®å¶ç±»ç屿§æä½
class Student(object):
def __getattr__(self, attr): # å®ä¹å½è·åç±»ç屿§æ¶çè¿åå¼
if attr=='age':
return 25 # å½è·åage屿§æ¶è¿å25
raise AttributeError('object has no attribute: %s' % attr)
# 注æ: åªæå½å±æ§ä¸å卿¶ æä¼è°ç¨è¯¥æ¹æ³ ä¸è¯¥æ¹æ³é»è®¤è¿åNone éè¦å¨å½æ°æåå¼åå¼å¸¸
s = Student()
s.age # sä¸age屿§ä¸åå¨ æ
è°ç¨__getattr__æ¹æ³ è¿å25
# (5)__call__æ¹æ³: å®å¶ç±»ç'å¯è°ç¨'æ§
class Student(object):
def __call__(self): # ä¹å¯ä»¥å¸¦åæ°
print('Calling......')
s = Student()
s() # såæäºå¯è°ç¨ç ä¹å¯ä»¥å¸¦åæ°
callable(s) # æµè¯sçå¯è°ç¨æ§ è¿åTrue
# (6)__len__æ¹æ³ï¼æ±ç±»çé¿åº¦
def __len__(self):
return len(self.data)
#-- 卿å建类type()
# ä¸è¬å建类 éè¦å¨ä»£ç 䏿åå®ä¹
class Hello(object):
def hello(self, name='world'):
print('Hello, %s.' % name)
h = Hello()
h.hello() # Hello, world
type(Hello) # Helloæ¯ä¸ä¸ªtypeç±»å è¿å
type(h) # hæ¯ä¸ä¸ªHelloç±»å è¿å
# å¨æç±»åè¯è¨ä¸ ç±»å¯ä»¥å¨æå建 type彿°å¯ç¨äºå建æ°ç±»å
def fn(self, name='world'): # å
å®ä¹å½æ°
print('Hello, %s.' % name)
Hello = type('Hello', (object,), dict(hello=fn))
# å建Helloç±» typeåå: type(name, bases, dict)
h = Hello() # æ¤æ¶çhåä¸è¾¹çhä¸è´
"""å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³----å¼å¸¸ç¸å
³"""
#-- #æè·å¼å¸¸:
try:
except: # æè·ææçå¼å¸¸ çåäºexcept Exception:
except name: # æè·æå®çå¼å¸¸
except name, value: # æè·æå®çå¼å¸¸åé¢å¤çæ°æ®(å®ä¾)
except (name1, name2):
except (name1, name2), value:
except name4 as X:
else: # å¦ææ²¡æåçå¼å¸¸
finally: # æ»ä¼æ§è¡çé¨å
# å¼åå¼å¸¸: raiseåå¥(raise IndexError)
raise # raise instance of a class, raise IndexError()
raise # make and raise instance of a class, raise IndexError
raise # reraise the most recent exception
#-- Python3.xä¸çå¼å¸¸é¾: raise exception from otherException
except Exception as X:
raise IndexError('Bad') from X
#-- assertåå¥: assert ,
assert x < 0, 'x must be negative'
#-- with/asç¯å¢ç®¡çå¨:ä½ä¸ºå¸¸è§çtry/finallyç¨æ³æ¨¡å¼çæ¿ä»£æ¹æ¡
with expression [as variable], expression [as variable]:
# ä¾å:
with open('test.txt') as myfile:
for line in myfile: print(line)
# çåäº:
myfile = open('test.txt')
try:
for line in myfile: print(line)
finally:
myfile.close()
#-- ç¨æ·èªå®ä¹å¼å¸¸: class Bad(Exception):.....
"""
Exceptionè¶
ç±» / exceptåºç±»å³å¯æè·å°å
¶ææåç±»
Exceptionè¶
ç±»æé»è®¤çæå°æ¶æ¯åç¶æ å½ç¶ä¹å¯ä»¥å®å¶æå°æ¾ç¤º:
"""
class MyBad(Exception):
def __str__(self):
return 'å®å¶çæå°æ¶æ¯'
try:
MyBad()
except MyBad as x:
print(x)
#-- ç¨æ·å®å¶å¼å¸¸æ°æ®
class FormatError(Exception):
def __init__(self, line ,file):
self.line = line
self.file = file
try:
raise FormatError(42, 'test.py')
except FormatError as X:
print('Error at ', X.file, X.line)
# ç¨æ·å®å¶å¼å¸¸è¡ä¸º(æ¹æ³):ä»¥è®°å½æ¥å¿ä¸ºä¾
class FormatError(Exception):
logfile = 'formaterror.txt'
def __init__(self, line ,file):
self.line = line
self.file = file
def logger(self):
open(self.logfile, 'a').write('Error at ', self.file, self.line)
try:
raise FormatError(42, 'test.py')
except FormatError as X:
X.logger()
#-- å
³äºsys.exc_info:å
许ä¸ä¸ªå¼å¸¸å¤çå¨è·å对æè¿å¼åçå¼å¸¸ç访é®
try:
......
except:
# æ¤æ¶sys.exc_info()è¿åä¸ä¸ªå
ç»(type, value, traceback)
# type:æ£å¨å¤ççå¼å¸¸çå¼å¸¸ç±»å
# value:å¼åçå¼å¸¸çå®ä¾
# traceback:å æ ä¿¡æ¯
#-- å¼å¸¸å±æ¬¡
BaseException
+-- SystemExit
+-- KeyboardInterrupt
+-- GeneratorExit
+-- Exception
+-- StopIteration
+-- ArithmeticError
+-- AssertionError
+-- AttributeError
+-- BufferError
+-- EOFError
+-- ImportError
+-- LookupError
+-- MemoryError
+-- NameError
+-- OSError
+-- ReferenceError
+-- RuntimeError
+-- SyntaxError
+-- SystemError
+-- TypeError
+-- ValueError
+-- Warning
"""Unicodeååèå符串---Unicodeååèå符串----Unicodeååèå符串----Unicodeååèå符串----Unicodeååèå符串----Unicodeååèå符串----Unicodeååèå符串"""
#-- Pythonçå符串类å
"""Python2.x"""
# 1.str表示8使æ¬åäºè¿å¶æ°æ®
# 2.unicode表示宽å符Unicodeææ¬
"""Python3.x"""
# 1.str表示Unicodeææ¬ï¼8使è
æ´å®½ï¼
# 2.bytes表示ä¸å¯åçäºè¿å¶æ°æ®
# 3.bytearrayæ¯ä¸ç§å¯åçbytesç±»å
#-- å符ç¼ç æ¹æ³
"""ASCII""" # ä¸ä¸ªåèï¼åªå
å«è±æå符ï¼0å°127ï¼å
±128个å符ï¼å©ç¨å½æ°å¯ä»¥è¿è¡åç¬¦åæ°åçç¸äºè½¬æ¢
ord('a') # å符açASCIIç 为97ï¼æä»¥è¿éè¿å97
chr(97) # åä¸è¾¹çè¿ç¨ç¸åï¼è¿åå符'a'
"""Latin-1""" # ä¸ä¸ªåèï¼å
å«ç¹æ®å符ï¼0å°255ï¼å
±256个å符ï¼ç¸å½äºå¯¹ASCIIç çæ©å±
chr(196) # è¿åä¸ä¸ªç¹æ®å符ï¼Ã
"""Unicode""" # 宽å符ï¼ä¸ä¸ªå符å
å«å¤ä¸ªåèï¼ä¸è¬ç¨äºäºæ´²çå符éï¼æ¯å¦ä¸ææå¥½å ä¸å
"""UTF-8""" # å¯ååèæ°ï¼å°äº128çå符表示为å个åèï¼128å°0X7FFä¹é´ç代ç 转æ¢ä¸ºä¸¤ä¸ªåèï¼0X7FF以ä¸ç代ç 转æ¢ä¸º3æ4个åè
# 注æï¼å¯ä»¥çåºæ¥ï¼ASCIIç æ¯Latin-1åUTF-8çä¸ä¸ªåé
# 注æï¼utf-8æ¯unicodeçä¸ç§å®ç°æ¹å¼ï¼unicodeãgbkãgb2312æ¯ç¼ç å符é
#-- æ¥çPythonä¸çå符串ç¼ç åç§°ï¼æ¥çç³»ç»çç¼ç
import encodings
help(encoding)
import sys
sys.platform # 'win64'
sys.getdefaultencoding() # 'utf-8'
sys.getdefaultencoding() # è¿åå½åç³»ç»å¹³å°çç¼ç ç±»å
sys.getsizeof(object) # è¿åobjectå æçbytesç大å°
#-- æºæä»¶å符éç¼ç 声æ: æ·»å æ³¨éæ¥æå®æ³è¦çç¼ç å½¢å¼ ä»èæ¹åé»è®¤å¼ 注éå¿
é¡»åºç°å¨èæ¬ç第ä¸è¡æè
第äºè¡
"""说æï¼å
¶å®è¿éåªä¼æ£æ¥#åcoding:utf-8ï¼å
¶ä½çåç¬¦é½æ¯ä¸ºäºç¾è§å ä¸ç"""
# _*_ coding: utf-8 _*_
# coding = utf-8
#-- #ç¼ç : å符串 --> åå§åè #è§£ç : åå§åè --> å符串
#-- Python3.xä¸çå符串åºç¨
s = '...' # æå»ºä¸ä¸ªstr对象ï¼ä¸å¯å对象
b = b'...' # æå»ºä¸ä¸ªbytes对象ï¼ä¸å¯å对象
s[0], b[0] # è¿å('.', 113)
s[1:], b[1:] # è¿å('..', b'..')
B = B"""
xxxx
yyyy
"""
# B = b'\nxxxx\nyyyy\n'
# ç¼ç ï¼å°strå符串转å为å
¶raw byteså½¢å¼ï¼
str.encode(encoding = 'utf-8', errors = 'strict')
bytes(str, encoding)
# ç¼ç ä¾åï¼
S = 'egg'
S.encode() # b'egg'
bytes(S, encoding = 'ascii') # b'egg'
# è§£ç ï¼å°raw byteså符串转å为strå½¢å¼ï¼
bytes.decode(encoding = 'utf-8', errors = 'strict')
str(bytes_or_buffer[, encoding[, errors]])
# è§£ç ä¾åï¼
B = b'spam'
B.decode() # 'spam'
str(B) # "b'spam'"ï¼ä¸å¸¦ç¼ç çstrè°ç¨ï¼ç»æä¸ºæå°è¯¥bytes对象
str(B, encoding = 'ascii')# 'spam'ï¼å¸¦ç¼ç çstrè°ç¨ï¼ç»æä¸ºè½¬å该bytes对象
#-- Python2.xçç¼ç é®é¢
u = u'æ±'
print repr(u) # u'\xba\xba'
s = u.encode('UTF-8')
print repr(s) # '\xc2\xba\xc2\xba'
u2 = s.decode('UTF-8')
print repr(u2) # u'\xba\xba'
# 对unicodeè¿è¡è§£ç æ¯é误ç
s2 = u.decode('UTF-8') # UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-1: ordinal not in range(128)
# åæ ·ï¼å¯¹strè¿è¡ç¼ç 乿¯é误ç
u2 = s.encode('UTF-8') # UnicodeDecodeError: 'ascii' codec can't decode byte 0xc2 in position 0: ordinal not in range(128)
#-- bytes对象
B = b'abc'
B = bytes('abc', 'ascii')
B = bytes([97, 98, 99])
B = 'abc'.encode()
# byteså¯¹è±¡çæ¹æ³è°ç¨åºæ¬åstrç±»åä¸è´ ä½:B[0]è¿åçæ¯ASCIIç å¼97, è䏿¯b'a'
#-- #ææ¬æä»¶: æ ¹æ®Unicodeç¼ç æ¥è§£éæä»¶å
容ï¼è¦ä¹æ¯å¹³å°çé»è®¤ç¼ç ï¼è¦ä¹æ¯æå®çç¼ç ç±»å
# äºè¿å¶æä»¶ï¼è¡¨ç¤ºåèå¼çæ´æ°çä¸ä¸ªåºå open('bin.txt', 'rb')
#-- Unicodeæä»¶
s = 'A\xc4B\xe8C' # s = 'A?BèC' len(s) = 5
#æå¨ç¼ç
l = s.encode('latin-1') # l = b'A\xc4B\xe8C' len(l) = 5
u = s.encode('utf-8') # u = b'A\xc3\x84B\xc3\xa8C' len(u) = 7
#æä»¶è¾åºç¼ç
open('latindata', 'w', encoding = 'latin-1').write(s)
l = open('latindata', 'rb').read() # l = b'A\xc4B\xe8C' len(l) = 5
open('uft8data', 'w', encoding = 'utf-8').write(s)
u = open('uft8data', 'rb').read() # u = b'A\xc3\x84B\xc3\xa8C' len(u) = 7
#æä»¶è¾å
¥ç¼ç
s = open('latindata', 'r', encoding = 'latin-1').read() # s = 'A?BèC' len(s) = 5
s = open('latindata', 'rb').read().decode('latin-1') # s = 'A?BèC' len(s) = 5
s = open('utf8data', 'r', encoding = 'utf-8').read() # s = 'A?BèC' len(s) = 5
s = open('utf8data', 'rb').read().decode('utf-8') # s = 'A?BèC' len(s) = 5
"""å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»----å
¶ä»"""
#-- Pythonå®ç°ä»»ææ·±åº¦çèµå¼ ä¾å¦a[0] = 'value1'; a[1][2] = 'value2'; a[3][4][5] = 'value3'
class MyDict(dict):
def __setitem__(self, key, value): # è¯¥å½æ°ä¸å任使¹å¨ è¿éåªæ¯ä¸ºäºè¾åº
print('setitem:', key, value, self)
super().__setitem__(key, value)
def __getitem__(self, item): # ä¸»è¦æå·§å¨è¯¥å½æ°
print('getitem:', item, self) # è¾åºä¿¡æ¯
# åºæ¬æè·¯: a[1][2]èµå¼æ¶ éè¦å
ååºa[1] ç¶åç»a[1]ç[2]èµå¼
if item not in self: # 妿a[1]ä¸åå¨ åéè¦æ°å»ºä¸ä¸ªdict 并使å¾a[1] = dict
temp = MyDict() # æ°å»ºçdict: temp
super().__setitem__(item, temp) # èµå¼a[1] = temp
return temp # è¿åtemp 使å¾temp[2] = valueææ
return super().__getitem__(item) # 妿a[1]åå¨ åç´æ¥è¿åa[1]
# ä¾å:
test = MyDict()
test[0] = 'test'
print(test[0])
test[1][2] = 'test1'
print(test[1][2])
test[1][3] = 'test2'
print(test[1][3])
#-- Pythonä¸çå¤ç»´æ°ç»
lists = [0] * 3 # æ©å±listï¼ç»æä¸º[0, 0, 0]
lists = [[]] * 3 # å¤ç»´æ°ç»ï¼ç»æä¸º[[], [], []]ï¼ä½æé®é¢ï¼å¾ä¸ç
lists[0].append(3) # ææçå°çç»æ[[3], [], []]ï¼å®é
ç»æ[[3], [3], [3]]ï¼åå ï¼list*næä½ï¼æ¯æµ
æ·è´ï¼å¦ä½é¿å
ï¼å¾ä¸ç
lists = [[] for i in range(3)] # å¤ç»´æ°ç»ï¼ç»æä¸º[[], [], []]
lists[0].append(3) # ç»æä¸º[[3], [], []]
lists[1].append(6) # ç»æä¸º[[3], [6], []]
lists[2].append(9) # ç»æä¸º[[3], [6], [9]]
lists = [[[] for j in range(4)] for i in range(3)] # 3è¡4åï¼ä¸æ¯ä¸ä¸ªå
ç´ ä¸º[]