我有一个生成字符串(类似于uuid)字符串
的Javascript代码这是js代码:
var t = "xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxx"
, i = (new Date).getTime();
return e = t.replace(/[x]/g, function() {
var e = (i + 16 * Math.random()) % 16 | 0;
return i = Math.floor(i / 16),
e.toString(16)
})
如何使用python生成此字符串?
答案 0 :(得分:7)
使用正则表达式替换和Python 3.6的新secrets
模块 - 这不等同于JavaScript代码,因为此Python代码具有加密安全性,并且生成较少的冲突/可重复序列
秘密模块用于生成适用于管理密码,帐户身份验证,安全令牌和相关机密等数据的加密强随机数。
特别是,应该优先使用秘密,而不是随机模块中的默认伪随机数生成器,该模块专为建模和模拟而设计,而不是安全或加密。
>>> import re
>>> from secrets import choice
>>> re.sub('x',
lambda m: choice('0123456789abdef'),
'xxxxxxxx-xxxx-xxxx-xxxx-xxxx-xxxxxxxx')
'5baf40e2-13ef-4692-8e33-507b-40fb84ff'
您希望您的ID真正尽可能独一无二,而不是Mersenne Twister MT19937 - 使用random
,而try:
from secrets import choice
except ImportError:
choice = random.SystemRandom().choice
实际上是为了专门产生可重复的数字序列。
对于Python< 3.6,你可以做
public static async Task<T> LoadObject<T>(string objectId) where T : DBObject
{
...
TestAttribute MyAttribute = (TestAttribute)System.Attribute.GetCustomAttribute(typeof(T), typeof(TestAttribute));
...
}
答案 1 :(得分:1)
Python默认生成UUID
代:
>>> import uuid
>>> uuid.uuid4()
UUID('bd65600d-8669-4903-8a14-af88203add38')
>>> str(uuid.uuid4())
'f50ec0b7-f960-400d-91f0-c42a6d44e3d0'
>>> uuid.uuid4().hex
'9fe2c4e93f654fdbb24c02b15259716c'
答案 2 :(得分:1)
所以基本上你想要一些随机的十六进制数字:
from random import randint
'-'.join(''.join('{:x}'.format(randint(0, 15)) for _ in range(y)) for y in [10, 4, 4, 4, 10])
其中10,4,4,4,10是格式字符串中每个段的长度。你可能想要添加一个种子,但基本上这就是你的JS代码所做的,产生像'f693a7aef0-9528-5f38-7be5-9c1dba44b9'
这样的字符串。