标签:函数 和我 第一行代码 list localtime __name__ 并且 报错 if判断
面条版代码--》函数版代码--》文件版代码(模块)--》文件夹版(包)
代码会变得更加简洁,清晰,模块化
一个模块里会有多个函数,相当于一个大功能细分成多个小功能
# 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
# m1.py
from m2 import y
x = 10
# m2.py
from m1 import x
y = 20
为什么会有循环导入问题:
# m1.py
x = 10
from m2 import y
# m2.py
y = 20
from m1 import x
# 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文件,m1模块的名称空间仍然存在
time.sleep(10)
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
# m1.py
def f1():
print('from f1')
f1()
# test.py
import m1
m1.f1() # 运行两次
# m1.py
def f1():
print('from f1')
if __name__ == '__main__': # __name__在m1.py被当做模块导入时是模块名,作为执行文件时是'__main__'
f1()
# test.py
import m1
m1.f1() # 运行两次
其中if __name__ == ‘__main__‘
:这句估计很多和我一样的初学者都是不求甚解。
这里作一下解释:
1:__name__
是一个变量。前后加了爽下划线是因为是因为这是系统定义的名字。普通变量不要使用此方式命名变量。
2:Python有很多模块,而这些模块是可以独立运行的!这点不像C++和C的头文件。
3:import的时候是要执行所import的模块的。
4:__name__
就是标识模块的名字的一个系统变量。这里分两种情况:假如当前模块是主模块(也就是调用其他模块的模块),那么此模块名字就是__main__
,通过if判断这样就可以执行“__mian__
:”后面的主函数内容;假如此模块是被import的,则此模块名字为文件名字(不加后面的.py),通过if判断这样就会跳过“__mian__
:”后面的内容。
通过上面方式,python就可以分清楚哪些是主函数,进入主函数执行;并且可以调用其他模块的各个函数等等。
标签:函数 和我 第一行代码 list localtime __name__ 并且 报错 if判断
原文地址:https://www.cnblogs.com/yellowcloud/p/10982306.html