0
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

juanpa.arrivillaga
  • 77,035
  • 9
  • 115
  • 152
Sreekanth
  • 67
  • 1
  • 7

3 Answers3

1

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()
NoOne
  • 29
  • 5
0

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:

  • Place inner in a broader scope (i.e. outside out) and add to it a print(var1) statement.
  • If it is required to have the 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.
Ziyad Edher
  • 2,100
  • 18
  • 31
0

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
Community
  • 1
  • 1
danglingpointer
  • 4,388
  • 3
  • 22
  • 40
  • Your first example is wrong. It gives an error saying a is undefined. Also, a colon is needed at the end of 'def fun2(a=a)'. – alanf Apr 06 '17 at 08:22
  • I missed the colon didnt notice that.. Would you provide the logs of undefined, I explained here the usage of inner functions in python. – danglingpointer Apr 06 '17 at 08:27