如何在循环外使用变量

时间:2014-11-10 23:41:34

标签: python python-2.7

我正在处理我的python脚本,因为我在循环之外创建了变量,因此我可以生成数字列表。我在生成数字列表时遇到问题。

当我尝试这个时:

def All_Channels(self):
     #Pull the data from the database
     channelList = list()
     database_path = 
xbmc.translatePath(os.path.join('special://userdata/addon_data/script.tvguide', 
'source.db'))

     if os.path.exists(database_path):
         #get the channels list
         cur.execute('SELECT channel FROM programs WHERE channel GROUP BY 
channel')
         for row in cur:
             channels = row[0].encode('ascii')
             channelList.append(channels)

             # set the channels text
             for index in range(0, CHANNELS_PER_PAGE):
                 channel = channelList[index]
                 channel_index = index

                  if channel is not None:
                      for channels_id in range(4127, 4547, 70):
                          for channels_start_end in range(69): 
                              ID = channels_id + channels_start_end
                          print ID

我会得到这样的输出:

21:35:54 T:4724  NOTICE: 4545
21:35:54 T:4724  NOTICE: 4545
21:35:54 T:4724  NOTICE: 4545
21:35:54 T:4724  NOTICE: 4545
21:35:54 T:4724  NOTICE: 4545
21:35:54 T:4724  NOTICE: 4545
21:35:54 T:4724  NOTICE: 4545

输出应该是这样的:

我会得到这样的输出:

21:35:54 T:4724  NOTICE: 4127
21:35:54 T:4724  NOTICE: 4197
21:35:54 T:4724  NOTICE: 4267
21:35:54 T:4724  NOTICE: 4337
21:35:54 T:4724  NOTICE: 4407
21:35:54 T:4724  NOTICE: 4477
21:35:54 T:4724  NOTICE: 4547

问题在于此代码:

for channels_id in range(4127, 4547, 70):
    for channels_start_end in range(69): 
        ID = channels_id + channels_start_end
     print ID

请告诉我如何在循环外生成我想要的数字以及如何在循环外使用变量?

编辑:当我尝试这个时:

for channels_id in range(4127, 4547, 70):
    print channels_id

我会得到这个:

00:30:28 T:6972  NOTICE: 4127
00:30:28 T:6972  NOTICE: 4197
00:30:28 T:6972  NOTICE: 4267
00:30:28 T:6972  NOTICE: 4337
00:30:28 T:6972  NOTICE: 4407
00:30:28 T:6972  NOTICE: 4477

缺少一个值为4547的值。

编辑:*更新1:

当我尝试使用它时:

# set the channels text
for index in range(0, CHANNELS_PER_PAGE):
    channel = channelList[index]
    channel_index = index

    for channels_id in range(4127, 4548, 70):
        ID = []
        if channel is not None:
           ID = channels_id
    print ID
    print channel
    self.getControl(ID).setLabel(channel)

输出:

01:59:10 T:6768  NOTICE: 4547
01:59:10 T:6768  NOTICE: 4547
01:59:10 T:6768  NOTICE: 4547
01:59:10 T:6768  NOTICE: 4547
01:59:10 T:6768  NOTICE: 4547
01:59:10 T:6768  NOTICE: 4547
01:59:10 T:6768  NOTICE: 4547

它不会将值存储在循环之外,因为它将在行中获得相同的值7。

我想在for channels_id循环下使用for index的循环,这样我就可以在使用控件self.getControl(ID).setLabel(channel)使用变量设置标签之前生成值列表我使用变量channel生成值时在标签中设置的每个值ID。我一直在问你如何将值存储在循环之外以供以后使用。如果您能提供帮助,请在您的回答帖子中更新您的代码。

1 个答案:

答案 0 :(得分:3)

您已经可以访问循环外的变量。这就是为什么它打印4545,而不是给你UnboundLocalError或其他例外。

问题是"在循环之外"只发生一次,循环中的最后一个值。因此,您设置ID,然后再次设置,然后再次设置69次,最后打印第69个值。如果要打印69个值中的每一个,则每次循环都必须这样做。而不是:

for channels_start_end in range(69): 
    ID = channels_id + channels_start_end
print ID

这样做:

for channels_start_end in range(69): 
    ID = channels_id + channels_start_end
    print ID

或者,如果你想对所有69个值做一些事情,你必须将它们全部累加,例如,通过将它们添加到列表中,所以它们中的所有69个都可用,而不仅仅是最后一个:

IDs = []
for channels_start_end in range(69): 
    IDs.append(channels_id + channels_start_end)
print IDs

从您的评论中,您的问题似乎更简单。您不想打印所有值,只有每70个值。您已经在channels_id中获得了每70个值。所以,只需print

for channels_id in range(4127, 4547, 70):
    for channels_start_end in range(69): 
        ID = channels_id + channels_start_end
    print channels_id

但实际上,你似乎没有使用ID值做任何事情,或者对内部循环做任何有用的事情;而不是生成然后忽略每70个值中的69个,为什么不首先不生成它们?像这样:

for channels_id in range(4127, 4547, 70):
    print channels_id

您的最后一个问题是该循环不包含4547

这是因为Python range只包含值小于的停止值,而不是小于或等于它。有一个更简单的例子:

>>> for i in range(0, 3, 1):
...     print i
0
1
2

请注意,它没有打印3

所以,您可以使用range(4127, 4548, 70)range(4127, 4617, 70)(在您的用例中很难知道哪一个更多"自然"而不了解该用例是)获得你想要的所有价值。