Guido van Rossum alipendekeza kuongeza viendeshaji vinavyolingana na Python

Guido van Rossum kuletwa rasimu ya mapitio ya jumuiya vipimo kwa kutekeleza waendeshaji wa kulinganisha muundo (mechi na kesi) katika Python. Ikumbukwe kwamba mapendekezo ya kuongeza waendeshaji vinavyolingana na muundo tayari yamechapishwa katika 2001 na 2006 (pep-0275, pep-3103), lakini zilikataliwa kwa ajili ya kuboresha muundo wa “kama ... elif ... vinginevyo” kwa ajili ya kuandaa minyororo inayolingana.

Utekelezaji mpya ni kama opereta wa "mechi" iliyotolewa katika Scala, Rust, na F#, ambayo inalinganisha matokeo ya usemi maalum na orodha ya ruwaza zilizoorodheshwa kwenye vizuizi kulingana na opereta "kesi". Tofauti na opereta "switch" inayopatikana katika C, Java, na JavaScript, misemo ya "linganisha" hutoa mengi zaidi. utendakazi mpana. Ikumbukwe kwamba waendeshaji waliopendekezwa wataboresha usomaji wa msimbo, kurahisisha ulinganisho wa vitu vya Python kiholela na utatuzi, na pia kuongeza kuegemea kwa msimbo kwa shukrani kwa uwezekano wa kupanuliwa. ukaguzi wa aina tuli.

def http_error(hadhi):
hali ya mechi:
kesi 400:
kurudi "Ombi mbaya"
kesi 401|403|404:
kurudi "Hairuhusiwi"
kesi 418:
kurudi "mimi ni buli"
kesi_:
kurudi "Kitu kingine"

Kwa mfano, unaweza kufungua vipengee, nakala, orodha, na mfuatano wa kiholela ili kuunganisha vigeu kulingana na thamani zilizopo. Inaruhusiwa kufafanua violezo vilivyowekwa, kutumia masharti ya ziada ya “ikiwa” kwenye kiolezo, tumia vinyago (“[x, y, *rest]”), upangaji wa vitufe/thamani (kwa mfano, {“bandwidth”: b, “latency ”: l} kutoa thamani za "bandwidth" na "latency" na kamusi), toa violezo vidogo (":=" mwendeshaji), tumia viunga vilivyotajwa kwenye kiolezo. Katika madarasa, inawezekana kubinafsisha tabia inayolingana kwa kutumia mbinu ya "__match__()".

kutoka kwa darasa la kuhifadhi data

@darasa la data
Pointi ya darasa:
x: in
y: in

def whereis(point):
pointi ya mechi:
Sehemu ya kesi (0, 0):
chapa ("Asili")
Sehemu ya kesi (0, y):
chapa(f"Y={y}")
Kesi Point(x, 0):
chapa(f"X={x}")
kesi Point():
chapa ("Mahali pengine")
kesi_:
chapa ("Sio uhakika")

pointi ya mechi:
kesi Point(x, y) ikiwa x == y:
print(f"Y=X kwa {x}")
Kesi Point(x, y):
print(f"Sio kwenye diagonal")

NYEKUNDU, KIJANI, BLUU = 0, 1, 2
rangi ya mechi:
kesi .RED:
chapa ("Naona nyekundu!")
kipochi .KIJANI:
chapa ("Nyasi ni kijani")
kesi .BLU
E:
chapa (“Ninahisi hali ya sintofahamu :(“)

Seti imetayarishwa kwa ukaguzi mabaka na majaribio utekelezaji vipimo vilivyopendekezwa, lakini toleo la mwisho bado kujadiliwa. Kwa mfano inayotolewa Badala ya usemi "kesi _:" kwa thamani chaguo-msingi, tumia neno kuu "else:" au "chaguo-msingi:", kwa kuwa "_" katika miktadha mingine inatumika kama kigezo cha muda. Pia jambo la kutiliwa shaka ni shirika la ndani, ambalo msingi wake ni kutafsiri misemo mipya katika bytecode sawa na ile inayotumika kwa miundo ya "ikiwa ... elif ... else", ambayo haitatoa utendakazi unaohitajika wakati wa kuchakata seti kubwa sana za ulinganisho.

Chanzo: opennet.ru

Kuongeza maoni