python中模块和包

Python中的模块是包含定义和语句的文件,用于代码复用和组织。导入模块有多种方式,如`importmodule_name`和`frommodule_nameimport*`,但全量导入通常不推荐。模块搜索路径由`sys.path`定义,包含当前目录和标准库路径。`dir()`函数用于查看模块定义的属性和方法。包是模块的集合,通过__init__.py创建命名空间,允许更有序的代码结构。
摘要由CSDN通过智能技术生成

目录

1.模块:

2.导入

2.1导入全部

2.1.1.导入全部模块语法格式一:

2.1.2导入全部模块语法格式二:

2.2局部导入

2.2.1 

2.2.2

3.模块搜索路径

4. dir() 函数

例:

5.常见的模块

6.包

6.1包

6.2如何去导入包下的模块:

6.3使用 from package import * 时会发生什么?


1.模块:

退出 Python 解释器后,再次进入时,之前在 Python 解释器中定义的函数和变量就丢失了。
因此,编写较长程序时,建议用文本编辑器代替解释器,执行文件中的输入内容,这就是编写 脚本 。
随着程序越来越长,为了方便维护,最好把脚本拆分成多个文件。编写脚本还一个好处,不同程序调用同一个函数时,
不用每次把函数复制到各个程序。

为实现这些需求,Python 把各种定义存入一个文件,在脚本或解释器的交互式实例中使用。
这个文件就是 模块 ;模块中的定义可以 导入 到其他模块或 主 模块
(在顶层和计算器模式下,执行脚本中可访问的变量集)。

主模块:当你运行一个py文件时,这个py文件对应的模块就是一个主模块,

模块是包含 Python 定义和语句的文件。其文件名是模块名加后缀名 .py ,
例文件名为python.py则模块名为python, 后缀名为.py。
在模块内部,通过全局变量 __name__ 可以获取模块名(即字符串)。

2.导入

2.1导入全部

2.1.1.导入全部模块语法格式一:

import module_name(模块名)

2.1.2导入全部模块语法格式二:

from module_name import*  
    这种方式会导入所有不以下划线(_)开头的名称。大多数情况下,
不要用这个功能,这种方式向解释器导入了一批未知的名称,可能会覆盖已经定义的名称。
区别: 
当使用第一种方法调用模块内部函数时方法为  module_name.part_name()
当使用第二种方法调用模块内部函数时方法为  part_name()     

导入模块实质: 执行导入模块

2.2局部导入

导入模块中的部分,语法格式:

2.2.1 

from module_name import part_name(变量, 函数, 类)
此时我们还可以重命名函数
from module_name import part_name(变量, 函数, 类) as pa
调用时:
  pa()

2.2.2

全部导入之后进行调用(import module_name(模块名))
module_name.part_name()      # (函数) 

3.模块搜索路径

当一个名为 spam 的模块被导入时,解释器首先搜索具有该名称的内置模块。
这些模块的名字被列在 sys.builtin_module_names 中。如果没有找到,
它就在变量 sys.path 给出的目录列表中搜索一个名为 spam.py 的文件, sys.path 从这些位置初始化:
import sys
print(sys.builtin_module_names)
print(sys.path)
'''
builtin_module_names
('_abc', '_ast', '_bisect', '_blake2', '_codecs', '_codecs_cn', '_codecs_hk', '_codecs_iso2022', 
'_codecs_jp', '_codecs_kr', '_codecs_tw', '_collections', '_contextvars', '_csv', '_datetime',
'_functools', '_heapq', '_imp', '_io', '_json', '_locale', '_lsprof', '_md5', '_multibytecodec', 
'_opcode', '_operator', '_pickle', '_random', '_sha1', '_sha256', '_sha3', '_sha512', '_signal',
'_sre', '_stat', '_statistics', '_string', '_struct', '_symtable', '_thread', '_tracemalloc', 
'_warnings', '_weakref', '_winapi', '_xxsubinterpreters', 'array', 'atexit', 'audioop', 'binascii',
'builtins', 'cmath', 'errno', 'faulthandler', 'gc', 'itertools', 'marshal', 'math', 'mmap', 'msvcrt',
'nt', 'sys', 'time', 'winreg', 'xxsubtype', 'zlib')

sys.path
['D:\\python_code\\modle_learning',  # 运行.py文件的目录
'D:\\python_code', 
'D:\\AXXZX\\Python\\pycharm\\PyCharm .professional\\PyCharm 2022.3.3\\plugins\\python\\helpers\\pycharm_display',
'D:\\AXXZX\\Python\\python\\python310.zip',  
'D:\\AXXZX\\Python\\python\\DLLs',
'D:\\AXXZX\\Python\\python\\lib', 
'D:\\AXXZX\\Python\\python', 
'D:\\AXXZX\\Python\\python\\lib\\site-packages',
'D:\\AXXZX\\Python\\pycharm\\PyCharm .professional\\PyCharm 2022.3.3\\plugins\\python\\helpers\\pycharm_matplotlib_backend'
]                                       # pycharm路径 
'''

4. dir() 函数

内置函数 dir() 用于查找模块定义的名称。返回结果是经过排序的字符串列表:

例:

print(dir(str))
'''
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', 
'__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__',
'__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__',
'__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', 
'__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 
'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 
'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal',
'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle',
'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'removeprefix', 
'removesuffix', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip',
'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper',
'zfill']
'''

5.常见的模块

copy:    拷贝模块
sys:     和python解释器交互的
os:      和操作系统交互的
random:  随机数
math:    数学模块
re: regular expression :正则表达式
导入模块一般在文件的顶部   

6.包

6.1包

包是模块的集合,为它底下的模块提供命名空间

6.2如何去导入包下的模块:

import package.module_name
from package import module_name
from package.module_name import part_name(局部)(变量, 函数, 类)
包是模块的集合,因此包中还可以包含子包

6.3使用 from package import * 时会发生什么?

包和目录的区别:
    最大的区别是包中含有__init__.py文件
    若给一个目录加入__init__.py文件,则该目录就会成为包 
如果包的 __init__.py 代码定义了列表 __all__,运行 from package import * 时,
它就是用于导入的模块名列表。
from mypack import *
print(modle_A.dataA)
print(modle_B.dataB)
print("mypack")
'''
A
B
1
2
mypack
'''

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

爱玩网络的小石

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值