目录
模块是一系列功能的集合体,而函数是某一个功能的集合体,因此模块可以看成是一堆函数的集合体。一个py文件内部就可以放一堆函数,因此一个py文件就可以看成一个模块。如果这个py文件的文件名为module.py
,模块名则是module
。
1、自定义模块:就是自己创建的py文件,里面写入一堆函数,则这个文件被称为自定义模块,即使用python编写的.py文件。
2、第三方模块:需要自己安装,有13万个第三方库,无所不能
3、内置模块:python解释器自带的,不需要安装
4、包:含有__inti__
.py的文件夹,一种特殊的模块(解决了一个问题)
python看成一个手机,pip是应用管家,time就是应用管家里的一个应用,要用它就import
import time
time.time()
import 首次导入模块发生的3件事情:
? 1、在内存中生成一个叫做time的名称空间
? 2、运行time.py文件,然后把time.py文件内的名称空间放入time的名称空间内
? 3、把time的名称空间指向import和from...import.py(当前导入time模块的文件) 的名称空间中
模块的重复导入会直接引用之前创造好的加过,不会重复执行模块的文件
使用import time导入的时候,使用方法只能time.方法名(),不能直接方法名
不推荐使用这个方法
from time import gmtime
print(gmtime())
from...import...首次导入模块发生的3件事情:
? 1、在内存中生成一个叫做time的名称空间
? 2、运行time.py文件,然后把time.py文件内的名称空间放入time的名称空间内
? 3、把gmtime方法指向import和from...import.py(当前导入time模块的文件) 的名称空间内,该方法可以不用加任何前缀而直接使用
导入文件内所有内容的功能:
__all__
在两种模块名中的区别
from test import * # __all__限制了 from test import *(导入全部)
from test import f3 # __all__不会限制
import test # __all__ 不会限制
相同点:
? 1、两者都会执行模块对应的文件,两者都会产生模块的名称空间
? 2、两者调用功能时,需要跑到定义时寻找作用域关系,与调用位置无关
不同点:
? import 需要加前缀;from...import...不需要加前缀
#m1.py
from m2 import y
x = 10
#m2.py
from m1 import x
y = 20
过程:m1.py --> m2.py --> m1.py ... 就进入了循环导入的死循环
结果:x/y在这个过程中一直没有生成
#m1.py
x = 10
from m2 import y
#m2.py
y = 20
from m1 import x
过程:m1.py --> x = 10 --> m2.py --> y = 20 --> m1.py --> x = 10
结果:x = 10 --> y = 20 --> x = 10
#m1.py
def f1():
from m2 import y
print(y)
x = 10
#m2.py
def f1():
from m1 import x
y = 20
过程:f1() --> m2.py --> y = 20
结果:y = 20
1、先从内存中找
from m2 import y
print(y)
import time
time.sleep(10) # 10s内删除了m2
from m2 import y
print(y)
2、再从内置模块中找
from time import time
print(time)
3、然后从自定制模块中找
? 也就是在自己创建的文件模块中找
4、最后从环境变量中找(未来项目的执行文件一定要弄一个环节变量)
import sys
print(sys.path) # 环境变量,模块就是在某个路径中,需要添加路径,在这里找
sys.path.append(r'D:\上海Python11期视频\python11期视频\day 16')
# del sys.path[1]
print(sys.path)
import testt
testt.f1()
1、作为模块文件(m1.py中调用m2.py,运行m1.py时,m2.py即为模板文件),模块可以有多个
2、作为执行文件(当前运行的文件),执行文件只有一个
3、执行文件和模块文件是相对的
# m1.py
x = 10
if __name__ == '__main__':
print(x)
# m2.py
import m1
当运行m1.py时,即m1.py作为执行文件,此时 __name__== main,打印x
当运行m2.py时,即m1.py作为模板文件,此时__name__== m1,if条件不成立,报错
if __name__ == ‘__main__‘:
实际上就是一个if
判断,或者是过滤器。可以用main+tab键快速打出来
掌握
1、random.random() 随机生成一个0--1之间的小树
import random
print(random.random()) #随机生成一个大于0小于1之间的小数
------------------------------------------------------------
0.6331352272344526
2、random.randint():随机生成一个数值范围内两头都包括之间的整数
import random
print(random.randint(1,5)) #随机生成一个大于等于1且小于等于5之间的整数
------------------------------------------------------------
5
3、random.shuffle():打乱容器类元素--->列表和字典
import random
list = [1,3,5,7,9]
random.shuffle(list) #打乱list的顺序,相当于“洗牌”
print(list)
------------------------------------------------------------
[9, 5, 3, 7, 1]
了解
1、random.randrange():随机生成一个给定范围内(顾头不顾尾)的整数
import random
#随机生成一个大于等于1且小于3之间的整数
# print(random.randrange(1,3))
------------------------------------------------------------
1
2、random.uniform():随机生成给定范围内(头尾都不顾)的小数
import random
#随机生成一个大于1小于3的小数
print(random.uniform(1,3))
------------------------------------------------------------
2.7201432742975458
3、random.choice():随机取出列表内的任意一个元素
import random
#随机生成列表内的任意一个元素
print(random.choice([1,'23',[4,5]]))
------------------------------------------------------------
1
4、random.sample():随机取出列表元素任意n个元素的组合
import random
#随机生成列表元素任意n个元素的组合
print(random.sample([1,'23',[4,5]],3)) #这个3就代表n
------------------------------------------------------------
[[4, 5], '23', 1]
原文地址:https://www.cnblogs.com/zhuangyl23/p/11360897.html