理解python代码

时间:2015-11-20 21:37:06

标签: python

我正在阅读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))

1 个答案:

答案 0 :(得分:2)

第17行:

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中的最大项目。

第29/30行

你的问题不是那么清楚。 我假设您在询问以下功能是做什么的?

field.ljust(maxfield)

根据this reference,string.ljust将一个字符串填充到给定的长度,以便左对齐它。默认情况下,它使用空格填充。也许这就是你没有看到任何东西的原因。如果你为它提供第二个参数,它会使用它来填充字符串。如果字符串的长度大于提供的长度,它只返回字符串而不修改它。