【0815 | Day 16】模块及模块的四种形式/import和from..import/循环导入/模块的搜索路径/python文件的两种用途/random模块

模块

模块就是一个py文件, 这个py文件有一大堆函数

模块的四种形式

  1. 自定义模块,common.py就叫做common模块
  2. 第三方模块: 需要自己安装 13万个第三方库 ,无所不能,写库(弄得更简单)
  3. 内置模块: python解释器自带的,不需要安装
  4. 包--> 含有_inti_.py的文件夹,一种特殊的模块(解决了一个问题)

import 与from...import...

import

import和from...import

  1. 以time模块为例,打开time.py文件
  2. 用Python解释器运行解释time.py文件,然后把得到的名字放入一个time模块的名称空间
  3. test.py会有一个变量名time指向time模块的名称空间/变量名t指向time模块的名称空间
#test.py

import time

import time as t  #变量名t指向time模块的名称空间

from time import sleep
from time import sleep,localtime

from...import...

  1. 以time模块为例,打开time.py文件
  2. 用Python解释器运行解释time.py文件,然后把得到的名字放入一个time模块的名称空间
  3. test.py会有一个变量名sleep指向time模块名称空间中的sleep名字
# *受__all__=['']
#test.py

__all__ = ['f1','f2']

def f1():
    print(1)
def f2():
    print(2)
def f3():
    print(3)
   
from test import *
	test.f3()    #无法运行

import test
	test.f3()	# 3

循环导入

#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. 然后从自定制寻找

    x = 10
    
  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()
    

Python文件的两种用途

  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条件不成立,报错

random模块

import random

# 大于0且小于1之间的小数
print(random.random())

0.42866657593385415

# 大于等于1且小于等于3之间的整数
print(random.randint(1, 3))

3

# 大于等于1且小于3之间的整数
print(random.randrange(1, 3))

2

# 大于1小于3的小数,如1.927109612082716
print(random.uniform(1, 3))

2.1789596280319605

# 列表内的任意一个元素,即1或者‘23’或者[4,5]
print(random.choice([1, '23', [4, 5]]))

[4, 5]

# random.sample([], n),列表元素任意n个元素的组合,示例n=2
print(random.sample([1, '23', [4, 5]], 2))

['23', 1]

lis = [1, 3, 5, 7, 9]
# 打乱l的顺序,相当于"洗牌"
random.shuffle(lis)
print(lis)

[9, 1, 5, 7, 3]
posted @ 2019-08-15 20:23  fxyadela  阅读(282)  评论(0编辑  收藏  举报