Ինչպե՞ս է աշխատում functools cmp_to_key ֆունկցիան Python-ում:


Python-ի functools մոդուլն առաջարկում է cmp_to_key ֆունկցիան, որը արժեքավոր գործիք է օբյեկտները ըստ հատուկ պահանջների դասակարգելու: Այս ֆունկցիան հնարավորություն է տալիս համեմատական ֆունկցիայի փոխակերպումը, որը գնահատում է երկու արգումենտ և բերում բացասական, զրոյական կամ դրական արդյունքը հիմնական ֆունկցիայի, որը հարմար է տեսակավորման համար: Օգտագործելով cmp_to_key-ը, բարդ չափանիշների վրա հիմնված օբյեկտների տեսակավորման գործընթացը դառնում է ավելի պարզ: Այս հոդվածում մենք կխորանանք Python-ում cmp_to_key ֆունկցիայի ներքին աշխատանքի մեջ և կուսումնասիրենք դրա գործնական կիրառությունները:

Ի՞նչ է functools.cmp_to_key ֆունկցիան:

Python-ում functools.cmp_to_key ֆունկցիան մի օգտակար ծրագիր է, որը հեշտացնում է օբյեկտների հատուկ տեսակավորումը: Այն հանդես է գալիս որպես կամուրջ համեմատության վրա հիմնված և բանալիների վրա հիմնված տեսակավորման մեթոդների միջև: Մինչ Python-ի համեմատման գործառույթները համեմատում են երկու արժեք և վերադարձնում բացասական, զրո կամ դրական արդյունք, շատ ներկառուցված տեսակավորման գործառույթներ ակնկալում են հիմնական գործառույթ, որը արժեքներ է հանում համեմատության համար:

Cmp_to_key ֆունկցիան համեմատական ֆունկցիան փոխակերպում է հիմնական ֆունկցիայի: Այն ընդունում է համեմատության գործառույթը որպես մուտքագրում և վերադարձնում է հիմնական գործառույթը, որը հարմար է տեսակավորման համար: Ստացված հիմնական ֆունկցիան արժեքներ է հանում օբյեկտներից և օգտագործում է սկզբնական համեմատման ֆունկցիան՝ համեմատելու այդ արժեքները:

Այս ֆունկցիոնալությունը ծրագրավորողներին հնարավորություն է տալիս կիրառել դասակարգման բարդ չափանիշներ՝ թույլ տալով օբյեկտները տեսակավորել բարդ պահանջների հիման վրա: Օգտագործելով cmp_to_key-ը, կարելի է հասնել հարմարեցված տեսակավորման արդյունքների՝ հաշվի առնելով բազմաթիվ ատրիբուտներ կամ ներառելով հատուկ տրամաբանություն:

Ինչպե՞ս է աշխատում functools cmp_to_key ֆունկցիան Python-ում:

Functools մոդուլը Python-ում ապահովում է բազմակողմանի ֆունկցիա, որը կոչվում է cmp_to_key, որը վճռորոշ դեր է խաղում օբյեկտների հատուկ տեսակավորման մեջ: Այս ֆունկցիան հատկապես օգտակար է, երբ մենք պետք է օբյեկտները դասավորենք բարդ չափանիշների հիման վրա կամ երբ դասակարգման ավանդական մեթոդները բավարար չեն: Այս բացատրության մեջ մենք կուսումնասիրենք, թե ինչպես է աշխատում cmp_to_key ֆունկցիան և կուսումնասիրենք դրա գործնական կիրառությունները:

Cmp_to_key ֆունկցիայի նպատակն է համեմատական ֆունկցիան վերածել հիմնական ֆունկցիայի, որը հարմար է տեսակավորման համար: Python-ում համեմատման ֆունկցիան վերցնում է երկու մուտք և տալիս է բացասական արժեք, եթե առաջին մուտքը համարվում է փոքր, քան երկրորդը, դրական արժեք, եթե այն համարվում է ավելի մեծ, և զրո, եթե դրանք հավասար են համարվում: Այնուամենայնիվ, Python-ում ներկառուցված տեսակավորման մի քանի գործառույթներ պահանջում են առանցքային ֆունկցիա, որը արժեք է հանում յուրաքանչյուր օբյեկտից և օգտագործում է այդ արժեքը համեմատության համար:

Cmp_to_key ֆունկցիան կամրջում է այս բացը` համեմատական ֆունկցիան վերածելով հիմնական ֆունկցիայի: Այն ընդունում է համեմատման ֆունկցիան որպես իր արգումենտ և վերադարձնում է հիմնական ֆունկցիա, որը կարող է օգտագործվել sorted() ֆունկցիայի կամ այլ տեսակավորման մեթոդների հետ։ Ստացված հիմնական ֆունկցիան յուրաքանչյուր օբյեկտից արժեք է հանում և օգտագործում համեմատության ֆունկցիան՝ համեմատելու այդ արժեքները:

Հետևեք ստորև տրված քայլերին cmp_to_key - ֆունկցիոնալ գործիքների օգտագործման համար

  • Սահմանեք համեմատության ֆունկցիա, որը կոչվում է compare_lengths, որը վերցնում է երկու տող որպես արգումենտ և համեմատում դրանք՝ հիմնվելով դրանց երկարությունների վրա: Ֆունկցիան վերադարձնում է բացասական արժեք, եթե առաջին տողը ավելի կարճ է, դրական արժեք, եթե այն ավելի երկար է, և զրո, եթե երկարությունները հավասար են:

  • Ստեղծեք անունների ցուցակ, որոնք կոչվում են անուններ: Այս ցուցակը ըստ անունների երկարության տեսակավորելու համար մենք օգտագործում ենք cmp_to_key ֆունկցիան՝ մեր compare_lengths համեմատության ֆունկցիան փոխակերպելու հիմնական ֆունկցիայի, որը կոչվում է key_function:

  • Օգտագործեք sorted() ֆունկցիան և տրամադրեք key_function որպես հիմնական պարամետր տեսակավորումը կատարելու համար: Տեսակավորված անունները պահվում են sorted_names ցանկում, որը մենք տպում ենք՝ տեսակավորված արդյունքը ցուցադրելու համար։

Ստորև ներկայացված է ծրագիրը, որը ցույց է տալիս, թե ինչպես է աշխատում functools.cmp_to_key ֆունկցիան Python-ում −

Օրինակ

from functools import cmp_to_key

# Comparison function to compare two strings based on their lengths
def compare_lengths(str1, str2):
   if len(str1) < len(str2):
      return -1
   elif len(str1) > len(str2):
      return 1
   else:
      return 0

# List of names
names = ['Alice', 'Bob', 'Charlie', 'Dave']

# Convert the comparison function to a key function
key_function = cmp_to_key(compare_lengths)

# Sort the names using the key function
sorted_names = sorted(names, key=key_function)

# Print the sorted names
print(sorted_names)

Արդյունք

['Bob', 'Dave', 'Alice', 'Charlie']

Այս արդյունքը ցույց է տալիս, որ անունները դասակարգվել են ըստ իրենց երկարության, առաջինը հայտնվում է ամենակարճ անունը՝ «Բոբ», որին հաջորդում է «Դեյվ», «Ալիս» և վերջում՝ «Չարլի»։

Եզրակացություն

Եզրափակելով, Python-ում functools.cmp_to_key ֆունկցիան հզոր գործիք է, որը հեշտացնում է օբյեկտների հարմարեցված տեսակավորումը: Համեմատության ֆունկցիան առանցքային ֆունկցիայի վերածելով՝ այն կամրջում է ավանդական համեմատության վրա հիմնված տեսակավորման և բանալիների վրա հիմնված տեսակավորման մեթոդների միջև եղած բացը: Cmp_to_key ֆունկցիան հնարավորություն է տալիս դասավորել օբյեկտները՝ հիմնված բարդ չափանիշների վրա՝ դուրս գալով արժեքների պարզ համեմատություններից:

Այն թույլ է տալիս ծրագրավորողներին սահմանել իրենց համեմատության տրամաբանությունը և կիրառել այն օբյեկտներն արդյունավետ տեսակավորելու համար: Այս ֆունկցիան հնարավորություն է բացում տեսակավորման համար՝ հիմնված բազմաթիվ ատրիբուտների, հաշվարկների կամ նույնիսկ արտաքին գործոնների վրա: