如何用更少的代码编写相同的内容。蟒蛇

时间:2012-12-11 02:50:10

标签: python dictionary

我有这个方法:

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()。

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

3 个答案:

答案 0 :(得分:3)

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

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

因此,除非您想将passworde_address计算更改为独立于其他值,否则我会坚持使用您拥有的内容。

答案 1 :(得分: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()',{}已经这样做了!

答案 2 :(得分: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吗?