2015-03-03 24 views
5

bir bit maskesi dönen bir işlev sarmak için: tetiklenen hem EVENT_KEY_DOWN ve EVENT_KEY_PRESS anlam, örneğin,aşağıdaki olaylardan ile döner C fonksiyonunu <code>int get_events()</code> düşünün Python

#define EVENT_KEY_DOWN 1 
#define EVENT_KEY_UP  2 
#define EVENT_KEY_PRESS 4 

O 5 geri dönebilirler . yani 5

  • tamsayılar bir kayıt düzeni

    • "olduğu gibi": dizeleri (1, 4)
    • tuple

      Python koduna işlevinden değer döndürmek için aşağıdaki yollardan düşündü : ('EVENT_KEY_DOWN', 'EVENT_KEY_PRESS')

    (her durumda ben ve mymodule.EVENT_KEY_PRESS gibi sabitleri olduğuna dair karar, de.)

    herhangi bir "tavsiye" yolu var mı?

  • +0

    . Yani, 'EVENT_KEY_PRESS' maskesinde ''ya da benzeri yapabildiğiniz için, python'da sabit dizelerin tuple'larını kullanmanın bir dezavantajı göremediğimi söyledim. Bu,' EVENT_KEY_PRESS 'değişkenini bazı benzersiz ile ilan ediyorum. değeri – Basic

    +0

    dizesindeki Typos'dan sakınmak için bir dizi dizgiye gidecektim (('EVENT_KEY_UP', 'EVENT_KEY_PRESS')) – mkiever

    +0

    C/Python tanımlarınızın olacağını garanti ederseniz sorun değişebilir. Projenin ömrü boyunca düzgün bir şekilde güncellendi ve senkronize edildi ve birbiriyle etkileşime giren farklı sürümlere sahip olmayacağınız zaman bit maskesi kullanın. Aksi halde bunları dizelerle göstermek iyi bir fikir olabilir. – imreal

    cevap

    0

    Sparse is better than dense; readability counts. Bu mantıkla dizgileri birleştirmeyi seçerim, aynı zamanda API'yi nasıl kullanacağınıza ilişkin kalıplara da bakarım. Örneğin, performans açısından kritik bir kod yolundaysanız, bunu bir bit maskesi olarak bırakmayı düşünmelisiniz. olmayan tamsayı türleri genellikle daha fazla çalışması sonucu olarak depolanır dillerin çoğu, bayraklar/bit maskelerinden ise