在Python中设置多个类似的变量

2024-05-23 17:22:37 发布

您现在位置:Python中文网/ 问答频道 /正文

如何清理以下代码并使其看起来更好?你知道吗

我想知道是否有一种方法可以将所有这些变量和值设置在一个更简单、更简短的版本中。这样做的例子是什么?:-)

import feedparser
import memcache
import sys

mc = memcache.Client(["127.0.0.1:11211"])
rss = feedparser.parse('http://example.com/example.rss')
song0 = rss.entries[0].title.encode('latin-1', 'replace').replace("?" , "-")
song1 = rss.entries[1].title.encode('latin-1', 'replace').replace("?" , "-")
song2 = rss.entries[2].title.encode('latin-1', 'replace').replace("?" , "-")
song3 = rss.entries[3].title.encode('latin-1', 'replace').replace("?" , "-")
song4 = rss.entries[4].title.encode('latin-1', 'replace').replace("?" , "-")
song5 = rss.entries[5].title.encode('latin-1', 'replace').replace("?" , "-")
song6 = rss.entries[6].title.encode('latin-1', 'replace').replace("?" , "-")
song7 = rss.entries[7].title.encode('latin-1', 'replace').replace("?" , "-")
song8 = rss.entries[8].title.encode('latin-1', 'replace').replace("?" , "-")
song9 = rss.entries[9].title.encode('latin-1', 'replace').replace("?" , "-")

mc.set("track0", song0);
mc.set("track1", song1);
mc.set("track2", song2);
mc.set("track3", song3);
mc.set("track4", song4);
mc.set("track5", song5);
mc.set("track6", song6);
mc.set("track7", song7);
mc.set("track8", song8);
mc.set("track9", song9);

Tags: importtitleexamplemcreplacememcacheencoderss
3条回答

最干净(因此最好)的方法:

import feedparser
import memcache
import sys

mc = memcache.Client(["127.0.0.1:11211"])
rss = feedparser.parse('http://example.com/example.rss')
songs = [] # Initialize “songs” to the empty list
for i in range(0, 10):
    # Add items in “songs”
    songs.append(rss.entries[i].title.encode('latin-1', 'replace').replace("?" , "-"))

for (i, song) in enumerate(songs): # This is equivalent to “for i in range(0, len(songs)+1):” and “song = songs[i]”
    mc.set("track%i" % i, song);

如果你真的想把歌曲保存在不同的变量中(我几乎可以肯定你实际上不想这样做;更详细地说,不建议使用它(参见对这个问题的评论)):

import feedparser
import memcache
import sys

mc = memcache.Client(["127.0.0.1:11211"])
rss = feedparser.parse('http://example.com/example.rss')
for i in range(0, 10):
    locals()['song%i' % i] = rss.entries[0].title.encode('latin-1', 'replace').replace("?" , "-")

for i in range(0, 10):
    mc.set("track%i" % i, locals()['song%i' % i]);

enumerate()rss.entries一起使用将使您摆脱手动维护索引的负担。最棒的是,不管rss.entries的长度如何,它都能工作。你知道吗

import feedparser
import memcache
import sys

mc = memcache.Client(["127.0.0.1:11211"])
rss = feedparser.parse('http://example.com/example.rss')

song = []
for i, entry in enumerate(rss.entries):
    title = entry.title.encode('latin-1', 'replace').replace("?" , "-")
    song.append(title)
    mc.set("track%d" % i, title)

您有10个变量,它们的名称相似,但只有一个数字不同。这是一个明确的信号,表明你真正想要使用的是一个列表:

songs = [i.title.encode("latin-1", "replace").replace("?" , "-") for i in rss.entries]

相关问题 更多 >