闲话Python编程-始于计算

        计算机是发源于数学的,起初计算机就是为了数学计算,众所周知冯·诺依曼发明了第一代电子计算机,所以我们学习Python编程最简单莫过于把我们小学数学计算实现一下。

        最简单的计算就是加减乘除了,我们就从细微处入手。我们在PyCharm上创建一个文件calculator.py,在文件里编辑代码:

#!/usr/bin/env python
# -*- coding: utf-8 -*-
# ------------------------------------------------------------------------
#  一个简单的计算器
# ------------------------------------------------------------------------


# 加法
def add(a, b):
    c = a + b
    return c


# 入口函数
def main():
    # 最简单的加法
    n = add(1, 1)
    print(n)


if __name__ == '__main__':
    main()

        上面编写了这么多行,其实就是实现: 1 + 1 = 2.

        折腾了这么久的效果,还不如我们一念之间就心算出来了,为什么我们还要这么麻烦去写代码,因为计算机可以解决复杂计算,心算和珠算在一定复杂度之后就不如计算机了,当然当代计算机用途之广是众所知周的,我讲这么多,就是让初学者不要小看这种样板代码,我不建议直接随意地这么来:

>>> 1 + 1
2

        这么学习来得及其简单,但是可能后果就是学习了一通,好像都会了,但是叫你实现一个实际的功能,还是不会。

        回到我上面的代码来学习吧,我们看看有多少知识点。

1. 注释

        #是注释符号,也就是当一行上出现#, 那么#以及它之后的任何内容,都不会当作代码来看待,Python解释器不会去执行它们,即所谓注释。

        既然不会被执行,注释为什么还创造出来呢,见名知义,注释,注解解释,注解什么?注解接下来的代码行或代码块是干什么的,什么作用的。

        注释解决了程序的可读性。

        在文件头部写注释,作者告诉你整个文件实现了什么功能。

        在函数头部写注释,作者告诉你这个函数实现了什么功能。

        在类头部写注释,作者告诉你这个类实现了什么功能。

        在类方法头部写注释,作者告诉你这个类方法实现了什么功能。

        在代码块前头写注释,作者告诉你这个代码块显示了什么功能。
 

2. 特殊的注释

        在文件头部前两行,我们基本上这么写:

#!/usr/bin/env python
# -*- coding: utf-8 -*-

        第1行是指定解释器,在windows系统上你感觉不到它的作用,也不会起到任何效果,这是Unix/Linux系统上的东西,对初学者确实有点难度,但是还是要讲,因为多年之后你可能就会体会到这些程序在Linux上运行会更爽。

        如果不能理解,就先记忆吧,郭靖当初学习降龙十八掌就是这么干的。

        在Linux系统上,我们把文件calculator.py赋予可执行权限:

> chmod u+x ./calculator.py

        那么在Linux系统命令行上我们可以直接执行:

> ./calculator.py

        Linux会怎么样去处理,Linux命令行其实是一个Shell解释器在运行,它会先读取calculator.py的第一行:

        #!/usr/bin/env python

        它会以python为参数去执行/usr/bin/env,找到python解释器程序在哪里,然后用这个python解释器程序去执行下面的所有代码。

        这又牵扯到Python是一门解释性的编程语言,暂且不提。

        那么第二行注释呢:

        # -*- coding: utf-8 -*-

        它告诉编辑器,这个源代码文件是UTF-8编码存储的,讲UTF-8知识,又涉及ASCII、Unicode,对初学者又是一个学习点,乱码问题有时可是让开发人员头痛得很。

        所以编程不仅仅是按照语言语法写几行代码了事,软硬件两方面知识是很广泛的,你了解的越多越深入,可能你做出的系统设计和写出来的代码会更优秀。

3. 函数

        即使对一个不会编程的人来说,函数这个名字是不是很熟悉?因为我们在初中的数学课上就接触到了:

        y = f(x)

        函数的近代定义是给定一个数集A,假设其中的元素为x,对A中的元素x施加对应法则f,记作f(x),得到另一数集B,假设B中的元素为y,则y与x之间的等量关系可以用y = f(x)表示。函数概念含有三个要素:定义域A、值域B和对应法则f。其中核心是对应法则f,它是函数关系的本质特征。

        函数的英文就是function, 所以简写为f; 定义的英文就是define, 所以我们看到了关键字def。

def add(a, b):
    c = a + b
    return c

        def是函数定义的关键字,空格之后是函数名,括号里面是一个或多个参数,用逗号分隔,最后是Python特有的语法-冒号结尾。

        接下来一行或多行是代码块,最后是返回,如果没有返回结果的,可以没有。

        函数体内是一定要缩进统一的,有用tab缩进的,有用空格缩进的,两种都可以,但是不能混用,Python在这个方面很有个性的,强迫开发者去做好缩进,提高代码可读性。

        一般的经验,建议缩进不要用tab,而是用4个空格,因为tab在不同编辑器里的显示宽度是不一致的,可能在某个编辑器里很宽很难看,但空格一般是固定宽度的。

        如果函数体代码很少,少到只有一行,一般就没有必要封装成一个函数了。

4. 入口处

        文件最下面为什么要这么写:

if __name__ == '__main__':
    main()

        为什么要写以if开头的这一行呢,这关系到多文件问题,当我们正儿八经地写一个项目的代码时,是不能把所有代码写在一个文件里的,那样一个文件里的代码可能有几千行、几万行甚至更多,阅读起来特别困难,这关系到系统的可读性、可维护性。

        在多文件的系统里,我们去运行系统,一般是从一个入口文件去执行的,这个入口文件去调用其它文件来执行流程,那么当这个入口文件被执行时,__name__这个变量的值就是__main__,从而main()得到执行,而之后那些被入口文件调用的文件被调用时,__name__值则不会是__main__值。

        如果是初学者,这里讲的知识有点复杂,先可以不去理解,模仿就是了,将来有多文件的时候就自然明白了。这里还涉及到if语句的知识,接下来就会学习。

        

你可能感兴趣的:(Python,python,开发语言)