ãã1.æ§è½
ããPy3.0è¿è¡ pystone benchmarkçé度æ¯Py2.5æ
¢30%ãGuido认为Py3.0ææ大çä¼å空é´ï¼å¨å符串åæ´å½¢æä½ä¸å¯ä»¥åå¾å¾å¥½çä¼åç»æã
ããPy3.1æ§è½æ¯Py2.5æ
¢15%ï¼è¿æå¾å¤§çæå空é´ã
ãã2.ç¼ç
ããPy3.Xæºç æ件é»è®¤ä½¿ç¨utf-8ç¼ç ï¼è¿å°±ä½¿å¾ä»¥ä¸ä»£ç æ¯åæ³çï¼
ãã>>> ä¸å½ = 'china'
ãã>>>print(ä¸å½)
ããchina
ãã3. è¯æ³
ãã1ï¼å»é¤äº<>ï¼å
¨é¨æ¹ç¨!=
ãã2ï¼å»é¤``ï¼å
¨é¨æ¹ç¨repr()
ãã3ï¼å
³é®è¯å å
¥as åwithï¼è¿æTrue,False,None
ãã4ï¼æ´åé¤æ³è¿åæµ®ç¹æ°ï¼è¦å¾å°æ´åç»æï¼è¯·ä½¿ç¨//
ãã5ï¼å å
¥nonlocalè¯å¥ã使ç¨noclocal xå¯ä»¥ç´æ¥ææ´¾å¤å´ï¼éå
¨å±ï¼åé
ãã6ï¼å»é¤printè¯å¥ï¼å å
¥print()å½æ°å®ç°ç¸åçåè½ãåæ ·çè¿æ execè¯å¥ï¼å·²ç»æ¹ä¸ºexec()å½æ°
ããä¾å¦ï¼
ãã2.X: print "The answer is", 2*2
ãã3.X: print("The answer is", 2*2)
ãã2.X: print x, # 使ç¨éå·ç»å°¾ç¦æ¢æ¢è¡
ãã3.X: print(x, end=" ") # 使ç¨ç©ºæ ¼ä»£æ¿æ¢è¡
ãã2.X: print # è¾åºæ°è¡
ãã3.X: print() # è¾åºæ°è¡
ãã2.X: print >>sys.stderr, "fatal error"
ãã3.X: print("fatal error", file=sys.stderr)
ãã2.X: print (x, y) # è¾åºrepr((x, y))
ãã3.X: print((x, y)) # ä¸åäºprint(x, y)!
ãã7ï¼æ¹åäºé¡ºåºæä½ç¬¦çè¡ä¸ºï¼ä¾å¦x<yï¼å½xåyç±»åä¸å¹é
æ¶æåºTypeErrorèä¸æ¯è¿åéå³ç boolå¼
ãã8ï¼è¾å
¥å½æ°æ¹åäºï¼å é¤äºraw_inputï¼ç¨input代æ¿ï¼
ãã2.X:guess = int(raw_input('Enter an integer : ')) # 读åé®çè¾å
¥çæ¹æ³
ãã3.X:guess = int(input('Enter an integer : '))
ãã9ï¼å»é¤å
ç»åæ°è§£å
ãä¸è½def(a, (b, c)):passè¿æ ·å®ä¹å½æ°äº
ãã10ï¼æ°å¼ç8è¿å¶ååéï¼ç¸åºå°ä¿®æ¹äºoct()å½æ°ã
ãã2.Xçæ¹å¼å¦ä¸ï¼
ãã>>> 0666
ãã438
ãã>>> oct(438)
ãã'0666'
ãã3.Xè¿æ ·ï¼
ãã>>> 0666
ããSyntaxError: invalid token (<pyshell#63>, line 1)
ãã>>> 0o666
ãã438
ãã>>> oct(438)
ãã'0o666'
ãã11ï¼å¢å äº 2è¿å¶åé¢éåbin()å½æ°
ãã>>> bin(438)
ãã'0b110110110'
ãã>>> _438 = '0b110110110'
ãã>>> _438
ãã'0b110110110'
ãã12ï¼æ©å±çå¯è¿ä»£è§£å
ãå¨Py3.X éï¼a, b, *rest = seqå *rest, a = seqé½æ¯åæ³çï¼åªè¦æ±ä¸¤ç¹ï¼restæ¯list对象åseqæ¯å¯è¿ä»£çã
ãã13ï¼æ°çsuper()ï¼å¯ä»¥ä¸åç»super()ä¼ åæ°ï¼
ãã>>> class C(object):
ããdef __init__(self, a):
ããprint('C', a)
ãã>>> class D(C):
ããdef __init(self, a):
ããsuper().__init__(a) # æ åæ°è°ç¨super()
ãã>>> D(8)
ããC 8
ãã<__main__.D object at 0x00D7ED90>
ãã14ï¼æ°çmetaclassè¯æ³ï¼
ããclass Foo(*bases, **kwds):
ããpass
ãã15ï¼æ¯æclass decoratorãç¨æ³ä¸å½æ°decoratorä¸æ ·ï¼
ãã>>> def foo(cls_a):
ããdef print_func(self):
ããprint('Hello, world!')
ããcls_a.print = print_func
ããreturn cls_a
ãã>>> @foo
ããclass C(object):
ããpass
ãã>>> C().print()
ããHello, world!
ããclass decoratorå¯ä»¥ç¨æ¥ç©ç©ç¸ç«æ¢å¤ªåç大ææãæ´å¤è¯·åé
PEP 3129
ãã4. å符串ååè串
ãã1ï¼ç°å¨å符串åªæsträ¸ç§ç±»åï¼ä½å®è·2.xçæ¬çunicodeå ä¹ä¸æ ·ã
ãã2ï¼å
³äºåè串ï¼è¯·åé
âæ°æ®ç±»åâç第2æ¡ç®
ãã5.æ°æ®ç±»å
ãã1ï¼Py3.Xå»é¤äºlongç±»åï¼ç°å¨åªæä¸ç§æ´åââintï¼ä½å®çè¡ä¸ºå°±å2.Xçæ¬çlong
ãã2ï¼æ°å¢äºbytesç±»åï¼å¯¹åºäº2.Xçæ¬çå
«ä½ä¸²ï¼å®ä¹ä¸ä¸ªbytesåé¢éçæ¹æ³å¦ä¸ï¼
ãã>>> b = b'china'
ãã>>> type(b)
ãã<type 'bytes'>
ããstr对象åbytes对象å¯ä»¥ä½¿ç¨.encode() (str -> bytes) or .decode() (bytes -> str)æ¹æ³ç¸äºè½¬åã
ãã>>> s = b.decode()
ãã>>> s
ãã'china'
ãã>>> b1 = s.encode()
ãã>>> b1
ããb'china'
ãã3ï¼dictç.keys()ã.items å.values()æ¹æ³è¿åè¿ä»£å¨ï¼èä¹åçiterkeys()çå½æ°é½è¢«åºå¼ãåæ¶å»æçè¿ædict.has_key()ï¼ç¨ inæ¿ä»£å®å§
ãã6.é¢å对象
ãã1ï¼å¼å
¥æ½è±¡åºç±»ï¼Abstraact Base Classesï¼ABCsï¼ã
ãã2ï¼å®¹å¨ç±»åè¿ä»£å¨ç±»è¢«ABCsåï¼æ以cellections模åéçç±»åæ¯Py2.5å¤äºå¾å¤ã
ãã>>> import collections
ãã>>> print('\n'.join(dir(collections)))
ããCallable
ããContainer
ããHashable
ããItemsView
ããIterable
ããIterator
ããKeysView
ããMapping
ããMappingView
ããMutableMapping
ããMutableSequence
ããMutableSet
ããNamedTuple
ããSequence
ããSet
ããSized
ããValuesView
ãã__all__
ãã__builtins__
ãã__doc__
ãã__file__
ãã__name__
ãã_abcoll
ãã_itemgetter
ãã_sys
ããdefaultdict
ããdeque
ããå¦å¤ï¼æ°å¼ç±»åä¹è¢«ABCsåãå
³äºè¿ä¸¤ç¹ï¼è¯·åé
PEP 3119åPEP 3141ã
ãã3ï¼è¿ä»£å¨çnext()æ¹æ³æ¹å为__next__()ï¼å¹¶å¢å å
ç½®å½æ°next()ï¼ç¨ä»¥è°ç¨è¿ä»£å¨ç__next__()æ¹æ³
ãã4ï¼å¢å äº@abstractmethodå @abstractproperty两个 decoratorï¼ç¼åæ½è±¡æ¹æ³ï¼å±æ§ï¼æ´å æ¹ä¾¿ã
ãã7.å¼å¸¸
ãã1ï¼æ以å¼å¸¸é½ä» BaseException继æ¿ï¼å¹¶å é¤äºStardardError
ãã2ï¼å»é¤äºå¼å¸¸ç±»çåºåè¡ä¸ºå.messageå±æ§
ãã3ï¼ç¨ raise Exception(args)ä»£æ¿ raise Exception, argsè¯æ³
ãã4ï¼æè·å¼å¸¸çè¯æ³æ¹åï¼å¼å
¥äºaså
³é®åæ¥æ è¯å¼å¸¸å®ä¾ï¼å¨Py2.5ä¸ï¼
ãã>>> try:
ãã... raise NotImplementedError('Error')
ãã... except NotImplementedError, error:
ãã... print error.message
ãã...
ããError
ããå¨Py3.0ä¸ï¼
ãã>>> try:
ããraise NotImplementedError('Error')
ããexcept NotImplementedError as error: #注æè¿ä¸ª as
ããprint(str(error))
ããError
ãã5ï¼å¼å¸¸é¾ï¼å 为__context__å¨3.0a1çæ¬ä¸æ²¡æå®ç°
ãã8.模ååå¨
ãã1ï¼ç§»é¤äºcPickle模åï¼å¯ä»¥ä½¿ç¨pickle模å代æ¿ãæç»æ们å°ä¼æä¸ä¸ªéæé«æç模åã
ãã2ï¼ç§»é¤äºimageop模å
ãã3ï¼ç§»é¤äº audiodev, Bastion, bsddb185, exceptions, linuxaudiodev, md5, MimeWriter, mimify, popen2,
ããrexec, sets, sha, stringold, strop, sunaudiodev, timingåxmllib模å
ãã4ï¼ç§»é¤äºbsddb模å(åç¬åå¸ï¼å¯ä»¥ä»
http://www.jcea.es/programacion/pybsddb.htmè·å)
ãã5ï¼ç§»é¤äºnew模å
ãã6ï¼os.tmpnam()åos.tmpfile()å½æ°è¢«ç§»å¨å°tmpfile模åä¸
ãã7ï¼tokenize模åç°å¨ä½¿ç¨byteså·¥ä½ã主è¦çå
¥å£ç¹ä¸åæ¯generate_tokensï¼èæ¯ tokenize.tokenize()
ãã9.å
¶å®
ãã1ï¼xrange() æ¹å为range()ï¼è¦æ³ä½¿ç¨range()è·å¾ä¸ä¸ªlistï¼å¿
é¡»æ¾å¼è°ç¨ï¼
ãã>>> list(range(10))
ãã[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
ãã2ï¼bytes对象ä¸è½hashï¼ä¹ä¸æ¯æ b.lower()ãb.strip()åb.split()æ¹æ³ï¼ä½å¯¹äºå两è
å¯ä»¥ä½¿ç¨ b.strip(bâ
ãã\n\t\r \fâ)åb.split(bâ â)æ¥è¾¾å°ç¸åç®ç
ãã3ï¼zip()ãmap()åfilter()é½è¿åè¿ä»£å¨ãèapply()ã callable()ãcoerce()ã execfile()ãreduce()åreload()å½æ°é½è¢«å»é¤äº
ããç°å¨å¯ä»¥ä½¿ç¨hasattr()æ¥æ¿æ¢ callable(). hasattr()çè¯æ³å¦ï¼hasattr(string, '__name__')
ãã4ï¼string.lettersåç¸å
³ç.lowercaseå.uppercase被å»é¤ï¼è¯·æ¹ç¨string.ascii_letters ç
ãã5ï¼å¦æx < yçä¸è½æ¯è¾ï¼æåºTypeErrorå¼å¸¸ã2.xçæ¬æ¯è¿å伪éæºå¸å°å¼ç
ãã6ï¼__getslice__ç³»åæå被åºå¼ãa[i:j]æ ¹æ®ä¸ä¸æ转æ¢ä¸ºa.__getitem__(slice(I, j))æ __setitem__å
ãã__delitem__è°ç¨
ãã7ï¼file类被åºå¼ï¼å¨Py2.5ä¸ï¼
ãã>>> file
ãã<type 'file'>
ããå¨Py3.Xä¸ï¼
ãã>>> file
ããTraceback (most recent call last):
ããFile "<pyshell#120>", line 1, in <module>
ããfile
ããNameError: name 'file' is not defined