1. 概述

本章对函数的模块和引入进行入门级介绍。计算机编程的原理简要介绍

集成开发环境PyCharm

变量名、数字、字符串、列表

句式、注释

输入和输出

条件判断语句

循环语句

各类数据结构

函数

模块和引入

是不是看到基本都完成了很有成就感?哈哈哈哈。

2. 模块和引入

我们有了函数,就能开始写长一点的程序了,但是我们在现实中并不可能把所有程序代码集中在一个文件中,有时候我们可能会把函数分开在不同的文件中。我们可以把各个被分开的文件叫模块,如果想使用这些模块中的函数,我们需要引入。

project/

├── sub1.py

├── sub2.py

├── sub3.py

├── others/

│ ├── sub4.py

│ ├── sub5.py

└── main.py

from...import...

从某文件引入函数,比如说我要运行main.py时,需要用到sub1.py里的某个函数,我就可以这么写:

from sub1 import function1

from sub2 import function2, function22, function222

如果我们想要用到sub3里面所有的函数,我们可以这么些:

from sub3 import *

星号的意思是所有函数,这么一写我们就可以连接起两个文件,被引入的函数就能直接叫名字拿来用,和我们之前函数章节讲的没差别。

如果有个文件夹挡在中间,比如sub4和sub5,我们只需要在之间声明文件夹就行了,

from others.sub4 import *

from others.sub5 import *

如果我们要引入的文件里有重名的函数,我们可以用as来重命名,

from sub1 import function1

from sub2 import function1 as function21

接下来我们每次用function21的时候,Python就会自动指代为sub2里function1。

import

单个import是指引入某个文件,

import sub1

import sub2, sub3, others.sub4, others.sub5 as sub5

我们把整个文件都引入了,如果我们要使用里面的函数 ,就得先声明哪个文件的哪个函数。

a = sub1.function1()

b = sub2.function2(1, 2, 'Hello')

c = others.sub4.foo()

d = sub5.doo()

这里sub5被赋予了化名,我们在接下来就直接用sub5来指代others文件夹下的sub5,当然你也可以命名成其他的名字,比如cat、dog、helen、nancy之类的都行。

3. 运行模块

我们从现在开始,每写一个文件,都必须在.py文件末尾加这么一段代码:

if __name__ == '__main__':
pass
if __name__ == '__main__':

这个的意思是,如果我们这个文件是主文件的话,运行接下来的程序。估计被我这么一说更玄乎了。我们在学函数时,如果一个文件里面全是函数,都是def def的,我们即使运行它,它也没有任何反应,唯一能让它干活的方法就是在最后加没有def的代码。但是当我们好多文件堆在一起,每当我们import的时候,Python便会编译被引入的文件,并运行那些文件里非函数的代码。这样一来,我们本来只想使用一个文件中的几个函数,没想到把不是函数的代码全运行了,这样程序输出就会乱七八糟。如果我们加上这个if语句的话,编译时文件就会让Python判断该文件是否为主要程序,如果是,则运行代码,如果不是,那么这个文件只是个子文件。

#add_sub.py
def add(a, b, c):
return a + b + c
def sub(a, b, c):
return a - b - c
if __name__ == '__main__':
res1 = add(1, 2, 3)
res2 = sub(3, 2, 1)
print(res1, res2)

像这么一写,如果我们写好了这个.py文件,想要调试(debug)每个函数是否写对,可以在if语句下加上我们的代码来测试函数们。如果我们直接右击这个文件点击“Run”来运行的话,Python就知道这个文件是主文件,if下的代码被执行,输出我们要的结果。

#import_example.py
import add_sub
res1 = add_sub.add(10, 2, 3)
res2 = add_sub.sub(30, 2, 1)
print(res1, res2)

如果我们要右击运行这个文件,我们可以看到成功运行,也用到了刚才我们写的文件里的函数,我们可以尝试着把add_sub.py里的if语句去除,最后那三行的缩进全去了(都靠最左边),可以发现在运行import_example这个文件时,由于没有在add_sub里让Python去识别是否是主文件,add_sub里用来调试的代码也全部被运行了。

简而言之,if __name__ == '__main__':加在最后,就是为了告诉Python运行时识别文件的主次。

pass:

当我们没啥代码能写的时候,写个pass就行了。比如那个add_sub的文件,逻辑简单,眼睛看看就知道对错的, 没必要写调试的代码,那我们就直接写:

#add_sub.py
def add(a, b, c):
return a + b + c
def sub(a, b, c):
return a - b - c
if __name__ == '__main__':
pass

pass意思就和我们斗地主的过一样,没有东西能写的时候,写个pass,装个样子,让你充分体会何为形式主义。pass相当于一个空白行,但是空着的话Python编译会报错,因为它会认为这个句式语法不完整,有了pass,就能充数告诉Python这里是代码行,至少看着这快代码是完整的。

具体还能有以下操作:

def foo():
pass
list1 = [1, 2, 3, 4, 5, ]
for num in list1:
pass

即使在def和for下面也能用。但是pass并没有任何实质的功能,除了充数,我们为什么还要加它呢?原因在于,我们写代码的时候,很可能就是先把要做的提纲(比如要写的函数或者调试代码)列了,这时候我们先写上pass,做个标记,日后再慢慢把pass换成有用的代码,在我们边写边调试的时候,这些写着pass的还没有成形的函数或者代码可以先忽略不看,但同时也不被报错。

接下来我会介绍如何安装库,Python的最强大的地方在于各种各样强大的库,做网站做硬件处理数据库做数学等等,都能用其已有的库来轻松实现。最后祝我早日买到新电脑。