一臉正態懵逼,求大神賜教
d = { 'Adam': 95, 'Lisa': 85, 'Bart': 59 }
def generate_tr(name, score):
? ? if score < 60:
? ? ? ? return '<tr><td>%s</td><td style="color:red">%s</td></tr>' % (name, score)
? ? return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)
tds = [generate_tr(name, score) for name, score in d.iteritems()]
print '<table border="1">'
print '<tr><th>Name</th><th>Score</th><tr>'
print '\n'.join(tds)
print '</table>'
這復雜表達式怎么理解怎么玩?
如果我們用一個函數來替換字符串的格式化代碼,可以得到更清晰的代碼:
def generate_tr(name, score):
? ?return '<tr><td>%s</td><td>%s</td></tr>' % (name, score)
tds = [generate_tr(name, score) for name, score in d.iteritems()]
這樣,只需要修改 generate_tr() 函數,必要的時候把score標紅。
這又怎么理解?
2017-07-16
1、這是列表生成式 :tds = [generate_tr(name, score) for name, score in d.iteritems()] 它等同于
for name,score in d.iteritems():
????generate(name,score)
2、for name,score in d.iteritems 的那么相當于d字典中的每個key,socre相當于d字典中的每個value
3、?'<tr><td>%s</td><td>%s</td></tr>' % (name, score)’字符串中的%s相當于占位符字符輸出是會被?(name, score)的值對應更替的
2017-07-16
tds =?[generate_tr(name, score) for name, score in d.iteritems()] 中,generate_tr(name, score)函數,這里需要傳入的參數,就是 in 后面?d.iteritems() 迭代出來的值,假設第一個值是 ('abc',80) 那么, 就回返回:?'<tr><td>%s</td><td>%s</td></tr>' %??(name, score) ,傳入的參數就回去替代返回字符串的兩個%s,即'<tr><td>abc</td><td>80</td></tr>'