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
  • 88,713
  • 10
  • 131
  • 172
Sreekanth
  • 87
  • 2
  • 8

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
  • 27
  • 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,150
  • 18
  • 31
  • "You will not be able to call inner from outside the out function" <- Well *technically* it is possible to force the outer function to create a reference to the inner function in `globals()` on its first call. It's just not something you ever *want* to do. – timgeb Apr 06 '17 at 11:17
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,708
  • 3
  • 24
  • 42
  • 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