网站首页 > 基础教程 正文
命令式编程(imperative style programs)
使用编程语句改变程序状态,明确输入变量,并根据程序逻辑逐步运算。
- 易于理解:在Python里使用命令式编程时,大部分代码编写起来都很直观。
- 容易调试:可以很方便地进行单步跟踪,获取并分析所有中间变量,或者使用Python的调试工具。
虽然使用命令式编程很方便,但它的运行可能很慢,会存在重复调用函数和长时间保存变量值等问题,耗费内存。
示例:
运行结果:10
符号式编程(symbolic style programs)
通常在计算流程完全定义好后才被执行。
- 更高效:在编译的时候系统容易做更多优化。
- 更容易移植:符号式编程可以将程序变成一个与Python无关的格式,从而可以使程序在非Python环境下运行,以避开Python解释器的性能问题。
一般来说,符号式编程的程序需要下面3个步骤:
- 定义计算流程;
- 把计算流程编译成可执行的程序;
- 给定输入,调用编译好的程序执行。
由于在编译时系统能够完整地获取整个程序,因此有更多空间优化计算,不仅减少了函数调用,还节省了内存。 深度学习框架TensorFlow和Theano采用了符号式编程的方法。
示例:
运行结果:
计算图/符号图(computation graph/symbolic graph)
符号式编程将计算过程抽象为一张计算图(符号图)来描述整个计算过程。
- 易于描述计算过程,所有输入节点、运算节点、输出节点均符号化处理。
- 通过建立输入节点到输出节点的传递闭包,从输入节点出发,沿着传递闭包完成数值计算和数据流动,直到达到输出节点。
- 经过计算图优化,以数据(计算)流方式完成,节省内存空间使用,计算速度快,但不适合程序调试,通常不用于编程语言中。
大多数符号式程序都会显式地或是隐式地包含编译步骤,将计算图转换为能被调用的函数,在代码的最后一行才真正地进行运算。 也就是说,符号式程序清晰地将定义运算图的步骤与编译运算的步骤分割开来。
混合式编程
简而言之,命令式编程容易理解和调试,命令语句基本没有优化,按原有逻辑执行。 符号式编程涉及较多的嵌入和优化,不容易理解和调试,但运行速度有同比提升。
有没有可能既得到命令式编程的好处,又享受符号式编程的优势? 开发者们认为,用户应该用纯命令式编程进行开发和调试; 当需要产品级别的计算性能和部署时,用户可以将大部分命令式程序转换成符号式程序来运行。 深度学习框架caffe和mxnet采用了两种编程模式混合的方法。
猜你喜欢
- 2024-11-01 【Python】十个必备 Python与操作系统交互命令实践
- 2024-11-01 python操作文件和目录 python文件目录操作方法
- 2024-11-01 Python执行系统命令的四种方法 python执行操作系统命令
- 2024-11-01 python的print命令 python print指令
- 2024-11-01 总结归纳的 Django 基本命令 django使用教程
- 2024-11-01 跟我一起学Python——window操作系统常用Dos命令
- 2024-11-01 Python 命令行之旅:使用 docopt 实现 git 命令
- 2024-11-01 python常用命令及操作语句 python基本用法
- 2024-11-01 Google 开源的 Python 命令行库:深入 fire(二)
- 2024-11-01 Python Prompt Toolkit:构建交互式命令行
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)