【问题标题】:How to call a function, it define in another function in python?如何调用一个函数,它在python的另一个函数中定义?
【发布时间】:2017-09-01 02:43:13
【问题描述】:
def out():
   var1 = "abc"
   print(var1)

   def inner():
      var2 = "def"

我只想调用“内部”函数...最终输出应该只打印 var2 而不是 var1...

提前谢谢你

【问题讨论】:

  • 您必须移动inner() 并添加print 呼叫以获取var2。这与 django 和 tkinter 无关。
  • 为什么没有两个不同的功能?这是您项目中的一些要求吗?
  • 在没有print(var2) 的情况下要如何打印var2?如果您甚至不以任何方式返回它,您想如何调用该函数?请澄清您的问题。

标签: python


【解决方案1】:

您尝试的方法被称为嵌套函数:

您可以查看此答案以获取有关 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)' 的末尾需要一个冒号。
  • 漏了冒号没注意到.. 能否提供未定义的日志,我这里解释了python内部函数的用法。
【解决方案2】:

如果您不想运行“out”函数的某些部分,可以使用参数。

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

【讨论】:

    【解决方案3】:

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

    要解决这个问题,您有两种选择:

    • inner 放在更广泛的范围内(即在out 之外)并添加print(var1) 语句。
    • 如果要求inner 函数包含在out 中,那么只需将inner 作为closureout 返回,打印语句也在@987654336 中@;或者只是从out 内部调用它。这有一个副作用,即执行 out 中的任何语句直到返回闭包。

    【讨论】:

    • "你将无法从 out 函数外部调用内部函数" 技术上可以强制外部函数创建对内部函数的引用在globals() 的第一次通话中。这不是你曾经想要做的事情。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-01-15
    • 1970-01-01
    • 2012-03-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多