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
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
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()
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.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