[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Can global variable be passed into Python function?

On Fri, 21 Feb 2014 07:13:25 -0500, Ned Batchelder wrote:

> On 2/21/14 2:23 AM, dieter wrote:
>> Sam<lightaiyee at gmail.com>  writes:
>>> >I need to pass a global variable into a python function.
>> Python does not really have the concept "variable".
>> What appears to be a variable is in fact only the binding of an object
>> to a name. If you assign something to a variable, all you do is binding
>> a different object to the name.
> Man, do I hate this idea that Python has no variables.  It has variables
> (names associated with values, and the values can change over the course
> of the program), they just don't work the same as C or Fortran
> variables. In fact, they work exactly the same as Javascript or Ruby
> variables.

I sympathise with your view. It seems quite ridiculous to claim that 
Python has no variables. If it has no variables, what on earth does it 
mean when we say "x = 42"?

But the very ridiculousness is what gives it the attention-grabbing power 
that makes it a useful meme. "Python variables don't behave like C 
variables" might be true, but it's also wish-washy and forgettable.

In my own case, I never quite got Python's name binding semantics until I 
was introduced to the "Python has no variables" meme. That got my 
attention long enough to listen to the actual message: my assumptions 
about how variables behave was based on Pascal semantics, and Python 
doesn't quite follow the same rules. Consequently, if I implicitly define 
"variable" to mean "Pascal variables", as I had been, then Python has no 
variables, it has these things called "name bindings".

That's when I got it.

I went through a phase where I too insisted that Python had no variables. 
But then my natural laziness asserted itself, and I decided that the word 
"variable" is too useful to always reject it (and besides, C- and Pascal-
like languages don't have a monopoly on the word "variable"). Now, I use 
the terms "variable" or "reference" or "name binding" as I feel makes the 
most sense in context, depending on my best guess of the risk of 
misunderstanding or confusion.