2017-04-06 137 views
0
def out(): 
    var1 = "abc" 
    print(var1) 

    def inner(): 
     var2 = "def" 

我想打电话给唯一的“内在”的功能......最后的输出应该只打印VAR2不VAR1 ...如何调用一个函数,它在python的另一个函数中定义?

预先感谢您

+0

您必须移动'inner()'并为'var2'添加一个'print'调用。这与django和tkinter btw无关。 –

+0

为什么你不只有两个不同的功能?在你的项目中有一些要求吗? – LethalProgrammer

+0

如何在'print(var2)'没有'print'时打印var2'?如果您甚至没有以任何方式返回,您希望如何调用该函数?请澄清你的问题。 –

回答

0

您将无法调用inner从除out函数以外,因为inner仅在out内部定义,除非您从out函数外部创建对inner的引用。此外,inner不会输出任何内容,因为它没有打印语句。

为了解决这个问题,你有两个选择:

  • inner在更广的范围内(即外out),并给它添加一个print(var1)声明。
  • 如果需要有inner功能在里面out然后就返回inner作为closureout,用print语句也在里面inner;或者只是从out内部调用它。这有一个副作用,即在返回闭包之前还执行out内的任何语句。
+0

“你将无法从out函数外部调用内部”< - Well *技术上*可以强制外部函数在第一次调用时在'globals()'中创建对内部函数的引用。这不是你想做的事情。 – timgeb

0

的方法您的艰难被称为嵌套函数:

您可以赤这个答案,了解有关nested function in Python

其他一些有关closure

另一种方法是,

def fun1(): 
    x = 11 
    def fun2(a=a): 
     print x 
    fun2() 

fun1() 

输出:

prints 11 

实施例2:

def f1(x): 
    def add(y): 
     return x + y 
    return add 

res = f1(5) 
print(res(10)) # prints 15 
+0

你的第一个例子是错误的。它给出了一个错误,说a是未定义的。另外,在'def fun2(a = a)'结尾处需要冒号。 – alanf

+0

我错过了冒号没有注意到..你会提供未定义的日志,我在这里解释了Python中内部函数的用法。 – LethalProgrammer

1

如果您不想运行“out”功能的某个部分,则可以使用参数。

def out(choice=True): 
    if choice : 
    var1 = "abc" 
    print(var1) 
else : 
    def inner(): 
     var2 = "def" 
     print(var2) 
    inner() 
相关问题