hybh

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)

需要注意的一点是,使用tf.app.run作为入口时,主函数至少需要一个参数,常见的写法就是放个_作为参数,写成main(_),防止报错。若未加上参数,就会报TypeError: main() takes 0 positional arguments but 1 was given

分类:

技术点:

相关文章:

  • 2021-08-22
  • 2022-03-14
  • 2021-12-25
  • 2022-12-23
  • 2022-12-23
  • 2021-11-05
猜你喜欢
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-07-13
  • 2021-11-18
  • 2022-12-23
相关资源
相似解决方案