[英]What is the most elegant / pythonic way of introducing large integer constants?
我需要引入大整數常量(Diffie-Hellman密鑰交換的素數)
以符合PEP8標准的方式,這種方式最狡猾/最漂亮的方式是什么? 優選地,沒有反斜杠。
我目前的做法是這樣的:
N = '''FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381
FFFFFFFF FFFFFFFF'''
PRIME = int('0x{0}'.format(N.replace('\n', '').replace(' ', '')), 16)
不是很漂亮,但更漂亮:
PRIME = 179769313486231590770839156793787453197860296048756011706444423684197180216158519368947833795864925541502180565485980503646440548199239100050792877003355816639229553136239076508735759914822574862575007425302077447712589550957937778424442426617334727629299387668709205606050270810842907692932019128194467627007L
編輯 :
更改為PRIME = int(re.sub('\\s+', '', N), 16)
但最重要的是:知道何時不一致 - 有時風格指南不適用。 如有疑問,請使用您的最佳判斷。 查看其他示例並確定最佳效果。 並且不要猶豫!
所以保持原樣不變,因為它比任何其他不明顯的黑客更具可讀性
最重要的是Readability counts.
很重要Readability counts.
沒有什么比Python的核心原則更重要了
但必須有一種更優雅的方式來做PRIME = int('0x {0}'。格式(N.replace('\\ n','')。replace('','')),16).. 。
如果你堅持
PRIME=long('17976931348623159077083915679378745319786029604875601'
'17064444236841971802161585193689478337958649255415021805654859805'
'03646440548199239100050792877003355816639229553136239076508735759'
'91482257486257500742530207744771258955095793777842444242661733472'
'7629299387668709205606050270810842907692932019128194467627007L')
坦白說,你所擁有的是相當不錯的。 唯一明顯的變化將最終轉換:您可以刪除"0x{0}".format
位,只是通過替換字符串作為你給int
底座16。
除此之外,您可以隨時隱藏它的功能:
def PrimeInt(string):
return int(string.replace('\n','').replace(' ',''), 16)
PRIME = PrimeInt("""
FFFFFFFF FFFFFFFF C90FDAA2 2168C234 C4C6628B 80DC1CD1
29024E08 8A67CC74 020BBEA6 3B139B22 514A0879 8E3404DD
EF9519B3 CD3A431B 302B0A6D F25F1437 4FE1356D 6D51C245
E485B576 625E7EC6 F44C42E9 A637ED6B 0BFF5CB6 F406B7ED
EE386BFB 5A899FA5 AE9F2411 7C4B1FE6 49286651 ECE65381
FFFFFFFF FFFFFFFF
''')
如果你想要一些看起來不錯的東西,也許你可以從字符串轉換為整數。 它可能不是最佳實踐,因為我從未真正看到它在實踐中使用,但我認為它比原始方法更清晰,因為轉換有限
number = (
"179769313486231590770839156793787453197860296048756011"
"706444423684197180216158519368947833795864925541502180"
"565485980503646440548199239100050792877003355816639229"
"553136239076508735759914822574862575007425302077447712"
"589550957937778424442426617334727629299387668709205606"
"050270810842907692932019128194467627007"
)
number = int(number)
179769313486231590770839156793787453197860296048756011706444423684197180216158519368947833795864925541502180565485980503646440548199239100050792877003355816639229553136239076508735759914822574862575007425302077447712589550957937778424442426617334727629299387668709205606050270810842907692932019128194467627007L
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.