tensorflow的代码中,常常会有tf.app.run()作为入口的写法,如下:
...
# 此处省略n行代码
...
def main(_):
...
if __name__ == "__main__":
tf.app.run()
好的,那我们就进入tf.app.run()这个函数里康康到底是什么样子的。
@tf_export(v1=[‘app.run‘])
def run(main=None, argv=None):
"""Runs the program with an optional ‘main‘ function and ‘argv‘ list."""
main = main or _sys.modules[‘__main__‘].main
_run(main=main, argv=argv, flags_parser=_parse_flags_tolerate_undef)
从这里看,应该是输入一个函数对象作为参数,用于程序的运行,如果没输入函数就使用默认的_sys.modules[‘main‘].main,再回到执行该函数的模块,该模块从其它模块导入的run函数中,_sys.modules[‘main‘]的结果是什么
# file1
import sys as _sys
def run():
print(_sys.modules[‘__main__‘])
print(_sys.modules[‘__main__‘].main)
# file2
from file1 import run
def main(_):
pass
if __name__ == ‘__main__‘:
run()
run函数中pirnt的结果为:
<module ‘main‘ from ‘D:/data/Projects/demo/file2.py‘>
<function main at 0x00000142C79B2F28>
可见,tf.app.run函数中的默认函数即为file2中main函数对象,当主函数不为main时为test时,需将test函数作为参数传入tf.app.run()中,如下
...
# 此处省略n行代码
...
def test(_):
# 主函数
...
if __name__ == "__main__":
tf.app.run(test)