闲话Python编程-始于计算

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

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

python 复制代码
#!/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.

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

python 复制代码
>>> 1 + 1
2

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

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

1. 注释

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

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

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

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

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

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

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

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

2. 特殊的注释

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

python 复制代码
#!/usr/bin/env python
# -*- coding: utf-8 -*-

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

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

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

bash 复制代码
> chmod u+x ./calculator.py

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

bash 复制代码
> ./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。

python 复制代码
def add(a, b):
    c = a + b
    return c

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

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

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

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

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

4. 入口处

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

python 复制代码
if __name__ == '__main__':
    main()

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

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

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

相关推荐
北愚1 分钟前
Scrapy爬虫实战——某瓣250
python·scrapy
.别止步春天.3 分钟前
Python中lambda表达式的使用——完整通透版
数据结构·python·算法
RaidenQ10 分钟前
2024.9.20 Python模式识别新国大EE5907,PCA主成分分析,LDA线性判别分析,GMM聚类分类,SVM支持向量机
python·算法·机器学习·支持向量机·分类·聚类
_平凡之路_17 分钟前
解决ubuntu22.04 gnome-terminal 无法启动的问题
linux·运维·python
豆本-豆豆奶20 分钟前
23个Python在自然语言处理中的应用实例
开发语言·python·自然语言处理·编程语音
NiNg_1_23424 分钟前
机器学习之Python中Scikit-Learn(sklearn)入门
python·机器学习·scikit-learn
曳渔26 分钟前
Java-数据结构-二叉树-习题(三)  ̄へ ̄
java·开发语言·数据结构·算法·链表
你可以自己看42 分钟前
python中函数式编程与高阶函数,装饰器与生成器,异常处理与日志记录以及项目实战
服务器·开发语言·python
gopher95111 小时前
go语言 数组和切片
开发语言·golang
ymchuangke1 小时前
线性规划------ + 案例 + Python源码求解(见文中)
开发语言·python