我有这个方法:
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等。
答案 0 :(得分:3)
我倾向于认为,考虑到你正在计算的价值,你现在这样做的方式或多或少是你能做的最好的。有一些小改进,例如跳过对dict
的调用并使用str
内置函数而不是直接调用__str__
方法,但实际上没有任何好的更改在高层次。
原因是你使用前五个变量中的每一个至少两次。您可以单独使用它们一次,作为在其自己的键下存储在字典中的值(例如,f_name
值存储为user_info["f_name"]
),您还可以使用它们来构建{{{ 1}}和/或e_address
。虽然可以将前五个值直接放入字典中,但再次将它们用于其他计算需要的代码比现在的代码更加冗余。
因此,除非您想将password
或e_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
吗?