Note_python(05)

本文介绍了Python中模块的概念,包括如何定义模块、模块的作用域及如何避免名称冲突等问题。此外,还详细阐述了Python搜索模块的路径机制,以及如何通过修改搜索路径来导入自定义模块。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

模块

1、初识模块

一个文件被看作一个独立模块,一个模块也可以被看作是一个文件。模块的文件名就是模块的名字加上扩展名.py。
模块内的函数的完整名字是通过句点标识符指定的,防止了名称冲突。例如:

tkinter.Tk()

2、搜索和路径

路径搜索和搜索路径是两个不同的概念,前者指查找某个文件的操作,后者是去查找一组目录。
通常我们导入模块,就回去路径中搜索,如果模块没在搜索路径中,就会导致路径搜索失败:

# 正常的模块导入
PS C:\Code> python
Python 3.6.4 (v3.6.4:d48eceb, Dec 19 2017, 06:54:40) [MSC v.1900 64 bit (AMD64)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> import tkinter
>>>

# 失败的模块导入
>>> import xxx
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ModuleNotFoundError: No module named 'xxx'
>>>

默认的搜索路径是在模块安装是指定的,但是也是可以被修改的。
在python解释器启动后,就可以访问搜索路径,通常被保存在sys模块的sys.path变量中。而且其输出为一个包含有各个独立路径的列表。


>>> import sys
>>> sys.path
['', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\python36.zip', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\DLLs', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36', 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site-packages']
>>>

我们可以对其进行修改,使用append()方法即可:

>>> sys.path.append('/home/wesc/py/lib')

此外使用sys.modules可以找到当前导入了哪些模块和他们的来处。与sys.path不同,sys.modules是一个字典,使用模块名作为键(key),对应物理地址作为值(value):

>>> sys.modules
{'builtins': <module 'builtins' (built-in)>, 'sys': <module 'sys' (built-in)>, '_frozen_importlib': <module '_frozen_importlib' (frozen)>, '_imp': <module '_imp' (built-in)>, '_warnings':
<module '_warnings' (built-in)>, '_thread': <module '_thread' (built-in)>, '_weakref': <module '_weakref' (built-in)>, '_frozen_importlib_external': <module '_frozen_importlib_external' (frozen)>, '_io': <module 'io' (built-in)>, 'marshal': <module 'marshal' (built-in)>, 'nt': <module 'nt' (built-in)>, 'winreg': <module 'winreg' (built-in)>, 'zipimport': <module 'zipimport' (built-in)>, 'encodings': <module 'encodings' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\encodings\\__init__.py'>, 'codecs': <module 'codecs' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\codecs.py'>, '_codecs': <module '_codecs' (built-in)>, 'encodings.aliases': <module 'encodings.aliases' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\encodings\\aliases.py'>, 'encodings.utf_8': <module 'encodings.utf_8' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\encodings\\utf_8.py'>, '_signal': <module '_signal' (built-in)>, '__main__': <module '__main__' (built-in)>, 'encodings.latin_1': <module 'encodings.latin_1' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\encodings\\latin_1.py'>, 'io': <module 'io' from
'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\io.py'>, 'abc': <module 'abc' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\abc.py'>, '_weakrefset': <module '_weakrefset' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\_weakrefset.py'>, 'site': <module 'site' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\site.py'>, 'os': <module 'os' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\os.py'>, 'errno': <module 'errno' (built-in)>, 'stat': <module 'stat' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\stat.py'>, '_stat': <module '_stat' (built-in)>, 'ntpath': <module 'ntpath' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\ntpath.py'>, 'genericpath': <module 'genericpath' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\genericpath.py'>, 'os.path': <module 'ntpath' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\ntpath.py'>, '_collections_abc': <module '_collections_abc' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\_collections_abc.py'>, '_sitebuiltins': <module '_sitebuiltins' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\_sitebuiltins.py'>, 'sysconfig': <module 'sysconfig' from 'C:\\Users\\yanta\\AppData\\Local\\Programs\\Python\\Python36\\lib\\sysconfig.py'>, 'atexit': <module 'atexit' (built-in)>}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值