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 ,执行以下,结果是什么都没输出。

其实就是缩进在作怪了,下面图片拆分代码块,相同颜色框在一起说明他们是属于同一代码块,导致这段代码只是定义了一个函数,但是并未执行它。
01

因此正确写法是:

def sayHello():
    print('Hello World!')

sayHello()

可以看到 sayHello() 前进了一个缩进,这时再执行这段代码就可以看到万恶的 Hello World 了。
因为代码块变成了这样,因此上面一个代码块定义了一个函数,下面的代码块是执行函数。
02


栗子二

看这个有关类的代码:

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属性不存在!!!
03

其实再分析一下代码块,可以看出,噢,getName函数位置不对,它被写在say函数里面了。
04

因此正确写法是:

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())

然后可以看到正确输出了。
05


好了我就简单举了两个例子,只要记住缩进影响逻辑,相信其他代码大家也能得心应手的控制了。

posted @ 2016-03-15 19:56  Pwcong  阅读(1817)  评论(0编辑  收藏  举报