python——模块+包+常用内置模块的简单介绍

1、模块

(1)简介:

模块Moduel,一个.py文件就是一个模块,模块的组成如下
在这里插入图片描述

(2)使用模块的好处:

  1. 方便其他程序、脚本的导入并使用
  2. 避免函数名和变量名冲突(一个模块内变量名不能重复)
  3. 提高代码可维护性、可重用性
  4. 分为多模块开发,有利于团队协作

(3)使用自带的模块:

  • import 模块 as 别名
  • from 模块 import 函数/变量/类

以math模块为例(这个没有起别名):

import math

print(id(math))  # 1657999653280
print(type(math))  # <class 'module'> 表明math的类型是一个模块
print(math)  # <module 'math' (built-in)> 表明math是内置的模块
print(math.pi)  # 3.141592653589793 π的值
print('----------------')
print(dir(math))   # 查看math模块的属性和方法
'''
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 
'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 
'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 
'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp',
 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 
 'isnan', 'isqrt', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 
 'modf', 'nan', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 
 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc']
'''

下面这两种方法都能达到相同的目的:

from math import pi

print(pi)   # 3.141592653589793
import math

print(math.pi)  # π的值3.141592653589793

(4)自定义模块(新建一个文件):

在这里插入图片描述
新建一个Python文件命名为calculate,这个模块有实现相加,相乘的函数,如下:

def Add(a, b):
    return a + b


def Dev(a, b):
    return a / b

然后在当前文件hw3_cnn中对刚写好的模块进行调用,如下:

import calculate as cal

a = 10
b = 20
print(cal.Add(a, b))
print(cal.Dev(a, b))
'''
30
0.5
'''

如果不能运行,按照进行操作,make directory as source root

(5)以主程序的形式运行程序

  • 在每个模块的定义中都包括一个记录模块名称的变量_name_,程序可以检查该变量,以确定他们在哪个模块中执行。如果一个模块不是被导入到其它程序中执行,那么它可能在解释器的顶级模块中执行。顶级模块的__name_变量的值为_main
    (以下面的为例)

当calculate模块中多加一句话:print(Add(10, 20))

def Add(a, b):
    return a + b


def Dev(a, b):
    return a / b


print(Add(10, 20))

在新建的文件demo1运行下面的语句会输出calculate模块中的print值,那么该怎么解决这个问题?

import calculate

print(calculate.Add(100, 200))
'''
30
300
'''

在calculate模块,改写一句if __name__ == '__main__':,就可以了,这样再运行demo1时calculate模块中的print就不会输出了,

def Add(a, b):
    return a + b


def Dev(a, b):
    return a / b


if __name__ == '__main__':   # 只有运行calculate文件时才会被输出
    print(Add(10, 20))

记录模块名称的变量_name_,用于确定是否在当前文件下运行,或者在每个调用该模块的文件下都运行。

2、包

Python程序是有多个包构成的,每个由包含不同的模块,每个模块中有不同的函数、类等(包>模块>函数)

(1)简介

  • 包是一个分层次的目录结构,它将一组功能相近的模块组织在一个目录下
  • 好处:代码规范,避免模块名冲突

(2)新建一个包、目录:

在当前文件夹内右键方法如下,新建一个目录同理选择目录即可。
在这里插入图片描述
包与目录的区别:
在这里插入图片描述
使用方法:
在package1中新建两个模块Moduel_A、Moduel_B。在Moduel_A中写入a = 11,在Moduel_B中写入b = 22,那么在demo1中可以调用package1模块中的变量并进行输出。

# import 包名.模块名
import package1.Moduel_A as A
import package1.Moduel_B as B

print(A.a + B.b)
'''
33
'''

3、常用的内置模块

在这里插入图片描述
(1)sys:与Python解释器及其环境操作相关的标准库
使用Ctrl+B可以找到该模块的文件,里面的注释写的很详细。

import sys

print(sys.getsizeof(22))  # 28 获取22的字节数
print(sys.getsizeof(48))  # 28
print(sys.getsizeof(True))  # 28
print(sys.getsizeof(False))  # 24

(2)time:提供与时间相关的各种函数的标准库

import time

# 返回当前时间的秒数
print(time.time())  
# 输出参数对应的时间
print(time.localtime(time.time()))
# print(time.localtime()) 不加参数会输出当前时间

'''
1612612359.5800502
time.struct_time(tm_year=2021, tm_mon=2, tm_mday=6, tm_hour=19, tm_min=52, tm_sec=39, tm_wday=5, tm_yday=37, tm_isdst=0)
'''

和schedule模块结合可以实现定点print

import schedule
import time


def job():
    print('Hi....')


schedule.every(3).seconds.do(job)   # 每隔3s执行job函数
while True:
    schedule.run_pending()   # 启动
    time.sleep(1)   # 休眠 1s

(3)urllib:用于读取来自网上(服务器)的数据标准库
通常用于爬虫。urllib是一个包选中后使用Ctrl+B会跳转到__init__.py文件,包中会含有一些模块

import urllib.request

# 对网址中返回的信息读取
print(urllib.request.urlopen('https://www.baidu.com').read())

'''
b'<html>\r\n<head>\r\n\t<script>\r\n\t\tlocation.replace(location.href.replace("https://","http://"));\r\n\t</script>\r\n</head>\r\n<body>\r\n\t<noscript><meta http-equiv="refresh" content="0;url=http://www.baidu.com/"></noscript>\r\n</body>\r\n</html>'
'''

其他的还没有接触过,就先了解这些内置模块的功能吧

猜你喜欢

转载自blog.csdn.net/qq_46126258/article/details/113726781