赋值运算符

时间:2016-04-26 14:29:31

标签: python python-3.x

有人可以解释在作业左侧使用逗号分隔链(可能不是正确的术语,但我不想将其与list混淆)变量名称的概念操作

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

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

我知道这个例子可能会引出“some_file'”格式的问题,所以这是另一个我遇到的例子

username, password = sys.argv[1:]

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

在参考第一个示例时,kv如何从row获取其值,假设row是两列线。那些使用逗号作为分隔符吗?

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

4 个答案:

答案 0 :(得分:5)

k, v = row

username, password = sys.argv[1:]

sequence unpacking的示例。序列解包需要赋值运算符左侧的变量数与右侧的序列具有相同数量的元素。如果他们这样做,序列的第一个元素被分配给第一个变量,第二个元素分配给第二个,依此类推。如果它们不相等,则会抛出值错误。

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='|')

对于Python的每次调用,sys.argv自动为 list ,表示命令行上的参数(由空格分隔)。这又是一个有效的序列。 argv [0]始终是脚本名称。因此,如果用户使用2个参数运行程序,则用户名后跟密码sys.argv [1:]将是所需的2个元素的列表。

答案 1 :(得分:1)

这与其有效的原因相同:

a, b = [1, 2]

a分配给1,将b分配给2

这适用于CSV阅读器,因为您的文件必须有两列,第一个变量分配给该行的第一列,第二个变量分配给第二列。读者返回如上所示的列表,以便其工作原理:)

答案 2 :(得分:1)

基本上csv reader会将每一行作为list

返回

现在假设列表为a=[1,2,3] 如果你想通过分配列表来解压缩列表

a1,a2,a3 = a

并且解包值将像这样分配给变量

a1=1 a2=2 a3=3

  

数字左侧赋值变量应该等于列表的长度。

如果变量和列表长度不等于你将得到错误

  

ValueError:要解压缩的值太多

list会将值解压缩为索引并将其从左向右赋值。

现在让我们来谈谈。 在csv reader中,该行为list type,此列表的lengthcsv文件列的编号。所以当你打开包装时,你必须记住给出赋值变量的数量。

另一个sys.argv[]也会返回一个列表。

最后csv文件分隔符为comma(,),命令参数解析器分隔符为space(一个/多个),但解析后它们都返回list。因此,当我们尝试解压缩多个赋值变量时,我们必须考虑列表。

答案 3 :(得分:-1)

在左侧有一个变量组,在右侧有一个值列表。每个变量都获得适当的值。 所以这个方法与字符串和任何值分隔符无关。关键字是LIST(s)。

对于csv文件,您可以从中获取信息     pydoc csv 在 reader()的定义中:

reader(...)
    csv_reader = reader(iterable [, dialect='excel']
                            [optional keyword args])
        for row in csv_reader:
            process(row)

    The "iterable" argument can be any object that returns a line
    of input for each iteration, such as a file object or a list.  The
    optional "dialect" parameter is discussed below.  The function
    also accepts optional keyword arguments which override settings
    provided by the dialect