day024认识模块的语法,import, from xxx import xxx

本节内容:

1.认识模块
2.import
3.from xxx import xxx

一、什么是模块

模块可以认为是一个py文件. 模块实际上是我们的py文件运行后的名称空间

1、我们import加载的模块⼀共分成四个通⽤类别:

1. 使⽤pyhton编写的py⽂件(常用)
2. 已被编译为共享库或者DLL或C或者C++的扩展
3. 包好⼀组模块的包.(常用)
4. 使⽤c编写并连接到python解释器的内置模块

2、为什么要使⽤模块?

为了我们写的代码可以重⽤. 不⾄于把所有的代码都写在⼀个⽂件内.
当项⽬规模比较⼩的时候. 完全可以使⽤⼀个py搞定整个项⽬的开发.
但是如果是⼀个⾮常庞⼤的项⽬. 此时就必须要把相关的功能进⾏分离.
⽅便我们的⽇常维护. 以及新项⽬的开发

二、import

import random  #  一次性把模块所有内容导入
from random import randint # 把模块加载。 导入randint

import 模块名
模块名.属性/方法/类

每个模块都有自己的独立的名称空间,每个都有一个global, 互相并不影响
模块.属性 = 值. # 不要这么干

1、导入模块时会系统会自动执行的三个操作

1. 先去 sys.modules 查看当前模块是否已经被导入
    如果该模块已经导入,则不会重复导入
2. 开辟一段内存空间, 在该空间中执行该模块的代码
3. 给该空间一个名称,把这个名称引入当前模块

2、在当前模块,对导入的模块的一些操作

1.使用模块名可以直接访问模块的内容
2.global升华一个变量只在自己的模块有用
3. __name__ 可以屏蔽引入模块的测试代码
   __name__ 如果该模块是启动模块,值是:__main__
         如果该模块是被引入的,值是:模块名
4.用模块名.变量/方法/函数/类,可以改变导入的模块里面的内容,yitian.main_person_man = "灭绝" # 一般不要这么干

3、if name == “main“: 的使用

特别特别要注意. 如果我们在不同的模块中引入了同⼀个模块.
并且在某⼀个模块中改变了被引入模块中的全局变量.
则其他模块看到的值也跟着边.
原因是python的模块只会引入⼀次. ⼤家共享同⼀个名称空间
fe: 在其中一个模块修改,引用的同一个模块
⾦庸:
import yitian
yitian.main_person_man = "灭绝师太" ⾦庸⼆号: import yitian import ⾦庸 print(yitian.main_person_man) # 灭绝师太. 上述问题出现的原因: 1. ⼤家共享同⼀个模块的名称空间. 2. 在⾦庸⾥改变了主⻆的名字 # 如何解决 if __name__ == '__main__': yitian.main_person_man = "灭绝师太" # 此时, 只有从该模块作为⼊⼝运⾏的时候才会把main_person_man设置成灭绝师太 print("哇哈哈哈哈哈") # 只有运⾏该模块才会打印. import的时候是不会执⾏这⾥的代码的

4、我们还可以对导入的模块进⾏重新命名:

import yitian as yt # 导⼊yitian. 但是名字被重新命名成了yt. 就好⽐变量赋值⼀样.

a = 1 b = a yt.fight_in_shaolin() # 此时可以正常运⾏ # yitian.fight_in_shaolin() # 此时程序报错. 因为引⼊的yitian被重命名成了yt print(globals()) {'__name__': '__main__', '__doc__': None, '__package__': None, '__loader__': <_frozen_importlib_external.SourceFileLoader object at 0x103209438>, '__spec__': None, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, '__file__': '/Users/sylar/PycharmProjects/oldboy/模块/模块/⾦庸.py', '__cached__': None, 'yt': <module 'yitian' from '/Users/sylar/PycharmProjects/oldboy/模块/模 块/yitian.py'>}

5、一次引入多个模块

import time, random, json, yitian

6、正确的导入模块的顺序:

1. 所有的模块导入都要写在最上⾯. 这是最基本的
2. 先引入内置模块
3. 再引入扩展模块
4. 最后引入你⾃⼰定义的模块

三、from xxx import xxx

确定自己要用什么,使用这种方法
from 模块 import 函数/变量
当作自己的变量或者函数来使用

from xxx import *  导入所有(尽量不要这样导入,如果被导入的模块写__all__的话,就只会导入__all__里面的内容,其他内容不导入)
导入的内容都可以起别名  as

1、一些用法

import random # 当你不确定你要用到什么
from random import randint # 当你确定你要用到的东西 from urllib.request import urlopen # 导入单个 urlopen(url) from collections import Iterable, Iterator # 导入多个内容 from abc import ABCMeta, abstractmethod print(globals()) print(randint(1,10)) from yitian import main_person_man as nanzhujue # 对导入的内容重命名

2、两个小坑

fe1:如果当前⽂件中出现了重名的变量时. 会覆盖掉模块引入的那个变量.
from yitian import main_person_man  # 原模块的为:main_person_man = "张无忌"

main_person_man = "超级⼤灭绝" # 引入的模块中有这个变量名,会被覆盖掉 print(main_person_man) # 打印为:超级⼤灭绝
fe2: 自己的py文件,跟内置的模块,第三方模块同名

我们⾃⼰创建的py⽂件的名字不要和系统内置的模块重名.

否则,引入的很有可能是自己,写的py文件,程序根本跑不动!!!

转载于:https://www.cnblogs.com/yipianshuying/p/9983968.html

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值