Python3 ile cmp (a, b) nasıl kullanabilirim?


16

Bu cmpişlevi kullanmanın kod golfü için çok yararlı olabileceği söylendi . Ancak ne yazık ki, Python 3'ün bir cmpişlevi yoktur.

cmpPython 3'te bunun en kısa eşdeğeri nedir?


3
cmpGolf bağlamında aradığınız alternatifi veya alternatifi açıklamalısınız . Aksi takdirde, bu çok hızlı bir şekilde genel bir programlama sorusu olarak kapanabilir.
Martin Ender

@ MartinBüttner Bu OP'ın bağlamında olduğunu düşünüyorum golf danışma soruya bir cevap kullanılancmp soru Python 3. olunmasını istediğini de
XNOR

@xnor biliyorum, ama diğerleri bilmiyor olabilir.
Martin Ender

Yanıtlar:


34

Python 3 yoktur cmp. Golf için şunları yapabilirsiniz

11 karakter

(a>b)-(a<b)

3 karakter kaybeder cmp(a,b).

Eğlenceli, bu aynı zamanda "resmi" bir çözümdür. Ne 3 Python Yenilikler "(Eğer gerçekten gerekiyorsa sayfanın mesajı cmp()işlevsellik, sen ifade kullanabilirsiniz (a > b) - (a < b)için eşdeğer olarak cmp(a, b).)"


15
öncelik sorunlarına dikkat edin! cmp (a, b) 'nin gerçek eşdeğeri ((a> b) - (a <b))
Sparr

a veya b daha karmaşık ifadeler ise - çok uzun çalışma sürelerine sahip işlevlere yapılan çağrıları söylerseniz, bu çalışma süreniz için çok kötüdür. Daha da kötüsü, a veya b yan etkileri olan bir işleve çağrı içeriyorsa, bu programınızın anlamını bile değiştirebilir.
Algoman

1
@Algoman Oh noes, çalışma süresi, kod golfünün en önemli parçası. İşlevleri iki kez çalıştırmaktan kaçınmak istiyorsanız, bunları önceden değişkenlere atayın (muhtemelen baytlara kaydetmek için yine de yapacaksınız )
Jo King

Bir transpiler üzerinde çalışıyorum - bir ifade okuyor ve bundan bir ifade üretmesi gerekiyor. Orijinal ifadedeki bu cmp derinlemesine yuvalanabilir. hedef kodu bu şekilde oluştursaydım, uygulamak çok çirkin ve zor olurdu (imkansız değilse de).
Algoman

1
Yani yerine @Algoman cmp(exp1,exp2)ile (lambda a,b:(a>b)-(a<b))(exp1,exp2).
Anders Kaseorg
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.