2011-04-22 77 views
1

目标是将以下代码减少为尽可能少的代码行数(尽可能少)。它不需要'可读',甚至'pythonic',只需简短而甜蜜。这些更有趣。将以下几行PhotoImage代码减少为尽可能少的行数

self.BlueEgg = PhotoImage(file="assets/blueegg.gif") 
self.PolkaEgg = PhotoImage(file="assets/polkaegg.gif") 
self.RedEgg = PhotoImage(file="assets/redegg.gif") 
self.StripeEgg = PhotoImage(file="assets/sripeegg.gif") 
self.YellowEgg = PhotoImage(file="assets/yellowegg.gif") 
self.PurpleEgg = PhotoImage(file="assets/purpleegg.gif") 
self.PinkEgg = PhotoImage(file="assets/pinkegg.gif") 
self.OrangeEgg = PhotoImage(file="assets/orangeegg.gif") 
self.CrazyEgg = PhotoImage(file="assets/crazyegg.gif") 
self.PlainEgg = PhotoImage(file="assets/plainegg.gif") 

它vaugly适用于我的计划,但我更因此只是想看看你们能想出!大家复活节快乐!

回答

3

改变是鸡蛋的类型,从而改变该属性的唯一的事自我和文件名。所以...

types = ('Blue', 'Polka', 'Red', 'Stripe', 'Yellow', 'Purple', 'Pink', 'Orange', 'Crazy', 'Plain') 
for t in types: 
    setattr(self, '%sEgg' % t, PhotoImage(file='assets/%segg.gif' % t.lower())) 
+1

t =('蓝'等),因为我在t:会给你买几个字。 – Benjamin 2011-04-23 12:39:22

2

商店atributes和文件名的元组的列表:

mylistoftuples = [('BlueEgg', "assets/blueegg.gif"), .......] 

然后,分配在一个循环:

for attr, filename in mylistoftuples: 
    setattr(self, attr, PhotoImage(file=filename)) 

注意您有其他两种可能性按摩代码:
1)该目录始终是相同的,所以您不需要为列表中的每个项目硬编码assets/xxxx.gif事物。你可以在for循环中构建它。
2)文件名等于小写的属性。所以,如果你只存储在列表中,而不是一个元组的属性(PE BluEgg),你可以从它派生的文件路径:

mylist = ['BlueEgg', .......] 
for attr in mylist: 
    filename = os.path.join('assets', '%s.gif' % attr.lower()) 
    setattr(self, attr, PhotoImage(file=filename))