python基础

为什么要有模块

1个模块会有很多个函数,相当于一个大功能拆分成很多小功能

1、自定义模块

2、第三方模块 如requests

3、内置模块,如time

4、包(文件夹)

使用import与from… import …

# test.py
import time 
1、打开time文件
2、使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间;
3、test.py中会有一个time变量指向time模块的名称空间,如果导入方式为`import time as t`,则就是t变量指向time模块的名称空间
from time import sleep

1、打开time文件
2、使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间;
3、test.py中会有一个sleep变量指向time模块空间中的sleep,如果导入方式为`from time import sleep.localtime`,则由一个sleep变量和一个localtime变量指向time模块名称空间中的sleep和localtime

循环导入问题

why?:

1、m1文件需要导入m2文件的y

2、m2文件需要导入m1文件的x

3、m1文件的代码如下:

# m1.py
from m2 import y
x =10 
# m2.py
from m1 import x
y = 20 

代码自上而下运行,m1需要m2的y,会去m2的名称空间找y,但是找到y之前,需要运行m2的代码,m2代码第一句是去找m1的x,然后又回去运行m1的代码,m1的第一行代码又失去寻找m2的y

就是说:m1只能运行第一行,m2也只能运行第一行,所以产生了这样的问题

解决方法1

# m1.py
x =10 
from m2 import y

# m2.py
y = 20 
from m1 import x


  • 缺点:对所有的变量都需要这样做,并不适用

解决方法2

# m1.py

def f1():
    from m2 import y
x =10 


f1()
# m2.py

def f2():
    from m1 import x
y = 20 


f2()
  • 名字的执行顺序:内置(python解释器启动的时候)----->全局(文件执行的时候)------>局部(函数调用的时候)

模块的搜索路径

1.去内存中找

# test.py
import m1 # 从m1.py文件中导入的,然后会生成m1模块的名称空间
import time

# 删除m1.py

time.sleep(10)	#m1模块的名称空间仍然存在

import m1 # 不报错,一定不是从文件中获取了m1模块,而是从内存中获取的

2.去内置模块中找

# time.py
print('from time')
# test.py
import time # 无任何打印,所以它先去内置模块中找了

3.环境变量中找

import sys

print(sys.path)
# b/a/m1.py

# b/test.py
import m1 # 报错

sys.path.append('b/a')
import m1

python文件的两种用途

1、模块文件,被当作模块给导入,可以有多个

2、运行文件,被当做执行文件执行,只能有一个

搜索路径以执行文件为基准

# m1.py
def f1():
    print('from f1')
    
f1()

# test.py
import m1

m1.f1() # 运行两次,例如:使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间;

解决方法:name

# m1.py
def f1():
    print('from f1')
if __name__ == '__main__': 
    #__name__ 在m1.py被当作模块导入时是模块名,作为执行文件时是'__main__'
f1()

# test.py
import m1

m1.f1() # 运行两次,例如:使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间;

== ‘main’:
#name 在m1.py被当作模块导入时是模块名,作为执行文件时是’main
f1()

test.py

import m1

m1.f1() # 运行两次,例如:使用python解释器运行time文件,然后把解释文件得到的名字放入time模块的名称空间;


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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值