tf.app.run()的作用

tf.app.run()的作用


了解tf.app.run()的作用前,
我们首先看一下app.py这个模块中run()函数的源码:

def run(main=None, argv=None):
  """Runs the program with an optional 'main' function and 'argv' list."""
  f = flags.FLAGS

  # Extract the args from the optional `argv` list.
  args = argv[1:] if argv else None

  # Parse the known flags from that list, or from the command
  # line otherwise.
  # pylint: disable=protected-access
  flags_passthrough = f._parse_flags(args=args)
  # pylint: enable=protected-access

  main = main or sys.modules['__main__'].main

  # Call the main function, passing through any arguments
  # to the final program.
  sys.exit(main(sys.argv[:1] + flags_passthrough))

其中:

f = flags.FLAGS

解释: tf定义了tf.app.flags,用于支持接收命令行传递参数,相当于接收argv。

args = argv[1:] if argv else None

解释: 将传入的参数从第二个开始切片copy到args形成一个列表(第一个为函数名),如果没有则传None。

flags_passthrough = f._parse_flags(args=args)

解释: 该方法确保传入的参数是有效的。

main = main or sys.modules['__main__'].main

解释: 在没有传入主函数参数时,就认为当前模块中已经有一个叫main()的主函数,将main赋给main;
或者在传入主函数参数时,将传入的当前模块自己定义的主函数传给等号左边的main。

sys.exit(main(sys.argv[:1] + flags_passthrough))

解释: 确保传入的参数被正常调用。

简单而言就是:

  • 如果你的代码中的入口函数不叫main(),而是一个其他名字的函数,如test(),则你应该这样写入口函数:
tf.app.run(test()[,argv])

程序会先调用test(),并开始执行test()中代码

  • 如果你的代码中的入口函数已经有一个叫main()的函数,则你就可以把入口写成
tf.app.run([,argv])

程序就会最先调用main(),并开始执行main()中代码

配合如下代码:

def main(argv=None):
    pass
if __name__ == '__main__':
    tf.app.run()

其中:

if __name__ == '__main__':

该if语句用来判断,该模块是正在被import还是被SHELL单独运行
被SHELL单独运行时,为True。

可实现:

  • 在该模块被import时,main为模块中的一个函数;
  • 在使用SHELL执行该模块时,先执行tf.app.run(),该函数检查传入的参数,并确定程序运行入口:
    • 在有main()函数时将main()函数作为入口开始执行;
    • 在没有main()函数时,从用户自定义的函数入口开始执行。
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值