Could someone please explain the concept of having a comma delimited chain (probably not the correct terminology, but I didn't want to confuse it with list
) of variable names on the left side of the assignment operator?
What I'm referring to would be something of the following nature
reader = csv.reader(open('some_file', 'rb'))
for row in reader:
k, v = row
myDictionary[k] = v
I know that example might lead to the question of the format of 'some_file', so here is another example I've come across
username, password = sys.argv[1:]
I understand that argv
comes from the command line, and 1:
refers to all arguments after the python script name, but how do username and password get the correct items? In other words, what delimits the arguments passed into this program, is it just the space between the arguments?
In reference to the first example, how do k
and v
get their values from row
, assuming row
is a two column line. Do those use the comma as the delimiter?
Any explanation and/or links to Python code or documentation would be great.
You can assign multiple values to multiple variables by separating variables and values with commas , . You can assign to more than three variables. It is also possible to assign to different types. If there is one variable on the left side, it is assigned as a tuple.
Multiple variable assignment is also known as tuple unpacking or iterable unpacking. It allows us to assign multiple variables at the same time in one single line of code. In the example above, we assigned three string values to three variables in one shot. As the output shows, the assignment works as we expect.
k, v = row
and
username, password = sys.argv[1:]
are examples of sequence unpacking. Sequence unpacking requires the number of variables on the left hand side of the assignment operator to have the same number of elements as the sequence on the right. If they do the first element of the sequence is assigned to the first variable, the second to the second and so on. If they are not equal it will throw a value error.
str, unicode, list, tuple, bytearray, buffer, xrange are all valid sequences and can be used on the right hand side of the operator.
All that is left to understand is whether 'row' and sys.argv[1:] are valid sequences with 2 elements.
csv.reader() returns each row of the csv as a list of strings. So it is a valid sequence. If the csv has 2 columns the list will have 2 elements. By default csv.reader uses a comma as the delimeter to split on. You can specify a different delimiter if required:
csv.reader(csv_file, delimiter='|')
For every invocation of Python, sys.argv is automatically a list of strings representing the arguments (as separated by spaces) on the command-line. So again a valid sequence. argv[0] is always the script name. So if the user ran the program with 2 arguments, a username followed by a password sys.argv[1:] would be a list of 2 elements as required.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With