如何同时访问嵌套函数里的多个函数
代码如下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:49 编辑
返回的是一个元组,你得这样:
funOut()()
funOut()()
这样可以分别访问,但是要同时访问就得在函数里
动动手脚,还可以用多线程。 这涉及到多线程,比较麻烦 本帖最后由 _2_ 于 2020-4-19 21:31 编辑
就拿你说的这个来
funOut() 返回的是一个由 funIn1 和 funIn2 组成的元组
>>> funOut()
(<function funOut.<locals>.funIn1 at 0x0000000002E71550>, <function funOut.<locals>.funIn2 at 0x0000000002E715E0>)
>>> # 返回的是函数的地址
>>> # 因为只是调用了 print() , 并没有返回任何内容
(... , ...)() 这样调用是错误的,所以 Python 会报错
@永恒的蓝色梦想感谢指出,已经纠正 _2_ 发表于 2020-4-19 20:51
就拿你说的这个来
funOut() 返回的是一个由 funIn1() 和 funIn2() 的返回值组成的元组
funOut 绝对不会返回 (None,None) 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
但内部函数多了就不能这样干了,
会增加很多参数,
还是要你自己想想怎么在内部实现 python不支持异步,所以这个想法可以忽略了 wp231957 发表于 2020-4-19 21:29
python不支持异步,所以这个想法可以忽略了
那 aynic 是干啥的...... 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]