In the following two functions, why is it that the first one can see the outside variable but the second one can not?
name = 'Jack'
def say_hello():
print ('Hello ' + name + '!')
def change_name(new_name):
name = new_name
In the following two functions, why is it that the first one can see the outside variable but the second one can not?
name = 'Jack'
def say_hello():
print ('Hello ' + name + '!')
def change_name(new_name):
name = new_name
I'm not sure about the question is, but try this code and see if it clarifies things.
name = 'Jack'
print '"name" is this memory address', id(name)
def say_hello():
print ('Hello ' + name + '!')
def change_name(new_name):
name = new_name
print "name is now", name
print '"name" is this memory address', id(name)
say_hello()
change_name("Joe")
print "after change name =", name
print '"name" is this memory address', id(name)
Another post is mine to StackOverflow as I got suprized why append works.
Normally the rule is simple: if you have global variable on left side of assignment (and only then method call does not count), you must write global variable at beginning of function in order for code to work.
It is generally recarded as bad programming style though, and you should pass variables to function instead. If parameter is mutable the change will go outside the scope of function, like list or dictionary.
data = ['Jack']
def say_hello(name):
print ('Hello, ' + name + '!')
def change_name(new_name, data):
data[0] = new_name
say_hello(data[0])
change_name('Peter', data)
say_hello(data[0])
We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.