Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/332.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:在for循环之前分配的变量_Python_Syntax - Fatal编程技术网

Python:在for循环之前分配的变量

Python:在for循环之前分配的变量,python,syntax,Python,Syntax,我是python新手,但不是一般的编程。在检查“深入Python”时,我发现了这个示例(它可以工作),但我不了解语法 return ";".join(["%s=%s" % (k, v) for k, v in params.items()]) 简单地说,它使用变量k和v作为“%s=%s”的字符串(这里没什么奇怪的),但是这些变量还没有任何值。就像这样,有一个for循环,它迭代并给k和v赋值。这就是让我困惑的地方: 1.for循环以某种方式将值k和v“返回”到上一条语句(k,v)。 2.这两条语

我是python新手,但不是一般的编程。在检查“深入Python”时,我发现了这个示例(它可以工作),但我不了解语法

return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
简单地说,它使用变量k和v作为“%s=%s”的字符串(这里没什么奇怪的),但是这些变量还没有任何值。就像这样,有一个for循环,它迭代并给k和v赋值。这就是让我困惑的地方: 1.for循环以某种方式将值k和v“返回”到上一条语句(k,v)。 2.这两条语句(1。“%s=%s”%(k,v)和2.对于params.items()中的k,v)可以在同一行中,没有语法错误

我已经检查了“for”语法引用,它甚至没有提示这个方向,所以我确定我必须检查其他地方,但不知道在哪里

先谢谢你

param.items() = [(key1, val1), (key2, val2) ... ]
此列表的扩展代码。。首先在方括号内生成列表,然后通过将其传递给join方法将列表连接在一起

new_list = []
for each_tuple in param.items():
    k = each_tuple(0)
    v = each_tuple(1)
    new_list.append("%s==%s" % (k, v,))
":".join(new_list)         # new_list = ['k1==v1', 'k2==v2', 'k3==v3',...]

>>> 'key1==value1:key2==value2:key3==value3....'

列表理解是一种将一个列表(实际上是任何iterable)转换为另一个列表的工具。在此转换过程中,元素可以有条件地包含在新列表中,并且可以根据需要转换每个元素

如果您熟悉函数式编程,可以将列表理解看作是
过滤器
后跟
映射
的语法糖:

>>> doubled_odds = map(lambda n: n * 2, filter(lambda n: n % 2 == 1, numbers))
>>> doubled_odds = [n * 2 for n in numbers if n % 2 == 1]
每个列表理解都可以重写为for循环,但不是每个for循环都可以重写为列表理解

如果您可以将代码重写为如下for循环,也可以将其重写为列表:

new_things = []
for ITEM in old_things:
    if condition_based_on(ITEM):
        new_things.append("something with " + ITEM)
您可以将上述for循环重写为如下列表:

new_things = ["something with " + ITEM for ITEM in old_things if condition_based_on(ITEM)]    

这叫做列表理解,他们在您提到的深入Python中非常简单地解释了这一点。