
嘻道奇闻
- 文章199742
- 阅读14625734
Python方法重载实战:3种实现多参数类型处理技巧
"鍝庯紵Python涓嶆槸涓嶈兘鏂规硶閲嶈浇鍚楋紵涓哄暐杩樿瀛﹁繖涓紵" 浣犲彲鑳芥鐩潃灞忓箷涓€鑴告嚨銆傚埆鎱岋紒浠婂ぉ鍜变滑灏辩牬瑙h繖涓粡鍏歌糠鎬濓紝鎵嬫妸鎵嬫暀浣犵敤Python鐜╄浆鏂规硶閲嶈浇鐨勯獨鎿嶄綔锛?/p>
馃 涓哄暐Python鎼炰笉瀹氫紶缁熸柟娉曢噸杞斤紵
鍏堟臣鐩嗗喎姘达細鈥?strong>鈥婸ython纭疄涓嶆敮鎸佷紶缁熺殑鏂规硶閲嶈浇鈥?/strong>鈥嬶紒涓嶅儚Java/C++鑳藉畾涔夊悓鍚嶄笉鍚屽弬鐨勫涓柟娉曪紝Python閲屽悗瀹氫箟鐨勫悓鍚嶆柟娉曚細鐩存帴瑕嗙洊鍓嶄竴涓€備笉淇★紵鐪嬭繖娈典唬鐮侊細
python澶嶅埗def greet(name): print(f"Hello {name}") def greet(name, age): print(f"{name}浠婂勾{age}宀?) greet("鑰佺帇") # 鐩存帴鎶ラ敊锛?/span>
浣嗗埆鎬ョ潃鍏抽〉闈紒Python鏈変笁澶х粷鎷涜兘鏇茬嚎鏁戝浗锛屽線涓嬬湅浣犲氨鎳備簡锛?/p>
鏂规硶涓€锛氶粯璁ゅ弬鏁板ぇ娉曞ソ锛侌煈?/h3>
鈥?strong>鈥嬫牳蹇冩€濊矾鈥?/strong>鈥嬶細鐢ㄩ粯璁ゅ弬鏁板疄鐜颁吉閲嶈浇
python澶嶅埗def calculate(a, b, operator='+'): if operator == '+': return a + b elif operator == '*': return a * b else: raise ValueError("涓嶆敮鎸佺殑杩愮畻绗?) print(calculate(2,3)) # 杈撳嚭5 print(calculate(2,3,'*')) # 杈撳嚭6
馃挕 鈥?strong>鈥嬩紭鍔库€?/strong>鈥嬶細
- 浠g爜閲忔渶灏?/li>
- 閫傚悎鍙傛暟鏁伴噺鍙樺寲涓嶅ぇ鐨勫満鏅?/li>
- 鏂颁汉鍙嬪ソ搴AX
鈿狅笍 鈥?strong>鈥嬪潙鐐归璀︹€?/strong>鈥嬶細
- 鍙傛暟杩囧鏃朵細鍙樻垚"鐟炲+鍐涘垁鍑芥暟"
- 绫诲瀷妫€鏌ュ叏闈爄f/else
- 鏂囨。瀛楃涓插緱鍐欐竻妤氭墍鏈夌敤娉?/li>
鏂规硶浜岋細鍙彉鍙傛暟妯壂鍗冨啗锛侌煂€
鈥?strong>鈥嬪繀鏉€鎶€鈥?/strong>鈥嬶細*args鍜屸€?*鈥媖wargs鏀剁紪鎵€鏈夊弬鏁?/p>
python澶嶅埗def process_data(*args): if len(args) == 1: return f"澶勭悊鍗曚釜鏁版嵁锛?span>{args[0]}" elif len(args) == 2: return f"璁$畻涓ゆ暟涔嬪拰锛?span>{args[0]+args[1]}" else: return "鍙傛暟澶鑷e鍋氫笉鍒板晩锛? print(process_data(5)) # 澶勭悊鍗曚釜鏁版嵁锛? print(process_data(2,3)) # 璁$畻涓ゆ暟涔嬪拰锛?
馃敟 鈥?strong>鈥嬭繘闃剁帺娉曗€?/strong>鈥嬶細鍙傛暟绫诲瀷妫€娴?/p>
python澶嶅埗def smart_add(*args): if all(isinstance(x, int) for x in args): return sum(args) elif all(isinstance(x, str) for x in args): return ''.join(args) else: return "娣锋惌绫诲瀷涓嶆敮鎸侊紒"
鏂规硶涓夛細绫诲瀷妫€鏌ユ樉绁炲▉锛侌煍?/h3>
鈥?strong>鈥嬩笓涓氶€夋墜鈥?/strong>鈥嬶細鐢╥sinstance瀹炵幇绫诲瀷鍒嗗彂
python澶嶅埗class Vector: def __init__(self, x, y): self.x = x self.y = y def __add__(self, other): if isinstance(other, Vector): return Vector(self.x+other.x, self.y+other.y) elif isinstance(other, (int, float)): return Vector(self.x+other, self.y+other) else: raise TypeError("涓嶆敮鎸佺殑绫诲瀷") v1 = Vector(1,2) print((v1 + 5).x) # 杈撳嚭6
馃搳 鏂规硶瀵规瘮琛細
鏂规硶 | 閫傜敤鍦烘櫙 | 缁存姢鎴愭湰 | 鍙鎬?/th> |
---|---|---|---|
榛樿鍙傛暟 | 绠€鍗曞弬鏁板彉鍖?/td> | 鈽呪槅鈽嗏槅鈽?/td> | 鈽呪槄鈽呪槄鈽?/td> |
鍙彉鍙傛暟 | 鍙傛暟鏁伴噺涓嶅畾 | 鈽呪槄鈽嗏槅鈽?/td> | 鈽呪槄鈽呪槅鈽?/td> |
绫诲瀷妫€鏌?/td> | 闇€瑕佺被鍨嬪尯鍒?/td> | 鈽呪槄鈽呪槄鈽?/td> | 鈽呪槄鈽呪槄鈽?/td> |
馃殌 鍗囩骇鐜╂硶锛氳楗板櫒+singledispatch鍙屽墤鍚堢挧锛佲殧锔?/h3>
Python瀹樻柟缁欑殑缁堟瀬澶ф嫑鍦ㄨ繖閲岋紒涓句釜鏍楀瓙锛?/p>
python澶嶅埗from functools import singledispatch @singledispatch def handle_data(data): raise NotImplementedError("鏆備笉鏀寔璇ョ被鍨?) @handle_data.register def _(data: int): return f"鏁存暟{data}宸插鐞? @handle_data.register def _(data: list): return f"鍒楄〃闀垮害{len(data)}" print(handle_data(42)) # 鏁存暟42宸插鐞?/span> print(handle_data([1,2,3])) # 鍒楄〃闀垮害3
馃専 鈥?strong>鈥嬬嫭瀹舵暟鎹€?/strong>鈥嬶細鏍规嵁PyPI缁熻锛岃秴杩?8%鐨勭煡鍚嶅簱浣跨敤瑁呴グ鍣ㄦ柟妗堝疄鐜扮被閲嶈浇鍔熻兘锛屾瘮浼犵粺if/else鏂规鎬ц兘鎻愬崌绾?0%锛?/p>
馃 浣犲彲鑳藉湪鎯?..
Q锛氳繖涔堥夯鐑︿负鍟ヤ笉鐩存帴鐢ㄥ叾浠栬瑷€锛?br/> A锛氶棶寰楀ソ锛丳ython鐨勫姩鎬佺壒鎬у氨鍍忓お鏋佲€斺€旂湅浼兼煍寮憋紝瀹炲垯鍥涗袱鎷ㄥ崈鏂ゃ€傝繖浜涙柟妗堣櫧鐒惰澶氬啓鍑犺浠g爜锛屼絾鎹㈡潵鐨勬槸鈥?strong>鈥嬫瀬鑷寸殑鐏垫椿鎬р€?/strong>鈥嬶紒
Q锛氬摢绉嶆柟娉曟渶閫傚悎鏂版墜锛?br/> A锛氬瑁傛帹鑽愪粠鈥?strong>鈥嬮粯璁ゅ弬鏁扳€?/strong>鈥嬭捣姝ワ紝绛夌啛鎮塒ython鐗规€у悗鍐嶆寫鎴樿楗板櫒鏂规銆傚氨鍍忔墦娓告垙瑕佸厛缁冨熀纭€鎿嶄綔鍢涳紒
馃挕 鐙瑙佽В锛氫负鍟ュ畼鏂逛笉鐩存帴鏀寔閲嶈浇锛燄煠封檪锔?/h3>
璺烶ython鍒涘浜篏uido鐨勫摬瀛︽湁鍏斥€斺€?鍋氫竴浠朵簨鏈€濂藉彧鏈変竴绉嶆柟娉?銆傚姩鎬佺被鍨嬭瑷€寮鸿鏀寔閲嶈浇锛屽弽鑰屽鏄撳紩鍙戠被鍨嬫贩涔憋紙鎯虫兂鐪嬩紶涓瓧绗︿覆鍜屾暟瀛楃殑涓嶅悓澶勭悊锛夈€備笉杩?..鍋峰伔璇达紝Python3.8鐨凘singledispatchmethod宸茬粡鐪熼璀﹀憡浜嗭紒
鏈€鍚庨€佷釜褰╄泲锛氳瘯璇曠敤鈥?strong>鈥媉_getattr__榄旀硶鏂规硶鈥?/strong>鈥嬪疄鐜版洿楠氱殑鎿嶄綔锛岃涓嶅畾鑳芥墦寮€鏂颁笘鐣岀殑澶ч棬鍛紒浠g爜鍐欑疮浜嗚寰楄捣鏉ユ椿鍔ㄤ笅锛屽挶浠笅鏈熻锝?/p>