繁体   English   中英

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

[英]Set multiple similar variables in 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);

您有10个名称相似的变量,只是数字不同。 可以肯定地说,您真正想要使用的是列表:

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

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

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]);
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 in range(0,10):
    song[i] = rss.entries[i].title.encode('latin-1', 'replace').replace("?" , "-")
    mc.set("track"+str(i), song[i]);

enumerate()rss.entries一起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)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM