Pregunta

Zed Shaw's "Learn Python the Hard Way" frequently asks you to "write out in English" what each and every line of a script does. I am struggling to do that with some stuff associated with the function (command?) argv because I don't know what to name certain parts of the code. Heck, I don't even know what to call argv--a function? A command? Variable? I know it's a module. But back on track:

Here is the code from exercise 13:

from sys import argv

script, first, second, third = argv

print "The script is called:", script
print "Your first variable is:", first
print "Your second variable is:", second
print "Your third variable is:", third

Zed states "The 'argv' is the "argument variable." My question is, what is the name of the things to the left of the equals sign on line three?

Colloquially speaking, my urge is to call the words "script," "first" etc. variables themselves--but that doesn't seem right, since according to Zed argv is "the argument variable."

I did not think calling them "arguments" is correct either; I've only read "argument" in terms of command line arguments.

"Parameters" seemed likely, since it was mentioned in the title of the exercise, but doing web searches with combinations of "equals sign," "=," "python," "argv," "definition" and so on wasn't very enlightening. Searching for things is very difficult when you don't know what they're called.

I am very clear on what's happening in this script, I'm just not clear on the name of a part of it. I am very sure I'm going to slap my forehead when this is answered.

¿Fue útil?

Solución

The things to the left of the "=" are variables that get their value from the variable on the right.

Given:

script, first, second, third = argv

argv is a list of strings which in this case contains 4 items. These strings are "unpacked" and assigned to the four variables on the left of the =.

argv gets its value is when a Python program is invoked from the command line, like this:

test.py this is sure cool

in this case argv will contain ['test.py', 'this', 'is', 'sure', 'cool']. These strings after the command are called "command line arguments" (see this tutorial) and the name of the script, and any arguments are stored in argv. This is a way to send information to the script when you start it.

In this case the variables get the following values:

  script is set to  "this.py"  # the string is in argv[0]
  first to "is"     # argv[1]
  second to "sure"  # argv[2]

and

  third to "cool"   # argv[3]

So:

  script, first, second, third = argv

is really equivalent to:

  script = argv[0]
  first = argv[1]
  second = argv[2]
  third = argv[3]

It's only that Python lets you do this assignment in one nice swoop.

Note that you can pull out your command line arguments in any order using the appropriate index value.

This mechanism is used to communicate information the to the Python script. You can imagine running a program that expects an input file and and output file. Instead of hardcoding them in your script, you could provide them on the command line. E.g.,

 computeData.py input.txt result.txt

Otros consejos

Sometimes it's easier to just type some code into the interactive python prompt, and see how these things work.

While sys.argv is a list that is defined for you by Python itself, it's not that different from any list or tuple (the mutable and non-mutable array-like types of Python) you define yourself. So try defining one yourself and play with it. After you've declared a variable named argv = ['123','456','789'] that is a list type, try assigning it to another name:

  anothername = argv

Note that nothing special happens. now notice what happens if you instead try to assign to three different variables:

  v1,v2,v3 = argv

The first (technically, "zeroeth") element in argv is stored in v1, the second element of argv is stored in v2, and so on.

I believe I would call v1,v2,v3 a "list of variables that are going to hold stuff that used to be elements in the list argv, but which I wish to unpack and store in their own place".

To answer your first question, argv is an attribute of the sys module. As for your second question, Python's docs do not specify a name for the right-hand side of assignment expressions, but script, first, etc. can be called variables in this context.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top