Я не можу зрозуміти, чому Python не має signфункції. У нього є absвбудований (який я вважаю signсестрою), але ні sign.
У python 2.6 є навіть copysignфункція (з математики ), але ніякої ознаки. Навіщо турбуватися писати а, copysign(x,y)коли ви могли просто написати a, signа потім отримати copysignбезпосередньо з abs(x) * sign(y)? Останнє було б набагато зрозуміліше: x зі знаком y, тоді як при copysign ви повинні пам'ятати, чи це x зі знаком y або y зі знаком x!
Очевидно, sign(x)це не дає нічого іншого cmp(x,0), але було б набагато читабельніше, що це теж (і для такої читабельної мови, як пітон, це було б великим плюсом).
Якби я був дизайнером пітонів, я би був іншим способом: не cmpвбудований, а a sign. Коли вам потрібно cmp(x,y), ви можете просто зробити sign(x-y)(або, ще краще, для нечислових речей, просто x> y - звичайно, це повинно було вимагати sortedприйняття булевого, а не порівняльного числа). Це також буде більш ясно: позитивним , коли x>y( в той час як з cmpви повинні пам'ятати конвенції плюсовій , коли перший є великим , але це може бути навпаки). Звичайно, це cmpмає сенс самостійно з інших причин (наприклад, при сортуванні нечислових речей або якщо ви хочете, щоб сорт був стабільним, що неможливо використовувати просто булевим)
Отже, питання: чому дизайнери (і) Python вирішили залишити signфункцію поза мовою? Чому чорт турбує, copysignа не його батьків sign?
Я щось пропускаю?
EDIT - після коментаря Пітера Хансена. Досить справедливо, що ви його не використовували, але не сказали, для чого використовуєте python. За 7 років, що я використовую пітон, мені це потрібно було незліченну кількість разів, і останнє - солома, що зламала верблюду спину!
Так, ви можете передавати cmp навколо, але 90% разів, які мені потрібно було пройти, були в lambda x,y: cmp(score(x),score(y))такій ідіомі, як
це працювало б зі знаком просто чудово.
Нарешті, я сподіваюся, ви погоджуєтесь, що це signбуло б корисніше copysign, тому, навіть якщо я купував ваше уявлення, навіщо займатись визначенням математики, а не знаком? Як може copysign бути настільки корисним, ніж підписувати?