11tadpole 发表于 2020-4-19 20:43:59

如何同时访问嵌套函数里的多个函数

代码如下

def funOut():
    def funIn1():
      print('宾果!你成功访问到我啦!1')
    def funIn2():
      print('宾果!你成功访问到我啦!2')
    return (funIn1, funIn2)

我想通过
funOut()()
同时访问funIn1()和funIn2()
报如下错误
TypeError: 'tuple' object is not callable

为什么

qiuyouzhi 发表于 2020-4-19 20:45:19

本帖最后由 qiuyouzhi 于 2020-4-19 20:49 编辑

返回的是一个元组,你得这样:
funOut()()
funOut()()
这样可以分别访问,但是要同时访问就得在函数里
动动手脚,还可以用多线程。

zltzlt 发表于 2020-4-19 20:45:21

这涉及到多线程,比较麻烦

_2_ 发表于 2020-4-19 20:51:58

本帖最后由 _2_ 于 2020-4-19 21:31 编辑

就拿你说的这个来
funOut() 返回的是一个由 funIn1 和 funIn2 组成的元组
>>> funOut()
(<function funOut.<locals>.funIn1 at 0x0000000002E71550>, <function funOut.<locals>.funIn2 at 0x0000000002E715E0>)
>>> # 返回的是函数的地址
>>> # 因为只是调用了 print() , 并没有返回任何内容

(... , ...)() 这样调用是错误的,所以 Python 会报错

@永恒的蓝色梦想感谢指出,已经纠正

永恒的蓝色梦想 发表于 2020-4-19 21:18:53

_2_ 发表于 2020-4-19 20:51
就拿你说的这个来
funOut() 返回的是一个由 funIn1() 和 funIn2() 的返回值组成的元组



funOut 绝对不会返回 (None,None)

_2_ 发表于 2020-4-19 21:27:18

def funOut(funIn1: bool, funIn2: bool):
    def funIn1():
        print(1)
    def funcIn2():
        print(2)
    if funIn1:
        return funIn1()
    if funIn2:
        return funIn2()

你可以试试用参数完成这个操作,
方便以后外部调用:

>>> funOut(funIn1=True, funIn2=False)
1
>>> funOut(funIn1=False, funIn2=True)
2

但内部函数多了就不能这样干了,
会增加很多参数,
还是要你自己想想怎么在内部实现

wp231957 发表于 2020-4-19 21:29:55

python不支持异步,所以这个想法可以忽略了

_2_ 发表于 2020-4-19 21:33:39

wp231957 发表于 2020-4-19 21:29
python不支持异步,所以这个想法可以忽略了

那 aynic 是干啥的......

jkluoling1992 发表于 2020-4-19 21:52:22

import threading
lock = threading.Lock()

def funOut():
    def funIn1():
      #lock.acquire()
      print('宾果!你成功访问到我啦!1')
      #lock.release()
    def funIn2():
      #lock.acquire()
      print('宾果!你成功访问到我啦!2')
      #lock.release()
    return (funIn1, funIn2)


def main():
    t_1 = threading.Thread(target=funOut()(), args=())
    t_2= threading.Thread(target=funOut()(), args=())
    t_1.start()
    #t_1.join(5)
    t_2.start()
    #t_2.join(5)


if __name__ == '__main__':
    main()
页: [1]
查看完整版本: 如何同时访问嵌套函数里的多个函数