有个代码看不懂,求解读

 关闭 [复制链接]
作者: 几个春夏 | 时间: 2022-2-23 23:03:59 | 已解决|
1 337
结帖率:100% (1/1)
发表于 2022-2-23 23:03:59| 显示全部楼层 |阅读模式
5金币

def uuid_generator():
    uuid_pattern = "xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx"
    uuid = ""
    now_t = int(round(time.time() * 1000000)) / 1000.0
    print(len(uuid_pattern))
    for i in uuid_pattern:
        e = (int(now_t + 16 * random.random()) % 16) | 0
        now_t = math.floor(now_t / 16)
        if i != "-":
            uuid = uuid + hex(e if i == "x" else 3 & e | 8)[-1:]
        else:
            uuid = uuid + "-"
    # print(uuid)
    return uuid

这是一个生成uuid的函数,然后里面有一个hex(e if i=="x" else 3 & I 8)[-1:]
完全看不懂是啥意思 &和I 知道是and 和or 但是这样写的混在一起就看不懂了 [-1:]是切片大概看明白了,但是结果也不是特别清楚
求教说,如果正常写一个if的话写出来是什么样子的 方便解读和理解,另外为什么要这样写呢?是简写的目的吗?初学者看起来真的很吃力






最佳答案

查看完整内容

if条件成立就返回前面的值, 否则返回else的值,后面的& | 是位运算符合 所以整体意思就是: 如果i是字符串x,就返回e的值, 否则返回 ( 3 & e | 8 ) 3是0b 0011 8是0b 1000 ( 3 & e | 8 )的结果就是 取 e值二进制的后两位,再替换第四位为1 hex函数是将数值转换成16进制字符串, [-1:]是取字符串的最后一位 ...
发表于 2022-2-23 23:04:00| 显示全部楼层

这里的if esle写法是python的三元表达式



if条件成立就返回前面的值, 否则返回else的值,后面的& | 是位运算符合
所以整体意思就是:
    如果i是字符串x,就返回e的值,
    否则返回 ( 3 & e | 8 )
        3是0b 0011
        8是0b 1000
        ( 3 & e | 8 )的结果就是 取 e值二进制的后两位,再替换第四位为1


hex函数是将数值转换成16进制字符串, [-1:]是取字符串的最后一位

评分

参与人数 2好评 +1 金币 +2 收起 理由
pnccm + 1 新技能已get√
prison + 2 感谢分享,很给力!~

查看全部评分

回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

!jz_fbzt! 快速回复 !jz_sctz! !jz_fhlb! 按钮
快速回复 返回列表 返回顶部