锘??xml version="1.0" encoding="utf-8" standalone="yes"?>
d = {"server":"mpilgrim", "database":"master"}
li = ["a", "b", "mpilgrim", "z", "example"]
Tuple 鏄笉鍙彉鐨?list銆備竴鏃﹀垱寤轟簡涓涓?tuple錛屽氨涓嶈兘浠ヤ換浣曟柟寮忔敼鍙樺畠
t = ("a", "b", "mpilgrim", "z", "example")
榪炴帴 list 涓庡垎鍓插瓧絎︿覆
>>> li = ['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
>>> s = ";".join(li)
>>> s
'server=mpilgrim;uid=sa;database=master;pwd=secret'
>>> s.split(";")
['server=mpilgrim', 'uid=sa', 'database=master', 'pwd=secret']
>>> s.split(";", 1)
['server=mpilgrim', 'uid=sa;database=master;pwd=secret']
浣跨敤 type銆乻tr銆乨ir 鍜屽叾瀹冨唴緗嚱鏁?/p>
4.3.2. str 鍑芥暟
str 灝嗘暟鎹己鍒惰漿鎹負瀛楃涓層傛瘡縐嶆暟鎹被鍨嬮兘鍙互寮哄埗杞崲涓哄瓧絎︿覆銆?
渚?4.6. str 浠嬬粛
>>> str(1)
'1'
>>> horsemen = ['war', 'pestilence', 'famine']
>>> horsemen
['war', 'pestilence', 'famine']
>>> horsemen.append('Powerbuilder')
>>> str(horsemen)
"['war', 'pestilence', 'famine', 'Powerbuilder']"
>>> str(odbchelper)
"<module 'odbchelper' from 'c:\\docbook\\dip\\py\\odbchelper.py'>"
>>> str(None)
'None' 瀵逛簬綆鍗曠殑鏁版嵁綾誨瀷姣斿鏁村瀷錛屼綘鍙互棰勬枡鍒?str 鐨勬甯稿伐浣滐紝鍥犱負鍑犱箮姣忕璇█閮芥湁涓涓?/p>
灝嗘暣鍨嬭漿鍖栦負瀛楃涓茬殑鍑芥暟銆?nbsp;
鐒惰?str 鍙互浣滅敤浜庝換浣曟暟鎹被鍨嬬殑浠諱綍瀵硅薄銆傝繖閲屽畠浣滅敤浜庝竴涓浂紕庢瀯寤虹殑鍒楄〃銆?nbsp;
str 榪樺厑璁鎬綔鐢ㄤ簬妯″潡銆傛敞鎰忔ā鍧楃殑瀛楃涓插艦寮忚〃紺哄寘鍚簡妯″潡鍦ㄧ鐩樹笂鐨勮礬寰勫悕錛屾墍浠ヤ綘鐨勬樉紺?/p>
緇撴灉灝嗕細鏈夋墍涓嶅悓銆?nbsp;
str 鐨勪竴涓粏灝忎絾閲嶈鐨勮涓烘槸瀹冨彲浠ヤ綔鐢ㄤ簬 None錛孨one 鏄?Python 鐨?null 鍊箋傝繖涓皟鐢ㄨ繑鍥炲瓧絎?/p>
涓?'None'銆備綘灝嗕細浣跨敤榪欎竴鐐規潵鏀硅繘浣犵殑 info 鍑芥暟錛岃繖涓鐐逛綘寰堝揩灝變細鐪嬪埌銆?nbsp;
dir 鍑芥暟榪斿洖浠繪剰瀵硅薄鐨勫睘鎬у拰鏂規硶鍒楄〃錛屽寘鎷ā鍧楀璞°佸嚱鏁板璞°佸瓧絎︿覆瀵硅薄銆佸垪琛ㄥ璞°佸瓧
鍏稿璞?…… 鐩稿綋澶氱殑涓滆タ銆?
渚?4.7. dir 浠嬬粛
>>> li = []
>>> dir(li)
['append', 'count', 'extend', 'index', 'insert',
'pop', 'remove', 'reverse', 'sort']
>>> d = {}
>>> dir(d)
['clear', 'copy', 'get', 'has_key', 'items', 'keys', 'setdefault', 'update', 'values']
>>> import odbchelper
>>> dir(odbchelper)
['__builtins__', '__doc__', '__file__', '__name__', 'buildConnectionString']
鏈鍚庢槸 callable 鍑芥暟錛屽畠鎺ユ敹浠諱綍瀵硅薄浣滀負鍙傛暟錛屽鏋滃弬鏁板璞℃槸鍙皟鐢ㄧ殑錛岃繑鍥?True錛涘惁鍒欒繑鍥?
False銆傚彲璋冪敤瀵硅薄鍖呮嫭鍑芥暟銆佺被鏂規硶錛岀敋鑷崇被鑷韓 (涓嬩竴绔犲皢鏇村鐨勫叧娉ㄧ被)銆?
渚?4.8. callable 浠嬬粛
>>> import string
>>> string.punctuation
'!"#$%&\'()*+,-./:;<=>?@[\\]^_`{|}~'
>>> string.join
<function join at 00C55A7C>
>>> callable(string.punctuation)
False
>>> callable(string.join)
True
浣犲凡緇忕煡閬?Python 鍑芥暟鏄璞°備綘涓嶇煡閬撶殑鏄紝浣跨敤 getattr 鍑芥暟錛屽彲浠ュ緱鍒頒竴涓洿鍒拌繍琛屾椂鎵嶇煡
閬撳悕縐扮殑鍑芥暟鐨勫紩鐢ㄣ?
渚?4.10. getattr 浠嬬粛
>>> li = ["Larry", "Curly"]
>>> li.pop
<built-in method pop of list object at 010DF884>
>>> getattr(li, "pop")
<built-in method pop of list object at 010DF884>
>>> getattr(li, "append")("Moe")
>>> li
["Larry", "Curly", "Moe"]
>>> getattr({}, "clear")
<built-in method clear of dictionary object at 00F113D4>
>>> getattr((), "pop")
Traceback (innermost last):
File "<interactive input>", line 1, in ?
AttributeError: 'tuple' object has no attribute 'pop'
4.4.1. 鐢ㄤ簬妯″潡鐨?getattr
getattr 涓嶄粎浠呴傜敤浜庡唴緗暟鎹被鍨嬶紝涔熷彲浣滅敤浜庢ā鍧椼?
渚?4.11. apihelper.py 涓殑 getattr 鍑芥暟
>>> import odbchelper
>>> odbchelper.buildConnectionString
<function buildConnectionString at 00D18DD4>
>>> getattr(odbchelper, "buildConnectionString")
<function buildConnectionString at 00D18DD4>
>>> object = odbchelper
>>> method = "buildConnectionString"
>>> getattr(object, method)
<function buildConnectionString at 00D18DD4>
>>> type(getattr(object, method))
<type 'function'>
>>> import types
>>> type(getattr(object, method)) == types.FunctionType
True
>>> callable(getattr(object, method))
True
浣跨敤 getattr錛屼綘鑳藉鑾峰緱鍚屼竴鍑芥暟鐨勫悓涓寮曠敤銆傞氬父錛実etattr(object, "attribute") 絳変環浜?
object.attribute銆傚鏋?object 鏄竴涓ā鍧楃殑璇濓紝閭d箞 attribute 鍙兘鏄畾涔夊湪妯″潡涓殑浠諱綍涓滆タ錛氬嚱鏁?/p>
銆佺被鎴栬呭叏灞鍙橀噺銆?/p>
灝辨槸鐩稿綋浜庡嚱鏁扮殑鎸囬拡
渚?4.12. 浣跨敤getattr 鍒涘緩鍒嗗彂鑰?
import statsout
def output(data, format="text"):
output_function = getattr(statsout, "output_%s" % format)
return output_function(data)
output 鍑芥暟鎺ユ敹涓涓繀澶囧弬鏁?data錛屽拰涓涓彲閫夊弬鏁?format銆傚鏋滄病鏈夋寚瀹?format 鍙傛暟錛屽叾緙虹渷
鍊兼槸 text 騫跺畬鎴愭櫘閫氭枃鏈緭鍑哄嚱鏁扮殑璋冪敤銆?nbsp;
浣犲彲浠ヨ繛鎺?format 鍙傛暟鍊煎拰 "output_" 鏉ュ垱寤轟竴涓嚱鏁板悕縐頒綔涓哄弬鏁板鹼紝鐒跺悗浠?statsout 妯″潡涓彇
寰楄鍑芥暟銆傝繖縐嶆柟寮忓厑璁鎬粖鍚庡緢瀹規槗鍦版墿灞曠▼搴忎互鏀寔鍏跺畠鐨勮緭鍑烘牸寮忥紝鑰屼笖鏃犻渶淇敼鍒嗗彂鍑芥暟銆?/p>
鎵瑕佸仛鐨勪粎浠呮槸鍚?statsout 涓坊鍔犱竴涓嚱鏁幫紝姣斿 output_pdf錛屼箣鍚庡彧瑕佸皢 “pdf” 浣滀負 format 鐨勫弬
鏁板間紶閫掔粰 output 鍑芥暟鍗沖彲銆?nbsp;
鐜板湪浣犲彲浠ョ畝鍗曞湴璋冪敤杈撳嚭鍑芥暟錛屽氨鍍忚皟鐢ㄥ叾瀹冨嚱鏁頒竴鏍楓俹utput_function 鍙橀噺鏄寚鍚?statsout 妯?/p>
鍧椾腑鐩稿簲鍑芥暟鐨勫紩鐢ㄣ?nbsp;
浣犳槸鍚﹀彂鐜板墠闈㈢ず渚嬬殑涓涓?Bug錛熷嵆瀛楃涓插拰鍑芥暟涔嬮棿鐨勬澗鑰﹀悎錛岃屼笖娌℃湁閿欒媯鏌ャ傚鏋滅敤鎴蜂紶
鍏ヤ竴涓牸寮忓弬鏁幫紝浣嗘槸鍦?statsout 涓病鏈夊畾涔夌浉搴旂殑鏍煎紡杈撳嚭鍑芥暟錛屼細鍙戠敓浠涔堝憿錛熻繕濂斤紝getattr
浼氳繑鍥?None錛屽畠浼氬彇浠d竴涓湁鏁堝嚱鏁板茍琚祴鍊肩粰 output_function錛岀劧鍚庝笅涓琛岃皟鐢ㄥ嚱鏁扮殑璇彞灝嗕細
澶辮觸騫舵姏鍑轟竴涓紓甯搞傝繖縐嶆柟寮忎笉濂姐?
鍊煎緱搴嗗垢鐨勬槸錛実etattr 鑳藉浣跨敤鍙夌殑絎笁涓弬鏁幫紝涓涓己鐪佽繑鍥炲箋?/p>
[mapping-expression for element in source-list if filter-expression]
>>> li = ["a", "mpilgrim", "foo", "b", "c", "b", "d", "d"]
>>> [elem for elem in li if len(elem) > 1]
['mpilgrim', 'foo']
>>> [elem for elem in li if elem != "b"]
['a', 'mpilgrim', 'foo', 'c', 'd', 'd']
>>> [elem for elem in li if li.count(elem) == 1]
['a', 'mpilgrim', 'foo', 'c']
浣跨敤 and 鏃訛紝鍦ㄥ竷灝旂幆澧冧腑浠庡乏鍒板彸婕旂畻琛ㄨ揪寮忕殑鍊箋?銆?'銆乕]銆?)銆亄}銆丯one 鍦ㄥ竷灝旂幆澧冧腑涓哄亣錛?/p>
鍏跺畠浠諱綍涓滆タ閮戒負鐪熴傝繕濂斤紝鍑犱箮鏄墍鏈変笢瑗褲傞粯璁ゆ儏鍐典笅錛屽竷灝旂幆澧冧腑鐨勭被瀹炰緥涓虹湡錛屼絾鏄綘鍙?/p>
浠ュ湪綾諱腑瀹氫箟鐗瑰畾鐨勬柟娉曚嬌寰楃被瀹炰緥鐨勬紨綆楀間負鍋囥?/p>
4.6.1. 浣跨敤 and-or 鎶宸?
渚?4.17. and-or 鎶宸т粙緇?
>>> a = "first"
>>> b = "second"
>>> 1 and a or b
'first'
>>> 0 and a or b
'second'
榪欎釜璇硶鐪嬭搗鏉ョ被浼間簬 C 璇█涓殑 bool ? a : b 琛ㄨ揪寮忋傛暣涓〃杈懼紡浠庡乏鍒板彸榪涜婕旂畻錛屾墍浠ュ厛榪?/p>
琛?and 琛ㄨ揪寮忕殑婕旂畻銆? and 'first' 婕旂畻鍊間負 'first'錛岀劧鍚?'first' or 'second' 鐨勬紨綆楀間負 'first'銆?nbsp;
0 and 'first' 婕旂畻鍊間負 False錛岀劧鍚?0 or 'second' 婕旂畻鍊間負 'second'銆?nbsp;
鐒惰岋紝鐢變簬榪欑 Python 琛ㄨ揪寮忓崟鍗曞彧鏄繘琛屽竷灝旈昏緫榪愮畻錛屽茍涓嶆槸璇█鐨勭壒瀹氭瀯鎴愶紝榪欐槸 and-or
鎶宸у拰 C 璇█涓殑 bool ? a : b 璇硶闈炲父閲嶈鐨勪笉鍚屻傚鏋?a 涓哄亣錛岃〃杈懼紡灝變笉浼氭寜浣犳湡鏈涚殑閭f牱
宸ヤ綔浜嗐?浣犺兘鐭ラ亾鎴戣榪欎釜闂鎶樿吘榪囧悧錛熶笉姝竴嬈★紵)
Python 鏀寔涓縐嶆湁瓚g殑璇硶錛屽畠鍏佽浣犲揩閫熷畾涔夊崟琛岀殑鏈灝忓嚱鏁般傝繖浜涘彨鍋?lambda 鐨勫嚱鏁幫紝鏄粠
Lisp 鍊熺敤鏉ョ殑錛屽彲浠ョ敤鍦ㄤ換浣曢渶瑕佸嚱鏁扮殑鍦版柟銆?br />
渚?4.20. lambda 鍑芥暟浠嬬粛
>>> def f(x):
... return x*2
...
>>> f(3)
6
>>> g = lambda x: x*2
>>> g(3)
6
>>> (lambda x: x*2)(3)
6
鎬葷殑鏉ヨ錛宭ambda 鍑芥暟鍙互鎺ユ敹浠繪剰澶氫釜鍙傛暟 (鍖呮嫭鍙夊弬鏁? 騫朵笖榪斿洖鍗曚釜琛ㄨ揪寮忕殑鍊箋俵ambda
鍑芥暟涓嶈兘鍖呭惈鍛戒護錛屽寘鍚殑琛ㄨ揪寮忎笉鑳借秴榪囦竴涓備笉瑕佽瘯鍥懼悜 lambda 鍑芥暟涓鍏ュお澶氱殑涓滆タ錛涘
鏋滀綘闇瑕佹洿澶嶆潅鐨勪笢瑗匡紝搴旇瀹氫箟涓涓櫘閫氬嚱鏁幫紝鐒跺悗鎯寵瀹冨闀垮氨澶氶暱銆?
渚?4.25. 鎵撳嵃鍒楄〃
>>> li = ['a', 'b', 'c']
>>> print "\n".join(li)
a
b
c 鍦ㄤ綘澶勭悊鍒楄〃鏃訛紝榪欑‘瀹炴槸涓涓湁鐢ㄧ殑璋冭瘯鎶宸с傚湪 Python 涓紝浣犱細鍗佸垎棰戠箒鍦版搷浣滃垪琛ㄣ?nbsp;
鍦?2.2.1 鐗堟湰涔嬪墠錛孭ython 娌℃湁鍗曠嫭鐨勫竷灝旀暟鎹被鍨嬨備負浜嗗譏琛ヨ繖涓己闄鳳紝Python 鍦ㄥ竷灝旂幆澧?(濡?if
璇彞) 涓嚑涔庢帴鍙楁墍鏈変笢瑗匡紝閬靛驚涓嬮潰鐨勮鍒欙細
0 涓?false; 鍏跺畠鎵鏈夋暟鍊肩殕涓?true銆?
絀轟覆 ("") 涓?false; 鍏跺畠鎵鏈夊瓧絎︿覆鐨嗕負 true銆?
絀?list ([]) 涓?false; 鍏跺畠鎵鏈?list 鐨嗕負 true銆?
絀?tuple (()) 涓?false; 鍏跺畠鎵鏈?tuple 鐨嗕負 true銆?
絀?dictionary ({}) 涓?false; 鍏跺畠鎵鏈?dictionary 鐨嗕負 true銆?
涓嬮潰鏄?from module import 鐨勫熀鏈娉曪細
from UserDict import UserDict
瀹冧笌浣犳墍鐔熺煡鐨?import module 璇硶寰堢浉浼鹼紝浣嗘槸鏈変竴涓噸瑕佺殑鍖哄埆錛歎serDict 琚洿鎺ュ鍏ュ埌灞閮?/p>
鍚嶅瓧絀洪棿鍘諱簡錛屾墍浠ュ畠鍙互鐩存帴浣跨敤錛岃屼笉闇瑕佸姞涓婃ā鍧楀悕鐨勯檺瀹氥備綘鍙互瀵煎叆鐙珛鐨勯」鎴栦嬌鐢?
from module import * 鏉ュ鍏ユ墍鏈変笢瑗褲?
Python 涓殑 from module import * 鍍?Java 涓殑 import module.* 錛汸ython 涓殑 import module 鍍?Java
涓殑 import module
浠涔堟椂鍊欎綘搴旇浣跨敤 from module import錛?
濡傛灉浣犺緇忓父璁塊棶妯″潡鐨勫睘鎬у拰鏂規硶錛屼笖涓嶆兂涓閬嶅張涓閬嶅湴鏁插叆妯″潡鍚嶏紝浣跨敤 from module import
銆?
濡傛灉浣犳兂瑕佹湁閫夋嫨鍦板鍏ユ煇浜涘睘鎬у拰鏂規硶錛岃屼笉鎯寵鍏跺畠鐨勶紝浣跨敤 from module import銆?
濡傛灉妯″潡鍖呭惈鐨勫睘鎬у拰鏂規硶涓庝綘鐨勬煇涓ā鍧楀悓鍚嶏紝浣犲繀欏諱嬌鐢?import module 鏉ラ伩鍏嶅悕瀛楀啿紿併?/p>
灝介噺灝戠敤 from module import * 錛屽洜涓哄垽瀹氫竴涓壒孌婄殑鍑芥暟鎴栧睘鎬ф槸浠庡摢鏉ョ殑鏈変簺鍥伴毦錛屽茍涓斾細閫?/p>
鎴愯皟璇曞拰閲嶆瀯閮芥洿鍥伴毦銆?/p>
from UserDict import UserDict
class FileInfo(UserDict):
鍦?Python 涓紝綾葷殑鍩虹被鍙槸綆鍗曞湴鍒楀湪綾誨悕鍚庨潰鐨勫皬鎷彿閲屻備笉鍍忓湪 Java 涓湁涓涓壒孌婄殑
extends 鍏抽敭瀛椼?nbsp;
Python 鏀寔澶氶噸緇ф壙銆傚湪綾誨悕鍚庨潰鐨勫皬鎷彿涓紝浣犲彲浠ュ垪鍑鴻澶氫綘鎯寵鐨勭被鍚嶏紝浠ラ楀彿鍒嗛殧銆?
class FileInfo(UserDict):
"store file metadata"
def __init__(self, filename=None):
UserDict.__init__(self)
self["name"] = filename
涓浜涗吉闈㈠悜瀵硅薄璇█錛屽儚 Powerbuilder 鏈変竴縐?#8220;鎵╁睍”鏋勯犲嚱鏁板拰鍏跺畠浜嬩歡鐨?/p>
姒傚康錛屽嵆鐖剁被鐨勬柟娉曞湪瀛愮被鐨勬柟娉曟墽琛屽墠琚嚜鍔ㄨ皟鐢ㄣ侾ython 涓嶆槸榪欐牱錛屼綘蹇呴』鏄劇ず鍦拌皟鐢ㄥ湪鐖剁被涓殑鍚堥傛柟娉曘?nbsp;
鎴戝憡璇夎繃浣狅紝榪欎釜綾誨儚瀛楀吀涓鏍峰伐浣滐紝閭d箞榪欓噷灝辨槸絎竴涓嵃璞°傛垜浠皢鍙傛暟 filename 璧嬪肩粰瀵硅薄 name 鍏抽敭瀛楋紝浣滀負瀹冪殑鍊箋?nbsp; 娉ㄦ剰 __init__ 鏂規硶浠庝笉榪斿洖涓涓箋?nbsp;
Java涓槸鑷姩璋冪敤榛樿鐨勬棤鍙傜殑鐖剁被鐨勬瀯閫犲嚱鏁?/p>
渚?5.9. 瀹氫箟 UserDict 綾?
class UserDict:
def __init__(self, dict=None):
self.data = {} ×××××××××××××××××××××××××××××××××××瀹氫箟綾葷殑瀹炰緥鍙橀噺
if dict is not None: self.update(dict)
娉ㄦ剰 UserDict 鏄竴涓熀綾伙紝涓嶆槸浠庝換浣曞叾浠栫被緇ф壙鑰屾潵銆?nbsp;
榪欏氨鏄垜浠湪 FileInfo 綾諱腑榪涜浜嗚鐩栫殑 __init__ 鏂規硶銆傛敞鎰忚繖涓埗綾葷殑鍙傛暟鍒楄〃涓庡瓙綾諱笉鍚屻傚緢
濂斤紝姣忎釜瀛愮被鍙互鎷ユ湁鑷凡鐨勫弬鏁伴泦錛屽彧瑕佷嬌鐢ㄦ紜殑鍙傛暟璋冪敤鐖剁被灝卞彲浠ヤ簡銆傝繖閲岀埗綾繪湁涓涓畾
涔夊垵濮嬪肩殑鏂規硶 (閫氳繃鍦?dict 鍙傛暟涓紶鍏ヤ竴涓瓧鍏?錛岃繖涓鏂規硶鎴戜滑鐨?FileInfo 娌℃湁鐢ㄤ笂銆?br />
××××××××××××××××××××××××××××××××涓嶫ava鐨勪笉鍚?#215;××××××××××××××××××××××××××××××××××
涓嶫ava鐨勪笉鍚岋紝
1錛孭ython涓被鐨勭被灞炴ф槸鏄湪綾葷殑鍚庨潰鐩存帴瀹氫箟鐨?br />
2錛岃屽疄渚嬪彉閲忔槸鍦ㄥ湪__init__鏂規硶涓洿鎺ュ畾涔夌殑浣跨敤濡備笅鏂瑰紡self.instancevariable=***瀹氫箟,
3錛岀劧鍚嶱ython涓疄渚嬫柟娉曢兘瑕佹樉紺虹殑鍔犱笂self錛堢浉褰撲簬Java鐨則his)鍙傛暟錛屾柟娉曚腑寮曠敤瀹炰緥鍙?span style="color: red">閲忔椂涔熻閫氳繃self鏉ュ紩鐢?/span>
Python 鏀寔鏁版嵁灞炴?(鍦?Java 鍙仛 “瀹炰緥鍙橀噺”錛屽湪 C++ 涓彨 “鏁版嵁鎴愬憳”)錛屽畠鏄敱鏌愪釜鐗瑰畾鐨勭被瀹?/p>
渚嬫墍鎷ユ湁鐨勬暟鎹傚湪鏈緥涓紝姣忎釜 UserDict 瀹炰緥灝嗘嫢鏈変竴涓?data 鏁版嵁灞炴с傝浠庣被澶栫殑浠g爜寮曠敤
榪欎釜灞炴э紝闇瑕佺敤瀹炰緥鐨勫悕瀛楅檺瀹氬畠錛宨nstance.data錛岄檺瀹氱殑鏂規硶涓庝綘鐢ㄦā鍧楃殑鍚嶅瓧鏉ラ檺瀹氬嚱鏁頒竴
鏍楓傝鍦ㄧ被鐨勫唴閮ㄥ紩鐢ㄤ竴涓暟鎹睘鎬э紝鎴戜滑浣跨敤 self 浣滀負闄愬畾絎︺備範鎯笂錛屾墍鏈夌殑鏁版嵁灞炴ч兘鍦?
__init__ 鏂規硶涓垵濮嬪寲涓烘湁鎰忎箟鐨勫箋傜劧鑰岋紝榪欏茍涓嶆槸蹇呴』鐨勶紝鍥犱負鏁版嵁灞炴э紝鍍忓眬閮ㄥ彉閲忎竴鏍鳳紝
褰撲綘棣栨璧嬬粰瀹冨肩殑鏃跺欑獊鐒朵駭鐢熴?nbsp;
×××××××××××××××××××××××××××××××××涓嶫ava鐨勪笉鍚?#215;×××××××××××××××××××××××××××××××××
Java 鏀寔閫氳繃鍙傛暟鍒楄〃鐨勯噸杞斤紝涔熷氨鏄?涓涓被鍙互鏈夊悓鍚嶇殑澶氫釜鏂規硶錛屼絾榪欎簺鏂規硶鎴栬呮槸鍙傛暟涓?/p>
鏁頒笉鍚岋紝鎴栬呮槸鍙傛暟鐨勭被鍨嬩笉鍚屻?br /> Python 涓ょ閮戒笉鏀寔錛屾諱箣鏄病鏈変換浣曞艦寮忕殑鍑芥暟閲嶈澆銆備竴涓?__init__ 鏂規硶灝辨槸涓涓?__init__ 鏂規硶
錛屼笉綆″畠鏈変粈涔堟牱鐨勫弬鏁般傛瘡涓被鍙兘鏈変竴涓?__init__ 鏂規硶錛屽茍涓斿鏋滀竴涓瓙綾繪嫢鏈変竴涓?__init__
鏂規硶錛屽畠鎬繪槸 瑕嗙洊鐖剁被鐨?__init__ 鏂規硶錛岀敋鑷沖瓙綾誨彲浠ョ敤涓嶅悓鐨勫弬鏁板垪琛ㄦ潵瀹氫箟瀹冦?
鎯蟲兂涓轟粈涔堜笉鏀寔鏂規硶閲嶈澆錛屾槸鍥犱負Python鐨勫弬鏁板彲浠ュ畾涔夐粯璁ゅ疄鍙傦紝鏈夌己鐪佸?/strong>
×××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××××
搴旇鎬繪槸鍦?__init__ 鏂規硶涓粰涓涓疄渚嬬殑鎵鏈夋暟鎹睘鎬ц祴浜堜竴涓垵濮嬪箋傝繖鏍峰仛灝嗕細鑺傜渷浣犲湪鍚庨潰
璋冭瘯鐨勬椂闂達紝涓嶅繀涓烘崟鎹夊洜浣跨敤鏈垵濮嬪寲 (涔熷氨鏄笉瀛樺湪) 鐨勫睘鎬ц屽鑷寸殑 AttributeError 寮傚父璐規椂璐?/p>
鍔涖?
class MP3FileInfo(FileInfo):
mp3file.__class__ is fileinfo.MP3FileInfo true
mp3file.__class__ is fileinfo.FileInfo false
isinstance(mp3file,fileinfo.MP3FileInfo) true
isinstance(mp3file,fileinfo.FileInfo) true
li=[1,2,3]
li2[1,2,3]
li==li2 true 鐩稿綋浜嶫ava鐨別quals()
li is li2 false 鐩稿綋浜嶫ava鐨?=
5.7. 楂樼駭涓撶敤綾繪柟娉?
闄や簡 __getitem__ 鍜?__setitem__ 涔嬪 Python 榪樻湁鏇村鐨勪笓鐢ㄥ嚱鏁般傛煇浜涘彲浠ヨ浣犳ā鎷熷嚭浣犵敋鑷沖彲
鑳戒笉鐭ラ亾鐨勫姛鑳姐?
涓嬮潰鐨勪緥瀛愬皢灞曠ず UserDict 涓浜涘叾浠栦笓鐢ㄦ柟娉曘?
渚?5.16. UserDict 涓洿澶氱殑涓撶敤鏂規硶
def __repr__(self): return repr(self.data)
def __cmp__(self, dict):
if isinstance(dict, UserDict):
return cmp(self.data, dict.data)
else:
return cmp(self.data, dict)
def __len__(self): return len(self.data)
def __delitem__(self, key): del self.data[key] __repr__ 鏄竴涓笓鐢ㄧ殑鏂規硶錛屽湪褰撹皟鐢?repr
(instance) 鏃惰璋冪敤銆俽epr 鍑芥暟鏄竴涓唴緗嚱鏁幫紝瀹冭繑鍥炰竴涓璞$殑瀛楃涓茶〃紺恒傚畠鍙互鐢ㄥ湪浠諱綍
瀵硅薄涓婏紝涓嶄粎浠呮槸綾葷殑瀹炰緥銆備綘宸茬粡瀵?repr 鐩稿綋鐔熸倝浜嗭紝灝界浣犱笉鐭ラ亾瀹冦傚湪浜や簰寮忕獥鍙d腑錛屽綋浣?/p>
鍙暡鍏ヤ竴涓彉閲忓悕錛屾帴鐫鎸塃NTER錛孭ython 浣跨敤 repr 鏉ユ樉紺哄彉閲忕殑鍊箋傝嚜宸茬敤涓浜涙暟鎹潵鍒涘緩涓
涓瓧鍏?d 錛岀劧鍚庣敤 print repr(d) 鏉ョ湅涓鐪嬪惂銆?nbsp;
__cmp__ 鍦ㄦ瘮杈冪被瀹炰緥鏃惰璋冪敤銆傞氬父錛屼綘鍙互閫氳繃浣跨敤 == 姣旇緝浠繪剰涓や釜 Python 瀵硅薄錛屼笉鍙槸
綾誨疄渚嬨傛湁涓浜涜鍒欙紝瀹氫箟浜嗕綍鏃跺唴緗暟鎹被鍨嬭璁や負鏄浉絳夌殑錛屼緥濡傦紝瀛楀吀鍦ㄦ湁鐫鍏ㄩ儴鐩稿悓鐨勫叧
閿瓧鍜屽兼椂鏄浉絳夌殑銆傚浜庣被瀹炰緥錛屼綘鍙互瀹氫箟 __cmp__ 鏂規硶錛岃嚜宸茬紪鍐欐瘮杈冮昏緫錛岀劧鍚庝綘鍙互
浣跨敤 == 鏉ユ瘮杈冧綘鐨勭被錛孭ython 灝嗕細鏇夸綘璋冪敤浣犵殑 __cmp__ 涓撶敤鏂規硶銆?nbsp;
__len__ 鍦ㄨ皟鐢?len(instance) 鏃惰璋冪敤銆俵en 鏄竴涓唴緗嚱鏁幫紝鍙互榪斿洖涓涓璞$殑闀垮害銆傚畠鍙互
鐢ㄤ簬浠諱綍琚涓虹悊搴旀湁闀垮害鐨勫璞°傚瓧絎︿覆鐨?len 鏄畠鐨勫瓧絎︿釜鏁幫紱瀛楀吀鐨?len 鏄畠鐨勫叧閿瓧鐨勪釜
鏁幫紱鍒楄〃鎴栧簭鍒楃殑 len 鏄厓绱犵殑涓暟銆傚浜庣被瀹炰緥錛屽畾涔?__len__ 鏂規硶錛屾帴鐫鑷凡緙栧啓闀垮害鐨勮綆?/p>
錛岀劧鍚庤皟鐢?len(instance)錛孭ython 灝嗘浛浣犺皟鐢ㄤ綘鐨?__len__ 涓撶敤鏂規硶銆?nbsp;
__delitem__ 鍦ㄨ皟鐢?del instance[key] 鏃惰皟鐢?錛屼綘鍙兘璁板緱瀹冧綔涓轟粠瀛楀吀涓垹闄ゅ崟涓厓绱犵殑鏂規硶銆?/p>
褰撲綘鍦ㄧ被瀹炰緥涓嬌鐢?del 鏃訛紝Python 鏇夸綘璋冪敤 __delitem__ 涓撶敤鏂規硶銆?nbsp;
鍦?Java 涓紝閫氳繃浣跨敤 str1 == str2 鍙互紜畾涓や釜瀛楃涓插彉閲忔槸鍚︽寚鍚戝悓涓鍧楃墿鐞嗗唴瀛樹綅緗傝繖鍙仛
瀵硅薄鍚屼竴鎬э紝鍦?Python 涓啓涓?str1 is str2銆傚湪 Java 涓姣旇緝涓や釜瀛楃涓插鹼紝浣犺浣跨敤 str1.equals
(str2)錛涘湪 Python 涓紝浣犺浣跨敤 str1 == str2銆傛煇浜?Java 紼嬪簭鍛橈紝浠栦滑宸茬粡琚暀鎺堝緱璁や負錛屾鏄洜涓?/p>
鍦?Java 涓?== 鏄氳繃鍚屼竴鎬ц屼笉鏄艱繘琛屾瘮杈冿紝鎵浠ヤ笘鐣屾墠浼氭洿緹庡ソ銆傝繖浜涗漢瑕佹帴鍙?Python 鐨勮繖
涓?#8220;涓ラ噸緙哄け”鍙兘瑕佽姳浜涙椂闂淬?nbsp;
ord("a") 97
ord("A") 65
5.8. 綾誨睘鎬т粙緇?
浣犲凡緇忕煡閬撲簡鏁版嵁灞炴э紝瀹冧滑鏄涓涓壒瀹氱殑綾誨疄渚嬫墍鎷ユ湁鐨勫彉閲忋侾ython 涔熸敮鎸佺被灞炴э紝瀹冧滑鏄?/p>
鐢辯被鏈韓鎵鎷ユ湁鐨勩?
渚?5.17. 綾誨睘鎬т粙緇?/p>
class MP3FileInfo(FileInfo):
"store ID3v1.0 MP3 tags"
tagDataMap = {"title" : ( 3, 33, stripnulls),
"artist" : ( 33, 63, stripnulls),
"album" : ( 63, 93, stripnulls),
"year" : ( 93, 97, stripnulls),
"comment" : ( 97, 126, stripnulls),
"genre" : (127, 128, ord)}
渚?5.18. 淇敼綾誨睘鎬?Java涓殑闈欐佸彉閲?br />
>>> class counter:
... count = 0
... def __init__(self):
... self.__class__.count += 1 #涓瀹氬緱鐢╯elf.__class__鏉ュ紩鐢紝鎵嶆槸綾誨彉閲忥紝鍋囧鐢╯elf.count鍒欏畾涔夌殑鏄疄渚嬪彉閲?鎴栬呯敤
Counter.count +=1
...
涓婅堪浠g爜璁板綍鍒涘緩鐨勫璞$殑涓暟
5.9. 縐佹湁鍑芥暟
涓庡ぇ澶氭暟璇█涓鏍鳳紝Python 涔熸湁縐佹湁鐨勬蹇碉細
縐佹湁鍑芥暟涓嶅彲浠ヤ粠瀹冧滑鐨勬ā鍧楀闈㈣璋冪敤
縐佹湁綾繪柟娉曚笉鑳藉浠庡畠浠殑綾誨闈㈣璋冪敤
縐佹湁灞炴т笉鑳藉浠庡畠浠殑綾誨闈㈣璁塊棶
涓庡ぇ澶氭暟鐨勮璦涓嶅悓錛屼竴涓?Python 鍑芥暟錛屾柟娉曪紝鎴栧睘鎬ф槸縐佹湁榪樻槸鍏湁錛屽畬鍏ㄥ彇鍐充簬瀹冪殑鍚嶅瓧銆?
濡傛灉涓涓?Python 鍑芥暟錛岀被鏂規硶錛屾垨灞炴х殑鍚嶅瓧浠ヤ袱涓笅鍒掔嚎寮濮?(浣嗕笉鏄粨鏉?錛屽畠鏄鏈夌殑錛涘叾瀹?/p>
鎵鏈夌殑閮芥槸鍏湁鐨勩?Python 娌℃湁綾繪柟娉曚繚鎶?鐨勬蹇?(鍙兘鐢ㄤ簬瀹冧滑鑷凡鐨勭被鍜屽瓙綾諱腑)銆傜被鏂規硶鎴?/p>
鑰呮槸縐佹湁 (鍙兘鍦ㄥ畠浠嚜宸茬殑綾諱腑浣跨敤) 鎴栬呮槸鍏湁 (浠諱綍鍦版柟閮藉彲浣跨敤)銆?
鍦?MP3FileInfo 涓紝鏈変袱涓柟娉曪細__parse 鍜?__setitem__銆傛濡傛垜浠凡緇忚璁鴻繃鐨勶紝__setitem__
鏄竴涓笓鏈夋柟娉曪紱閫氬父錛屼綘涓嶇洿鎺ヨ皟鐢ㄥ畠錛岃屾槸閫氳繃鍦ㄤ竴涓被涓婁嬌鐢ㄥ瓧鍏歌娉曟潵璋冪敤錛屼絾瀹冩槸鍏湁
鐨勶紝騫朵笖濡傛灉鏈変竴涓湡姝eソ鐨勭悊鐢憋紝浣犲彲浠ョ洿鎺ヨ皟鐢ㄥ畠 (鐢氳嚦浠?fileinfo 妯″潡鐨勫闈?銆傜劧鑰岋紝
__parse 鏄鏈夌殑錛屽洜涓哄湪瀹冪殑鍚嶅瓧鍓嶉潰鏈変袱涓笅鍒掔嚎銆?
鍦?Python 涓紝鎵鏈夌殑涓撶敤鏂規硶 (鍍?__setitem__) 鍜屽唴緗睘鎬?(鍍?__doc__) 閬靛畧涓涓爣鍑嗙殑鍛藉悕涔犳儻
錛氬紑濮嬪拰緇撴潫閮芥湁涓や釜涓嬪垝綰褲備笉瑕佸浣犺嚜宸茬殑鏂規硶鍜屽睘鎬х敤榪欑鏂規硶鍛藉悕錛涘埌鏈鍚庯紝瀹冨彧浼氭妸浣?(鎴栧叾瀹冧漢) 鎼炰貢銆?
絎?2 閮ㄥ垎錛?#8220; 寮曞叆鍙嶅皠” 錛?003 騫?6 鏈堬級
絎?3 閮ㄥ垎錛? 搴旂敤鍙嶅皠" 錛?003 騫?7 鏈堬級
絎?4 閮ㄥ垎錛?#8220; 鐢?Javassist 榪涜綾昏漿鎹?/a>” 錛?003 騫?9 鏈堬級
絎?5 閮ㄥ垎錛?#8220; 鍔ㄦ佽漿鎹㈢被” 錛?004 騫?2 鏈堬級
絎?6 閮ㄥ垎錛?#8220; 鐢?Javassit 榪涜闈㈠悜鏂歸潰鐨勬洿鏀?/a>”錛?004 騫?3 鏈堬級
絎?7 閮ㄥ垎錛?#8220; 鐢?BCEL 璁捐瀛楄妭鐮?/a>” 錛?004 騫?4 鏈堬級
Java 緙栫▼鐨勫姩鎬佹э紝絎?8 閮ㄥ垎: 鐢ㄤ唬鐮佺敓鎴愬彇浠e弽灝?br />
http://www.ibm.com/developerworks/cn/java/j-dyn0610/