我正在阅读Lutz的Programming Python,以下脚本旨在创建三个人的记录,通过将它们存储在一个搁架中使它们持久化,然后允许用户在终端中输入人名以获取信息。我没有这里的所有代码,只是我认为有必要理解。
第8-13行显示了用于创建每个人的类。然后将它们写入第15行所示的class-shelve
架子。我理解的两条线路是17和29/30。
17我不确定这里的逻辑。
29是书中的一行,我不明白我试用的代码30是如何有所不同的?
6 import shelve
7
8 class Person:
9 def __init__(self, name, age, pay=0, job=None):
10 self.name = name
11 self.age = age
12 self.pay = pay
13 self.job = job
14
15 classShelve = './output/class-shelve'
16 fieldnames = ('name', 'age', 'job', 'pay')
17 maxfield = max(len(f) for f in fieldnames)
18 db = shelve.open(classShelve)
19
20 while True:
21 key = input('\nKey? => ')
22 if not key: break
23 try:
24 record = db[key]
25 except:
26 print('No such key "%s"!' % key)
27 else:
28 for field in fieldnames:
29 #print(field.ljust(maxfield), '=>', getattr(record, field))
30 print(field, '=>', getattr(record, field))
答案 0 :(得分:2)
maxfield = max(len(f) for f in fieldnames)
这会将max
函数应用于理解len(f) for f in fieldnames
len(f) for f in fieldnames
也可以写成
[len(f) for f in fieldnames]
表示:创建fieldnames
中所有项目的长度列表。
max(len(f) for f in fieldnames)
表示:找到fieldnames
中的最大项目。
你的问题不是那么清楚。 我假设您在询问以下功能是做什么的?
field.ljust(maxfield)
根据this reference,string.ljust将一个字符串填充到给定的长度,以便左对齐它。默认情况下,它使用空格填充。也许这就是你没有看到任何东西的原因。如果你为它提供第二个参数,它会使用它来填充字符串。如果字符串的长度大于提供的长度,它只返回字符串而不修改它。