I am a beginner of python and have a question, very confusing for me. If I define a function first but within the function I have to use a variable which is defined in another function below, can I do it like this? Or how can I import the return things of another function into a function? for example:
def hello(x,y):
good=hi(iy,ix)
"then do somethings,and use the parameter'good'."
return something
def hi(iy,ix):
"code"
return good
-
your example program works, because the two instances of 'good' are different variables (you just happen to have both variables with the same name). The following code is exactly the same:
def hello(x,y): good=hi(iy,ix) "then do somethings,and use the parameter'good'." return something def hi(iy,ix): "code" return great -
The scope of functions
helloandhiare entirely different. They do not have any variables in common.Note that the result of calling
hi(x,y)is some object. You save that object with the namegoodin the functionhello.The variable named
goodinhellois a different variable, unrelated to the variable namedgoodin the functionhi.They're spelled the same, but the exist in different namespaces. To prove this, change the spelling the
goodvariable in one of the two functions, you'll see that things still work.
Edit. Follow-up: "so what should i do if i want use the result of
hifunction inhellofunction?"Nothing unusual. Look at
helloclosely.def hello(x,y): fordf150 = hi(y,x) "then do somethings,and use the variable 'fordf150'." return something def hi( ix, iy ): "compute some value, good." return goodSome script evaluates
hello( 2, 3).Python creates a new namespace for the evaluation of
hello.In
hello,xis bound to the object2. Binding is done position order.In
hello,yis bound to the object3.In
hello, Python evaluates the first statement,fordf150 = hi( y, x ),yis 3,xis 2.a. Python creates a new namespace for the evaluation of
hi.b. In
hi,ixis bound to the object3. Binding is done position order.c. In
hi,iyis bound to the object2.d. In
hi, something happens andgoodis bound to some object, say3.1415926.e. In
hi, areturnis executed; identifying an object as the value forhi. In this case, the object is named bygoodand is the object3.1415926.f. The
hinamespace is discarded.good,ixandiyvanish. The object (3.1415926), however, remains as the value of evaluatinghi.In
hello, Python finishes the first statement,fordf150 = hi( y, x ),yis 3,xis 2. The value ofhiis3.1415926.a.
fordf150is bound to the object created by evaluatinghi,3.1415926.In
hello, Python moves on to other statements.At some point
somethingis bound to an object, say,2.718281828459045.In
hello, areturnis executed; identifying an object as the value forhello. In this case, the object is named bysomethingand is the object2.718281828459045.The namespace is discarded.
fordf150andsomethingvanish, as doxandy. The object (2.718281828459045), however, remains as the value of evaluatinghello.
Whatever program or script called
hellogets the answer.NONEenglisher : is that means the two functions are totally have relations?so what should i do if i want use the result of hi function in hello function? thanks alotJeffrey Martinez : There's a term for the situation where 'hello' calls 'hi' and 'hi' calls 'hello'. We call it recursion. A simpler case is when a function can call itself. It's not usually considered a beginner's topic, but if you run a search on recursion you'll find plenty of information. Welcome to programming. -
The "hello" function doesn't mind you calling the "hi" function which is hasn't been defined yet, provided you don't try to actually use the "hello" function until after the both functions have been defined.
-
If you want to define a variable to the global namespace from inside a function, and thereby make it accessible by other functions in this space, you can use the global keyword. Here's some examples
varA = 5 #A normal declaration of an integer in the main "global" namespace def funcA(): print varA #This works, because the variable was defined in the global namespace #and functions have read access to this. def changeA(): varA = 2 #This however, defines a variable in the function's own namespace #Because of this, it's not accessible by other functions. #It has also replaced the global variable, though only inside this function def newVar(): global varB #By using the global keyword, you assign this variable to the global namespace varB = 5 def funcB(): print varB #Making it accessible to other functionsConclusion: variables defined in a function stays in the function's namespace. It still has access to the global namespace for reading only, unless the variable has been called with the global keyword.
The term global isn't entirely global as it may seem at first. It's practically only a link to the lowest namespace in the file you're working in. Global keywords cannot be accessed in another module.
As a mild warning, this may be considered to be less "good practice" by some.
-
More details on the python scoping rules are here :
0 comments:
Post a Comment