赋值运算符左侧的Python多变量

cur*_*ran 7 python python-3.x

有人可以解释list在赋值运算符的左侧有一个逗号分隔链(可能不是正确的术语,但我不想混淆它)变量名的概念吗?

我指的是具有以下性质的东西

reader = csv.reader(open('some_file', 'rb'))
for row in reader:
    k, v = row
    myDictionary[k] = v
Run Code Online (Sandbox Code Playgroud)

我知道这个例子可能导致'some_file'格式的问题,所以这是我遇到的另一个例子

username, password = sys.argv[1:]
Run Code Online (Sandbox Code Playgroud)

我理解它argv来自命令行,并1:引用python脚本名称后的所有参数,但用户名和密码如何获取正确的项目?换句话说,是什么界定了传递给这个程序的参数,它只是参数之间的空间吗?

参考第一个例子,假设是两列线,如何做kv得到它们的值.那些使用逗号作为分隔符吗?rowrow

任何解释和/或Python代码或文档的链接都会很棒.

小智 5

k, v = row
Run Code Online (Sandbox Code Playgroud)

username, password = sys.argv[1:]
Run Code Online (Sandbox Code Playgroud)

序列开箱的例子。序列解压缩要求赋值运算符左侧的变量数量与右侧序列的元素数量相同。如果这样做,则将序列的第一个元素分配给第一个变量,将第二个分配给第二个变量,依此类推。如果它们不相等,将抛出值错误。

str,unicode,list,tuple,bytearray,buffer,xrange都是有效序列,可以在运算符的右侧使用。


剩下要了解的是'row'和sys.argv [1:]是否是具有2个元素的有效序列。

csv.reader()返回csv的每一行作为字符串列表。因此,这是一个有效的序列。如果csv有2列,则列表将包含2个元素。默认情况下,csv.reader使用逗号作为分隔符。如果需要,可以指定其他定界符:

csv.reader(csv_file, delimiter='|')
Run Code Online (Sandbox Code Playgroud)

对于每次Python调用,sys.argv都会自动是一个字符串列表,这些字符串代表命令行上的参数(用空格分隔)。因此再次是有效序列。argv [0]始终是脚本名称。因此,如果用户使用2个参数运行程序,则用户名和密码sys.argv [1:]将根据需要包含2个元素。