其他分享
首页 > 其他分享> > 8.15 day16

8.15 day16

作者:互联网

模块的四种形式

在我们之前要用到某些关于时间的函数的时候用了一句代码“ import time”这就是Python的一个模块除了time,我们之前还用到过os等

模块本质上就是一个py文件, 这个py文件有一大堆函数,不同的模块一般会用于实现不同的功能,比如time里都是和时间有关的,而os都是和文件操作有关的

模块一般分为以下四类

自定义模块

可以自己写所需功能的模块,可自定义名字,比如common.py就叫做common模块

第三方模块

需要自己安装 13万个第三方库 ,无所不能,写库(弄得更简单)

内置模块

python解释器自带的,不需要安装

含有__inti__.py的文件夹,一种特殊的模块(解决了一个问题)

当你用import xxx 时,就可以调用xxx里的内置方法

import time
print(time.time())

import datetime
print(datetime.datetime.now())

具体怎么调用以及一些常用模块的内置方法会在接下来讲到

import和from...import

如果把python看成一个手机,pip是应用管家,time就是应用管家里的一个应用,要用它,import

import 发生的3件事情:

  1. 在内存中生成一个叫做time的名称空间
  2. 运行time.py文件,然后把time.py文件内的名称空间放入time的名称空间内
  3. 把time的名称空间指向 import和from...impot.py(当前导入time模块的文件) 的名称空间中

使用import time导入的时候,使用方法只能 time.方法名() ,不能直接方法名

from import

from time import gmtime
from time import gmtime,time
from time import *  # 所有(等同于import time),不推荐使用,因为很容易造成变量名冲突

前俩段代码的作用都是调用time里的gmtime函数,其余的函数都不行

后一段代码可以调用time里所有函数,并且不需要加time.xx ,但是前面不加模块名反而可能会和自己本身定义的变量名或者函数名冲突,所以不建议使用

__all__

__all__会限制 from xxx import * 的使用,即这里面的不会被调用,但是__all__却不会阻止import xxx 的调用

循环导入问题

有下面俩个模块m1和m2:

# m1
from m2 import y

x = 10

print('y:', y)


# m2

from m1 import x
y  = 20

print('x:',x)

这个时候你运行m2会发现报错,因为这个时候你会发现无法找到x,因为在m1执行x = 10之前m2就已经在寻找x变量这里有俩个解决方法:

方法一

将x = 10定义到import之前:

# m1

x = 10

from m2 import y

print('y:', y)


# m2

from m1 import x

y  = 20

print('x:',x)

# 运行m2结果为:
x: 10
y: 20
x: 10

运行过程为:运行m2.py找y --> y在上面,找到了y --> m2暂停运行 --> 继续运行m1.py,x =10 --> print('y:',20) --> m1运行完了,继续运行m2 --> 运行m1找x --> 找到了x,暂停运行m1 --> print('x:',10) --> m2结束了再去继续运行m1.py --> print('y:',20)

但是一般来说import都应该尽量写在头部,所以并不推荐使用这个方法

方法二

用函数的方式来解决这个问题

# m1
def f2():
    from m2 import y  # ImportError: cannot import name 'y'
    print(y)

x = 10

# m2:
y = 20


def f1():
    from m1 import x
    # ImportError: cannot import name 'x'
    print(x)

f1()
# 运行m1, 找x ,直接打印了x  --> 返回m1,继续打印y --> 返回m1打印x

模块的搜索路径

查找模块的搜索路径,会先从内存中找,随后再找内置,其次再找自定制,最后再找环境变量中

python文件的两种用途

执行文件

当前运行的文件

模块文件

被当前运行文件调用的文件就是模块文件

执行文件和模块文件是相对的.

random模块

较常用的方法

print(random.random())  # 0-1的随机数

print(random.randint(0, 100))  # 0-100的整数

lt = [1, 2, 3, 4, 5,]
random.shuffle(lt)  # 打乱容器类元素  --> 列表和字典
print(lt)

了解的方法

print(random.randrange(1, 10))  # 1,9之内的整数

print(random.uniform(1, 3))  # 1-3的小数

print(random.choice([1, 2, 3, 'a', 'b']))  # 选一个

print(random.sample([1, 2, 3, 'a', 'b'],2))  # 选2个


def choice(lt):

    ind = random.randint(0,len(lt)-1)

    return lt[ind]

print(choice([1, 2, 3, 'a', 'b']))

标签:m2,print,day16,m1,模块,time,8.15,import
来源: https://www.cnblogs.com/hyc123/p/11360136.html