def out():
var1 = "abc"
print(var1)
def inner():
var2 = "def"
我想打电话给唯一的“内在”的功能......最后的输出应该只打印VAR2不VAR1 ...如何调用一个函数,它在python的另一个函数中定义?
预先感谢您
def out():
var1 = "abc"
print(var1)
def inner():
var2 = "def"
我想打电话给唯一的“内在”的功能......最后的输出应该只打印VAR2不VAR1 ...如何调用一个函数,它在python的另一个函数中定义?
预先感谢您
您将无法调用inner
从除out
函数以外,因为inner
仅在out
内部定义,除非您从out
函数外部创建对inner
的引用。此外,inner
不会输出任何内容,因为它没有打印语句。
为了解决这个问题,你有两个选择:
inner
在更广的范围内(即外out
),并给它添加一个print(var1)
声明。inner
功能在里面out
然后就返回inner
作为closure从out
,用print语句也在里面inner
;或者只是从out
内部调用它。这有一个副作用,即在返回闭包之前还执行out
内的任何语句。“你将无法从out函数外部调用内部”< - Well *技术上*可以强制外部函数在第一次调用时在'globals()'中创建对内部函数的引用。这不是你想做的事情。 – timgeb
的方法您的艰难被称为嵌套函数:
您可以赤这个答案,了解有关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
你的第一个例子是错误的。它给出了一个错误,说a是未定义的。另外,在'def fun2(a = a)'结尾处需要冒号。 – alanf
我错过了冒号没有注意到..你会提供未定义的日志,我在这里解释了Python中内部函数的用法。 – LethalProgrammer
如果您不想运行“out”功能的某个部分,则可以使用参数。
def out(choice=True):
if choice :
var1 = "abc"
print(var1)
else :
def inner():
var2 = "def"
print(var2)
inner()
您必须移动'inner()'并为'var2'添加一个'print'调用。这与django和tkinter btw无关。 –
为什么你不只有两个不同的功能?在你的项目中有一些要求吗? – LethalProgrammer
如何在'print(var2)'没有'print'时打印var2'?如果您甚至没有以任何方式返回,您希望如何调用该函数?请澄清你的问题。 –