如何复制 returns 随机值的函数值?

how do i copy the value of a function that returns random values?

我正在尝试将密码转换为散列密码,同时保留原始密码。

看来我尝试的两个版本 return 不一样(即使是深拷贝,我删除了。)

def publish_rando(pub_id):
    rand_user = rando() #just a random string generator function
    rand_pass = rando() #just a random string generator function

    hashed_pass = _hash.bcrypt.hash(rand_pass) #hashed version of the random pass

    pub_pass = _models.pubUser(pub_id = pub_id, rand_user = rand_user, rand_pass = rand_pass)
    pub_hash = _models.pubUser(pub_id = pub_id, rand_user = rand_user, rand_pass = hashed_pass)
    
    return {'pub_hash': pub_hash, 'pub_pass': pub_pass}

我得到了什么:

{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7f20e21486a0>, 'pub_id': '57', 'rand_user': '5uJm#<B>WYu?', 'rand_pass': 'b$tHRolNUYQZ6XJm27UZaXTO7SKmJKAbHaqH97DbKQxvMrw79pAK9t.'}
{'_sa_instance_state': <sqlalchemy.orm.state.InstanceState object at 0x7f20e2148490>, 'pub_id': '57', 'rand_user': 'J*gne5Nm#B<2', 'rand_pass': 'sjM%OvAtHg>8'}

注意用户不同,这告诉我密码也不一样。

_models.pubUser 是一个 sqlalchemy 模型:

class pubUser(Base):
    __table__ = Table('pub_user', metadata,
                    autoload=True, autoload_with=engine)

来电:

pub_rand_hashed = _crud.publish_rando(d['pub_id']).get('pub_hash') #this creates another sqlalchemy row object
pub_rand_unhashed = _crud.publish_rando(d['pub_id']).get('pub_pass') #this creates another sqlalchemy row object

print(pub_rand_hashed.__dict__, pub_rand_unhashed.__dict__)

好吧,这完全是新手犯的错误,但也许它会对某人有所帮助。

@Barmar 敏锐地指出,如果您不调用该函数两次,则不可能有不同的答案。

嗯,我改变了这个:

pub_rand_hashed = _crud.publish_rando(d['pub_id']).get('pub_hash') #this creates another sqlalchemy row object
pub_rand_unhashed = _crud.publish_rando(d['pub_id']).get('pub_pass') #this creates another sqlalchemy row object

对此:

pub_rand = _crud.publish_rando(d['pub_id']) #this creates another sqlalchemy row object
pub_rand_unhashed = pub_rand.get('pub_pass')
pub_rand_hashed = pub_rand.get('pub_hash')