我可以获得代码审查吗?如果我可以更有效地完成此操作,则需要帮助

Can I get a code review? Need help if I could have done this more efficient

我是新来的,也是使用 python 编码的新手。我最近开始在线粗略,想看看是否有更简单的方法可以创建一个 12 位随机十六进制列表。我希望每个单独的位都是一个随机数或小写或大写字母。根据我的新手研究,这是我能找到并创建我自己的代码的最好的。所以我可以更简单、更高效地完成这件事吗?

#!/user/bin/python
import string
import random 

r1 = random.choice(string.hexdigits)
r2 = random.choice(string.hexdigits) 
r3 = random.choice(string.hexdigits)  
r4 = random.choice(string.hexdigits) 
r5 = random.choice(string.hexdigits)
r6 = random.choice(string.hexdigits)
r7 = random.choice(string.hexdigits)
r8 = random.choice(string.hexdigits)
r9 = random.choice(string.hexdigits)
r10 = random.choice(string.hexdigits)
r11 = random.choice(string.hexdigits)
r12 = random.choice(string.hexdigits)

randnumb = r1+r2+":"+r3+r4+":"+r5+r6+":"+r7+r8+":"+r9+r10+":"+r11+r12

print(randnumb)

您可以使用循环 str.join():

from random import choice
from string import hexdigits

print(":".join(choice(hexdigits) + choice(hexdigits) for _ in range(6)))
# 47:8b:FA:71:90:ea

将两个随机的十六进制数字组合 6 次,相当于您的 12 次单独调用。

或如 在评论中建议的那样:

':'.join(format(choice(range(256)), 'x') for _ in range(6))

在所有 256 个 ASCII 字符中使用十六进制格式 'x'format()

此外,为了超级安全,您可以使用 02x/02X:

将格式填充为 2 个字符
format(choice(range(256)), '02x') # lowercase padding
format(choice(range(256)), '02X') # uppercase padding

x是小写十六进制,X是大写十六进制。最好在此处保持一致以避免奇怪的小写和大写混合。这种一致性的一个例子是 MAC 地址,其中十六进制字符串只是小写。

您可以在 Format Specification Mini-Language 中阅读更多关于此及其变体的信息。

您可以做的另一件事是将 choice(range(256)) 替换为 random.randrange(256),从而避免使用 range()