Python3缩进对逻辑的影响
前话
我很佩服设计Python这门语言的人,因为这门语言的规则让我不得不写出美观的代码。
Python的缩进要求是强制的,因为缩进不对直接影响了代码逻辑。
因为python写法相对其他编程语言简化许多,没有花括号让我对代码分块摸不着头脑。
因此刚开始学的时候,多种文本编辑器自动补全def,while,if else 时会在结尾自动添加 pass ,这导致我误认为python的类,函数结束符号为pass
谷歌才发现pass作用是占位提示,不做其他任何事情 (:3」∠)
那么python是怎样代码分块呢?我就不废话了,没错就是缩进,这个缩进可以使Tab键缩进,或者4个空格键代替Tab缩进。
python缩进哲学
python设计者是这么认为的:
类似C、Java等语言用花括号{}来区分代码块,初学者或者语言编写较为豪放者会不注意代码编写风格,花括号内随便写,分布分行,缩进不缩进不影响代码逻辑,这会导致破坏代码的层次结构,让人难以阅读。因此许多老手会不断给新手们提示要注意缩进,让代码美观,避免给自己后人留坑。
何不把美观和逻辑结合在一起?
终于,这套强制性的python编写规则出来了,你要学python,你必须代码美观。
python缩进规则
栗子一
大家看下面这段代码:
def sayHello():
print('Hello World!')
sayHello()
乍看以为结果是输出Hello World ,执行以下,结果是什么都没输出。
其实就是缩进在作怪了,下面图片拆分代码块,相同颜色框在一起说明他们是属于同一代码块,导致这段代码只是定义了一个函数,但是并未执行它。
因此正确写法是:
def sayHello():
print('Hello World!')
sayHello()
可以看到 sayHello() 前进了一个缩进,这时再执行这段代码就可以看到万恶的 Hello World 了。
因为代码块变成了这样,因此上面一个代码块定义了一个函数,下面的代码块是执行函数。
栗子二
看这个有关类的代码:
class Student(object):
def __init__(self, name):
self.name=name
def say(self):
print('I\'am',self.name)
def getName(self):
return self.name
stu=Student('pwc')
stu.say()
print('Hello',stu.getName())
执行以下,发现报错了,错误提示是getName属性不存在!!!
其实再分析一下代码块,可以看出,噢,getName函数位置不对,它被写在say函数里面了。
因此正确写法是:
class Student(object):
def __init__(self, name):
self.name=name
def say(self):
print('I\'am',self.name)
def getName(self):
return self.name
stu=Student('pwc')
stu.say()
print('Hello',stu.getName())
然后可以看到正确输出了。
好了我就简单举了两个例子,只要记住缩进影响逻辑,相信其他代码大家也能得心应手的控制了。
Python3缩进对逻辑的影响的更多相关文章
- 简明Python3教程 6.基础
你肯定不满足于只打印"Hello World"吧? 你想要的更多 - 你希望得到一些输入,操纵它后再从中得到某些东西.我们可以使用python中的常量和变量实现这些功能. 字面常量 ...
- vim格式化代码实际上就是 "缩进代码", 命令是等号=
vim格式化代码实际上就是 "缩进代码", 命令是等号= 格式化就是 vim 根据 文件的类型, 自动的对代码进行 缩进 缩进的类型有多种, 都是用等号命令: = 全部格式化 : ...
- Ubuntu中安装python3.6(转)
因为TensorFlow只支持到python3.6,所以安装python3.6版本 Python3.6的使用越来越普遍.Ubuntu16.04的版本中默认胸自带python2和python3.5的版本 ...
- 怎样用 Bash 编程:逻辑操作符和 shell 扩展
学习逻辑操作符和 shell 扩展,本文是三篇 Bash 编程系列的第二篇. Bash 是一种强大的编程语言,完美契合命令行和 shell 脚本.本系列(三篇文章,基于我的 三集 Linux 自学课程 ...
- 打造一款属于自己的CentOS操作系统
文章目录 声明 关闭selinux以及firewalld 修改终端前缀显示 修改默认网卡名称为eth0 替换yum源 安装常用工具 优化history 配置回收站 迎宾显示 优化vim 清空yum缓存 ...
- python基础-面向对象进阶
一.什么是反射 反射的概念是由Smith在1982年首次提出的,主要是指程序可以访问.检测和修改它本身状态或行为的一种能力(自省).这一概念的提出很快引发了计算机科学领域关于应用反射性的研究.它首先被 ...
- Python之路【第六篇】python基础 之面向对象进阶
一 isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 和 issubclass(su ...
- 初窥Kaggle竞赛
初窥Kaggle竞赛 原文地址: https://www.dataquest.io/mission/74/getting-started-with-kaggle 1: Kaggle竞赛 我们接下来将要 ...
- 分享总结:更好地CodeReview
代码质量分享 2016_06_24_舒琴_代码质量.key For 代码提交人 基本原则 Review时机: 对于普通bugfix或优化,CodeReview最迟要 ...
随机推荐
- [Android Training视频系列] 8.2 Managing Audio Focus
视频讲解:http://www.eyeandroid.com/thread-15896-1-1.html 由于很多应用程序都可以播放音频,因此在播放前考虑它们如何交互就显得很重要了,为了避免同时出现多 ...
- java提供了native2ascii工具
可以使用这个工具,把中文编码称为ascii码 在命令行输入native2ascii 输入中文 得到数据
- <梦断代码>读后感2
<梦断代码>这本书读了一半,我的心情久久不能平静. 为什么好软件如此难做?这是我本人,我想也是很多人都在苦苦思索的一个问题,虽然没有人能有完全确定的答案,但通过书中的记述,和个人思考,还是 ...
- 【每日scrum】NO.6
Yesterday:组内各种乱八七糟的问题,还有自己的效率问题 Today:进行小范围的测试实验 Problem:在显示各景点构成的邻接矩阵的时候,第一次编译未出现任何错误的提示,但是在程序运行时,无 ...
- 小学生四则运算C/C++编程设计思想
题目: 1.题目避免重复: 2.可定制(数量(打印方式)): 3.可控制下列参数:是否有乘除法.是否有括号.数值范围.加减有无负数. 除法有无余数.是否支持分 ...
- OGNL表达式介绍
OGNL是Object-Graph Navigation Language的缩写,它是一种功能强大的表达式语言(Expression Language,简称为EL),通过它简单一致的表达式语法,可以存 ...
- 文本阴影text-shadow
文本阴影text-shadow text-shadow可以用来设置文本的阴影效果. 语法: text-shadow: X-Offset Y-Offset blur color; X-Offset:表示 ...
- window窗口-button(按钮)-dialog(对话框,带按钮)
描述:一个可拖动的窗口程序,默认情况下窗口自由移动.调整大小.打开关闭! 案例1(普通的窗口): <div class="easyui-window" icon-Cls=&q ...
- 【Python】vim7.4 配置python2.6支持Gundo
问题描述: vim7.4 配置python2.6支持Gundo 参考资料: (1) http://sjl.bitbucket.org/gundo.vim/ ...
- ASP.NET MVC学习之视图篇(1)
一.前言 不知道还有多少读者从第一篇开始一直学习到如今,笔者也会一直坚持将ASP.NET MVC的学习完美的结束掉,然后开始写如何配合其他框架使用ASP.NET MVC的随笔.当然笔者后面的随笔如果没 ...