Python 3: 带字典的for循环语法

Python 3: for loop syntax with dictionary

以下代码片段有效:

param = {}

for nround_counter in [1,2,3]:
    { 
        print(nround_counter)
        #param = {'objective' : 'multi:softmax'}

    } 

但以下不是:

param = {}

for nround_counter in [1,2,3]:
    { 
        print(nround_counter)
        param = {'objective' : 'multi:softmax'}

    } 

给出的错误是无效语法。我是 Python 的新手,正在寻求有关调试上述内容的帮助。

谢谢。

循环、函数、类 等代码主体未用大括号括在 Python 中。缩进决定了代码结构。

for nround_counter in [1, 2, 3]:
    print(nround_counter)
    param = {'object' : 'multi:softmax'}

你在这里混淆了很多不同的问题。

这是您的第一个示例,使用通常用于 Python:

的空格呈现
#!python3
param = {}

for nround_counter in [1,2,3]:
    { print(nround_counter) }

请注意,这是对一系列语句的迭代,该语句(无用且令人困惑)被编码为一组文字构造函数表达式,并因其副作用而被调用(调用 print 函数)。它没有修改任何状态,但它被评估为一个集合,在循环的每次迭代中包含 None 单例作为其唯一元素。

这不是特殊语法。这只是Python的set literal构造语法的一种难以理解的用法。

也完全不清楚您要完成什么。遍历一个列表,不断地将 param 一遍又一遍地绑定到相同的文字字典内容是没有意义的。

也许如果您想构建某种 table?

param = dict()
for n in range(1,4):
    print(n)
    param['objective%s'%n] = 'multi:softmax'

...或类似的东西。请注意,我用 dict() 而不是文字 {} 来初始化 param,因为我认为它更简洁、更清晰,即使稍微冗长一点。此外,我使用 range(1,4) 而不是您的文字列表,同样是因为它更简洁。我在这个循环主体中所做的事情很愚蠢,但它是您可以做的事情的一个例子。

请注意,我正在为每次通过循环生成一个唯一键(一个常量字符串文字,其中插值了我的迭代器变量的字符串表示形式)。人们通常会期望这些值也能以某种方式动态计算或导出;但我不知道这是怎么回事,因为没有想到明确的教学示例。