Python代码缩进和测试模块示例详解
前言
Python代码缩进和测试模块是大家学习python必不可少的一部分,本文主要介绍了关于Python代码缩进和测试模块的相关内容,分享出来供大家参考学习,下面话不多说了,来一起看看详细的介绍吧。
一、Python代码缩进
Python 函数没有明显的 begin 和 end ,没有标明函数的开始和结束的花括号。唯一的分隔符是一个冒号 ( : ),接着代码本身是缩进的。
例如:缩进 buil dCon necti onStr ing 函数
def buildConnectionString(params): """Build a connection string from a dictionary of parameters. Returns string.""" return ";".join(["%s=%s" % (k, v) for k, v in params.items()])
代码块是通过它们的缩进来定义的。我所说的“代码块”是指:函数、 if 语句、for 循环、 while 循环,等等。开始缩进表示块的开始,取消缩进表示块的结束。不存在明显的括号,大括号或关键字。这就意味着空白是重要的,并且要一致。在这个例子中,函数代码 (包括 doc string ) 缩进了 4 个空格。不一定非要是 4 个,只要一致就可以了。没有缩进的第一行则被视为在函数体之外。
例如: “if 语句” 展示了一个 if 语句缩进的例子。
def fib(n): (1) print 'n =', n (2) if n > 1: (3) return n * fib(n - 1) else: (4) print 'end of the line' return 1
(1) 这是一个名为 fib 的函数,有一个参数 n 。在函数内的所有代码都是缩进的。
(2) 在 Python 中向屏幕输出内容非常容易,只要使用 print 即可。 print 语句可以接受任何数据类型,包括字符串、整数和其它类型,如字典和列表 。甚至可以混在一起输出,只需用逗号隔开。所有值都输出到同一行,用空格隔开 (逗号并不打印出来)。所以当用 5 来调用 fib时,将输出“n = 5”。
(3) if 语句是一种的代码块。如果 if 表达式计算为 true,紧跟着的缩进块会被执行,否则进入 else 块执行。
(4) 当然 if 和 else 块可以包含许多行,只要它们都同样缩进。这个 else 块中有两行代码。对于多行代码块没有其它特殊的语法,只要缩进就行了。在经过一些最初的抗议和几个与 Fortran 的嘲讽的类比之后,您会心平气和地
对待代码缩进,并且开始看到它的好处。一个主要的好处就是所有的 Python程序看上去都差不多,因为缩进是一种语言的要求而不是一种风格。这样就使得阅读和理解他人的 Python 代码容易得多。
Note: Python vs. Java: 语句和语句分割
Python 使用硬回车来分割语句,冒号和缩进来分割代码块。C++ 和 Java 使用分号来分割语句,花括号来分割代码块。
二、Python测试模块
所有的 Python 模块都是对象,并且有几个有用的属性。您可以使用这些属性方便地测试您所编写的模块。下面是一个使用 if name 的技巧。
if name == "__main__":
在继续学习新东西之前,有几个重要的观察结果。首先, if 表达式无需使用圆括号括起来。其次, if 语句以冒号结束,紧跟其后的是缩进代码。
Note: Python vs. C: 比较和赋值
与 C 一样,Python 使用 == 做比较,使用 = 做赋值。与 C 不一样,Python 不支持行内赋值,所以不会出现想要进行比较却意外地出现赋值的情况。
那么为什么说这个特殊的 if 语句是一个技巧呢?模块是对象,并且所有的模块都有一个内置属性 name 。一个模块的 name 的值取决于您如何应用模块。如果 import 模块,那么 name 的值通常为模块的文件名,不带路径或者文件扩展名。但是您也可以像一个标准的程序一样直接运行模块,在这种情况下 name 的值将是一个特别的缺省值, main 。
>>> import odbchelper >>> odbchelper.__name__ 'odbchelper'
只要了解到这一点,您就可以在模块内部为您的模块设计一个测试套件,在其中加入这个 if 语句。当您直接运行模块, name 的值是 main ,所以测试套件执行。当您导入模块, name 的值就是别的东西了,所以测试套件被忽略。这样使得在将新的模块集成到一个大程序之前开发和调试容易多了。
Tip: Mac OS 上的 if name __
在 MacPython 上,需要一个额外的步聚来使得 if name 技巧有效。点击窗口右上角的黑色三角,弹出模块的属性菜单,确认 Run as main 被选中。
总结
以上就是这篇文章的全部内容了,希望本文的内容对大家的学习或者工作具有一定的参考学习价值,如果有疑问大家可以留言交流,谢谢大家对脚本之家的支持。
- Python编程语言发展简史
- 学完Python基础知识后,你真的会python吗?
- 一个人的武林:内网渗透测试思路(二)
- Python数据分析之股票实战
- 这货不是电源:硬件渗透测试平台 – Power Pwn
- Python进阶学习之阅读代码
- 代码安全审计:当file_exists遇上eval
- Python 异常处理完整指南
- 有趣的安全实验:利用多线程资源竞争技术上传shell
- NotSerializableException解决方法NotSerializableException
- 谁蹭了我的WiFi?浅谈家用无线路由器攻防
- 当输入流和输出流同时作用一个文件
- 揭秘:充电宝是如何盗取你的个人隐私的?
- 微软:暴力破解面前,增强密码复杂性基本没用
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- 宋宝华:当Linux内核遭遇鲨鱼—kernelshark
- 基于Pytorch的动态卷积复现
- SAP Spartacus的StorefrontConfig对象
- Linux内核虚拟内存管理之匿名映射缺页异常分析
- Elasticsearch:如何把 Elasticsearch 中的数据导出为 CSV 格式的文件
- Nginx 负载均衡配置(实战教程)
- 教懂你什么是 “ 流量劫持 ”
- SAP Spartacus中使用到的Angular ModuleWithProviders类型
- 架构设计 | 基于消息中间件,图解柔性事务一致性
- 结构与算法(02):队列和栈结构
- 用Gaussian寻找圆锥交叉点
- kubernetes用户安全管理模型简析
- Unity3D网络通讯(一)--Asp.Net Core WebApi创建发布注意事项
- Unity3D网络通讯(二)--UnityWebRequest及JsonUtility请求Http Restful
- CS学习笔记 | 20、通过Socks转发的方法