yooooly 发表于 2019-11-20 10:42:18

关于函数的一个小问问题

1.a = Function1 表示a 为一个函数,a= Function1()表示a为函数运行后的值吗
2.那如果a = Function1(),a()表示什么呢,a()()呢

jackz007 发表于 2019-11-20 11:02:56

本帖最后由 jackz007 于 2019-11-20 11:16 编辑

def Function1():                           # Function1() 的函数定义
    def Function2():                         # Function2() 的函数定义
      print("I'm in Function2()")   # Function2() 的语句
    return Function2                        # Function1() 的返回语句,返回的是内嵌函数 Function2() 的调用地址
a = Function()                                 # 获取到 Function1() 的内嵌函数 Function2() 的调用地址
a()                                                 # 调用 Function1() 的内嵌函数 Function2(),也可以直接写 Function1()() 来达到同样的目的。

      上面的代码中,蓝色部分属于函数 Function1(),红色部分属于 Function1() 的内嵌函数 Function2()。

       正如上述,a() 是调用内嵌函数 Function2() ,a()() 纯属瞎胡闹。

hjp808 发表于 2019-11-20 12:52:39

a为函数返回值,a()、a()() 是会报错。
比如你的函数值是返回 8 。a的值就是8
再写a(),就无意义也报错。 你假设的函数返回值是什么东西呢?

hjp808 发表于 2019-11-20 12:55:30

jackz007 发表于 2019-11-20 11:02
def Function1():                           # Function1() 的函数定义
    def Function2():          ...

按这个说法,假如Function2 又嵌套 Function3. 那a()() 就是调用嵌套函数Function3了。

jackz007 发表于 2019-11-20 13:36:39

本帖最后由 jackz007 于 2019-11-20 14:04 编辑

hjp808 发表于 2019-11-20 12:55
按这个说法,假如Function2 又嵌套 Function3. 那a()() 就是调用嵌套函数Function3了。

      如果像你说的那样的话,所有函数必须这样定义:
def Function1():                        # Function1() 的定义开始
    def Function2():                      # Function2() 的定义开始
      def Function3():                  # Function3() 的定义开始
            print("I'm in Function3()")   # Function3() 的语句
      return Function3                  # Function2() 的返回语句,返回 Function3() 的调用地址
    return Function2                      # Function1() 的返回语句,返回 Function2() 的调用地址

a = Function1()
a()()                                     # 调用 Function3()
Function1()()()                           # 调用 Function3()
页: [1]
查看完整版本: 关于函数的一个小问问题