0

我有这个方法:

def get_user_info(self):

    month       = choice(range(1,13))
    day         = choice(range(1,29))
    year        = choice(range(1966,1994))  
    f_name      = self.assign_name('FirstNames')
    l_name      = self.assign_name('LastNames')
    e_address   = f_name+l_name+year.__str__()+day.__str__()
    password    = f_name+l_name+'0008383'

    user_info = dict({
            'month'     : month,
            'day'       : day,
            'year'      : year,

            'f_name'    : f_name,
            'l_name'    : l_name,
            'e_address' : e-address,
            'password'  : password
    })

    print user_info

它给了我正确的结果,但我填写就像我写了两次相同的代码一样。所以我的问题是如何在不首先创建变量的情况下获得相同的结果,然后将它们放入 dict()。

注意,我需要在不同的键:值对中使用 f_name 和 l_name 等。

4

3 回答 3

3

我倾向于认为,考虑到你正在计算的值,你现在做的方式或多或少是你能做的最好的。有一些小的改进,例如跳过调用dict并使用str内置函数而不是__str__直接调用方法,但实际上并没有任何好的更改可以在高级别进行。

原因是您至少两次使用前五个变量中的每一个。您可以单独使用它们一次,作为存储在字典中它们自己键下的值(例如,该f_name值存储为user_info["f_name"]),并且您还使用它们来构建e_address和/或的值password。虽然可以将前五个值直接放入字典中,但再次将它们取出以用于其他计算需要比您现在拥有的代码更加冗余的代码。

所以,除非你想改变你的e_addressorpassword计算以独立于其他值,否则我会坚持你所拥有的。

于 2012-12-11T03:24:06.803 回答
1

不确定您是否正在寻找重构代码或减少长度。

如果是后者,您可以进行多次赋值并减少行数。

所以像:

def get_user_info(self):

    month, day, year      = choice(range(1,13)) , choice(range(1,29)), choice(range(1966,1994))  
    f_name, l_name        = self.assign_name('FirstNames') , self.assign_name('LastNames')
    e_address, password   = f_name+l_name+year.__str__()+day.__str__(), f_name+l_name+'0008383'

而且你真的不需要输入'dict()',{}已经这样做了!

于 2012-12-11T02:59:12.437 回答
0

这可能是您在不牺牲可读性的情况下可以做到的最短时间(例如,改进PEP8 编译):

    def get_user_info(self):
        month = choice(range(1, 13))
        day = choice(range(1, 29))
        year = choice(range(1966, 1994))
        f_name = self.assign_name('FirstNames')
        l_name = self.assign_name('LastNames')
        print {'month' : month,
               'day' : day,
               'year' : year,
               'f_name' : f_name,
               'l_name' : l_name,
               'e_address' : f_name + l_name + str(year) + str(day),
               'password' : f_name + l_name + '0008383'}

作为旁注,请重新考虑您的密码生成策略,它在您的代码中非常不安全。

你也注意到你可能错过了month作业e_address吗?

于 2012-12-11T07:16:46.977 回答