模块module

在python的项目中,一个py文件就是一个模块。在模块中定义的函数,可以在其他文件中引用。

创建模块

项目中,创建一个python文件就是一个模块。
image.png

模块的命名规则

  1. 不能使用数字开头。
  2. 除了_ 之外不能使用其他特殊字符
  3. 建议使用英文命名。

定义模块

  1. """
  2. 自己定义的一些小工具
  3. """
  4. import random
  5. def get_phone():
  6. phone = random.randint(13000000000,13999999999)
  7. return phone

image.png
一个项目中可以创建很多模块,模块中定义很多函数,不同功能的函数放在不同模块中,使用的时候,可以导入自己定义的模块中的函数来使用。

import 导入模块

在项目中创建一个 新的模块, 命名为 login.py
在login.py 文件中要调用 tools.py 的函数。
模块,包 - 图3
这里可以通过使用 import 来导入 模块。

# 导入我们自己定义的模块 tools.py
import tools

# 引用tools中定义的函数
phone = tools.get_phone()
print(phone)

image.png
运行login.py,可以看到执行的结果。
image.png
通过import 这种方式可以导入自己自定义的模块和方法。
每次调用函数,使用import 这种方式需要前面跟上模块名。导入模块还有另外一种方式。

from … import …

定义tools.py

"""
自己定义的一些小工具
"""
import random
def get_phone():
    phone = random.randint(13000000000,13999999999)
    return phone


def get_password():
    passwd = random.randint(0,999999)
    return passwd

在login.py 文件中直接调用

# 导入我们自己定义的模块 tools 中定义的函数
from tools import get_phone,get_password

# 可以直接调用

phone = get_phone()
passwd = get_password()
print(phone,passwd)

使用 from 的方式 从模块中 导入 定义的函数。
使用的时候前面就可以不需要再添加 模块的名字即可。
image.png
比如random 模块中的函数时,也可以使用from方式来导入。

from random import randint

a = randint(0,100)
print(a)

包 package

在Python中 包跟目录是去别的。
包的创建
image.png
在项目的目录下创建 common 包 存放一些常用的工具。
image.png
在包的下面会有一个 init.py 文件。这个文件是自动生成的,不用管这文件,不要删除。
将tools.py 文件拖拽到 common 包下,因为原来的 tools.py 在其他文件中有引用。勾选 【搜索引用选项】
image.png
拖拽成功之后,可以看到
image.png

import… 导入包

如果在其他文件中需要引用定义的代码,也可以使用 import 的方式来导入,但是这里需要注意,导入的时候需要跟上包名。
项目根目录下创建包 useractions 存放用户操作相关的代码。
image.png

"""
自己定义的一些小工具
"""
import random
def get_phone():
    phone = random.randint(13000000000,13999999999)
    return phone


def get_password():
    passwd = random.randint(0,999999)
    return passwd

useractions 下创建文件 userlogin.py


"""
引用 tools 文件中的代码
"""
#导入包中的模块
import common.tools

# 调用里面的代码
phone = common.tools.get_phone()
passwd = common.tools.get_password()
print(phone,passwd)

在导入包的路径,需要大家注意,不管从什么地方导入,包的路径都是从项目的目录下开始算的。
image.png

import 导入包的路径比较长。下面引用的时候代码会稍多。不是很方便。

import … as…

可以给导入的包起别名。下面在引用的时候通过别名。

#导入包中的模块
import common.tools as tl   # tl 就代表 common.tools

# 调用里面的代码
phone = tl.get_phone()
passwd = tl.get_password()
print(phone,passwd)
  • 这里的tl 就是 common.tools 的别名, tl可以任意命名。
  • 下面使用时 保持一致即可。

form … import …

也可以使用from .. import .. 的方式来导入。

#导入包中的模块
from common.tools import get_password,get_phone
# 调用里面的代码
phone = get_phone()
passwd = get_password()
print(phone,passwd)

from 后面跟上路径,import 导入具体的函数。
下面就可以直接引用。

if **name** == “main

使用import 或者from … import这种语法导入的时候,如果导入的文件中有执行代码。
定义f.py

def f1():
    print("f 文件的中的 f1")


f1()

运行文件。可以看到打印结果。

f 文件的中的 f1

定义 demo.py
在demo.py 文件中导入 f

import f

f.f1()

运行demo.py 可以看到,代码执行了两次。
image.png
因为在 import f的时候, 会自动加载f.py 文件,f.py文件中有 调用函数,所以f.py 文件中的调用也会被执行。
所以打印两次。
文件中有调用函数的地方 可以加 上main语句。

在文件中 输入 main 会有提示。
image.png
按下回车,会自动生成。将要执行的语句放在 下面
image.png
在demo.py 文件中,也是一样。
再次运行,只有1个结果。
image.png


def f1():
    print("f 文件的中的 f1")


if __name__ == '__main__':
    f1()

import f


if __name__ == '__main__':
    f.f1()

所以我们在写代码的 如果要运行文件中定义函数,可以添加一个这样的语句,在这个语句下面调用函数。
需要注意

  1. 1个文件只需要加一个 main 语句。
  2. 如果没有要执行的语句,写个pass即可 ```python def f1(): print(“f 文件的中的 f1”)

if name == ‘main‘: pass ```