从0.1开始学Python——[25]

从0.1开始学Python——[25]

现在开始学模块相关的东西。

模块化

模块(module),相当于一种储存代码的容器。那么模块化的思想就是将完整的代码分解为一个一个小的模块保存起来,反过来就是通过模块组装,拼出完整的代码。
不采用模块化,就是统一把所有代码写到一个文件里面。采用的话就是把程序分写进很多文件里面。
之所以会用到模块化,一个是因为方便多人开发,避免写一个里面会产生混乱和错误以及接续性不好等状况;一个是方便维护,防止多人各自修改产生分歧和错误;再一个是模块可以复用灵活拼接,这样就避免了相同的地方重复书写,提高效率,更加简洁。
在Python当中,一个py文件就是一个模块。不过要注意,模块的名字要符合标识符规范

模块的创建

在一个文件里面写代码的时候,如果想引用其他模块,那把其他文件拖过来肯定是不行的,需要使用引用命令进行使用。语法: import 模块名(模块名指的是.py前面的内容)。比如文件名叫lianxi.py,那引用这个模块的时候就需要输入import lianxi(注意不写.py)。
现在创建一个叫module1.py的文件,里面输入print(‘haihaihai’)一句,然后打开lianxi.py文件,输入:

import module1

可以看到

haihaihai

不过注意,只能引用一次模块,引用多了也只执行一次,换言之引用一次就够了。
如果模块名太长了,可以设置别名。语法是 import 模块名 as 模块别名。要注意下面进行相关操作的时候,也要用别名

import module1 as m1
print(m1)
haihaihai
<module 'module1' from 'D:\\4classcode\\4classcode\\module1.py'>

另外,import命令可以在程序的任意位置调用,但是大多用在开头,所有引用模块都放在开头方便用户得知完整模块引用情况。
在每一个模块内部都有一个**(双下划线)name(双下划线)**属性,通过这个属性可以获取到模块的名字。
module1.py里面写上:

print(__name__)

运行lianxi.py:

import module1 as m1
module1

或者在lianxi.py里面直接:

import module1 as m1
print(m1.__name__)
module1

(双下划线)name(双下划线)属性值为**(双下划线)main(双下划线)的模块是主模块**,直接执行谁,谁就是主模块。直接运行lianxi.py:

import module1 as m1
print(__name__)
__main__

模块的使用

想发挥模块的作用,需要在模块里面引入一些直接命令之外的对象,比如变量和函数等。
在module1文件中写入:

a = 21
b = 17

然后在lianxi.py中写入:

import module1 as m1

print(m1.a)
print(m1.b)

运行lianxi.py,得到:

21
17

可以看到,访问的方法就是 模块名.变量名。对于函数,也是同理 模块名.函数
在module1文件中写入:

def han():
    print('m1的函数')

然后在lianxi.py中写入:

import module1 as m1

m1.han()

运行lianxi.py得到:

m1的函数

同样,定义也可以:
在module1文件中写入:

class Lei():
    def __init__(self,name):
        self._name = name

然后在lianxi.py中写入:

import module1 as m1

l = m1.Lei('lks')
print(l._name)

运行lianxi.py得到:

lks

上面是基于完整模块并使用的方法,当然,也可以只引用模块里面的一部分内容,语法是:from 模块名 import 变量,函数,类等

from module1 import han

han()
m1的函数

当然,没有写入的对象就不能用。不过当写成from 模块名 import 星号的时候,就会引入模块里面所有的对象,不过要注意不要发生模块里面的对象和主程序里面对象重名的情况。
模块可以起别名,同理,引入的对象也能用别名,from 模块名 import 变量 as 别名即可。

from module1 import Lei as L

l = L('lks')
print(l._name)
lks

如果用了import星号,又有变量不想在主程序里面使用,那在模块里面的变量名前面加一个下划线就行。

from module1 import *

print(_a)
Traceback (most recent call last):
  File "D:/4classcode/4classcode/lianxi.py", line 906, in <module>
    print(_a)
NameError: name '_a' is not defined

这样就把变量变成仅模块内访问的了。
另外,当一些内容,比如测试函数,想要只在这个文件当主程序的时候运行,当模块的时候不运行。就可以用之前学到的(双下划线)name(双下划线)写一个判断语句来实现上述功能。
本来写在module1文件中:

han()  # 测试函数

结果运行lianxi.py得到:

from module1 import *
m1的函数

但是在module1文件中写成:

if __name__ == '__main__':
    han()

同样在lianxi.py里面运行:

from module1 import *

结果得到:


也就是没有运行han()函数。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值