Reputation: 87
def out():
var1 = "abc"
print(var1)
def inner():
var2 = "def"
I want to call only "Inner" function... the final output should print only var2 not var1...
Thank you in advance
Upvotes: 0
Views: 435
Reputation: 4920
The method your trying is called as nested functions:
You can chek this answer for information about nested function in Python.
Some other information about closure
Another method is,
def fun1():
x = 11
def fun2(a=a):
print x
fun2()
fun1()
Output:
prints 11
Example 2:
def f1(x):
def add(y):
return x + y
return add
res = f1(5)
print(res(10)) # prints 15
Upvotes: 0
Reputation: 27
If you don't want to run some part of the function 'out' you could use parameters.
def out(choice=True):
if choice :
var1 = "abc"
print(var1)
else :
def inner():
var2 = "def"
print(var2)
inner()
Upvotes: 1
Reputation: 2150
You will not be able to call inner
from outside the out
function, since inner
is only defined inside out
, unless you create a reference to inner
from outside the out
function. In addition, inner
is not outputting anything since it does not have a print statement.
To combat this, you have two options:
inner
in a broader scope (i.e. outside out
) and add to it a print(var1)
statement.inner
function be inside out
then just return inner
as a closure from out
, with the print statement also inside inner
; or just call it from inside out
. This has a side-effect of also executing whatever statements are inside out
up to returning the closure.Upvotes: 0