模块,模块查找路径,绝对路径,相对路径

本文深入解析Python模块的概念,包括模块的来源、表现形式、使用原因及方法。探讨了import语句的工作原理,模块的查找顺序,以及如何避免循环导入的问题。同时,介绍了__name__属性的用途,模块的绝对与相对导入的区别,最后给出了软件开发目录的规范建议。

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

1 模块

模块就是一些列功能的结合体

模块的3种来源

  1内置的(python解释器自带的)

  2第三方的(别人写的)

  3自定义的(自己写的)

模块的4中表现形式

  1使用python写的py文件(一个py文件可以称之为一个模块)

  2已被编译为共享库或DLL的c或c++扩展

  3把一系列模块组织到一起的文件夹(文件夹下有一个__init__.py方法,该文件称之为包)

  4使用c编写并连接到python解释器的内置模块

 

为什么要用模块

  1用别人写好的模块(内置的,第三方的),极大的提高开发效率

  2使用自己编写的模块(自定义的)当项目比较大的时候,不肯能将所有的功能写在一个文件下

 

如何使用模块

我们要注意在使用模块时候,必须要确定谁是执行文件,谁是被导入文件

2 import

右键运行run.py文件首先会创建一个run.py的名称空间

    首次导入模块(md1.py)(******)

        1.执行md.py文件

        2.运行md.py文件中的代码将产生的名字与值存放到md.py名称空间中

        3.在执行文件中产生一个指向名称空间的名字(md)    

多次导入不会再执行模块文件,会沿用第一次导入的成果(******) 

 

在run中导入模块md

# run.py

import md

 

md.py文件(模块)

#md.py

print('from the md1.py')
money = 1000
def read1():
  print('md',money)
def read2():
  print('md模块')
  read1()
def change():
  global money
  money = 0

 

 

 

1.只要你能拿到函数名 无论在哪都可以通过函数加括号来调用这个函数(会回到函数定义阶段 依次执行代码)

2.函数在定义阶段 名字查找就已经固定死了 不会因为调用位置的变化而改变

 

使用import导入模块 访问模块名称空间中的名字统一句势:模块名.名字
    1.指名道姓的访问模块中的名字 永远不会与执行文件中的名字冲突
    2.你如果想访问模块中名字 必须用模块名.名字的方式

只要当几个模块有相同部分或者属于用一个模块,可以  import 名字1,名字2,名字3,

当几个模块没有联系的情况下 应该分多次导入

通常导入模块的句式会写在文件的开头

当模块名字比较复杂的情况下 可以给该模块名取别名 import asdasd as ret  此时模块名就改成了ret

3from....import....

 

右键运行run.py文件首先会创建一个run.py的名称空间

 

    首次导入模块(md1.py)(******)

 

        1.执行md.py文件

 

        2.运行md.py文件中的代码将产生的名字与值存放到md.py名称空间中

 

        3.在执行文件中产生一个指向名称空间的名字(md)    

 

多次导入不会再执行模块文件,会沿用第一次导入的成果(******)

 

缺点

  在访问模块中的名字不需要加模块名前缀

  在访问模块中的名字可能会与当前执行文件的名字冲突

4循环导入模块

import m  #第一次调用m

m.func()
print(m.a)

 

print("m")# 执行打印功能

def func():
    print("func")

a = 1000

  

import m    #第二次调用m

m.func()
print(m.a)

print("n")

  

在此期间实现了m调n,然后n右调m

如果出现了循环导入,那么一定是程序的设计不和理

 

解决循环导入的方法:

1  将循环导入的句式写在文件的最下方

2  含数内导入

5 __name__的方法的使用

当文件是被当做执行文件的时候,打印的是__main__

当文件是被当做模块导入的时候,打印的是模块名

def index1():
    print('index1')

def index2():
    print('index2')


if __name__ == '__main__':
    index1()
    index2()

 

6模块的查找顺序

先内存

然后内置

最后,sys.path中找

  谁是执行文件,谁是被导入文件,sys.path,里面是一个大列表,装的是路径

 

注意py文件名不能与第三方,内置的冲突

 

7模块的绝对导入,相对导入

绝对导入

  必须依据在执行文件所在的文件夹路径为准

  绝对导入,无论在执行文件,或被导入文集都适用

 

相对导入

.表示当前路径

..表示上一层路径

...表示上上一层路径

注意,相对导入不能再执行文件中适用

相对导入只能在被导入模块中适用,使用相对导入,就不需要考虑执行文件到底是谁,

只需要自到模块与模块之间的路径关系

8 软件开发目录规范

格式;

bin文件夹  

  start.py文件  启动文件

conf文件夹

  settings.py文件 数据文件,存一些常用的,不经常改变的变量 

core文件夹

  src.py文件  核心功能逻辑文件

db文件夹

  数据内型  用户数据

lib文件夹

  common.py文件  功共的方法

log文件夹

  应用日志  记录软件使用日志

Readme  软件使用说明

 

  

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/cherish937426/p/11197268.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值