Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >模块,import,from xxx

模块,import,from xxx

作者头像
py3study
发布于 2020-01-22 14:20:14
发布于 2020-01-22 14:20:14
59500
代码可运行
举报
文章被收录于专栏:python3python3
运行总次数:0
代码可运行

一,模块

  模块就是一个包含了python定义和声明的文件,文件名就是模块的名字加上.py后缀,总体来说,import加载的模块一共分成四个通用的类别:

  1,使用python编写的py文件

  2,已被变异为共享或者DLL或者C++的扩展

  3,包好一组模块的包

  4,使用c编写并连接到python解释器的内置模块

  为什么要使用模块?为了我们写的代码可以重用不至于把所有的代码都写在一个文件内,当项目规模比较小的时候,完全可以使用一个py搞定整个项目的开发,但是如果是一个非常大的项目,此时就必须要把相关的功能进行分离,方便我们日常维护,以及新项目的开发,导入模块有两种方式:

  1,import 模块

  2,from xxx import xxx

二,import

  首先建一个tang.py文件。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
name='糖糖'
def xihuan():
    print('%s喜欢看小说'%name)
    print('她喜欢画画')
    print('她喜欢喝冰红茶')
    print('她喜欢吃胡豆')
xihuan()

  接下来,再建一个py文件,在这个文件中导入tang模块。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tang   #此时运行新建的py文件时,会默认执行tang模块中的代码
import tang   #不管后面调用几次,都是没有效果的,模块是不能够重复导入的
import tang
print(tang.name)
tang.xihuan()  #在引入模块后,就可以调用tang模块中的属性和方法

  导入模块的时候都做了些什么?首先,在导入模块的一瞬间,python解释器会先通过sys.mudules来判断该模块是否已经导入过了,如果导入过了就不在导入,如果该模块还没导入过,则系统会做三件事:

  1,为导入的模块创立新的名称空间

  2,在新创建的名称空间中运行该模块中的代码

  3,创建模块的名字,并使用该名称作为该模块在当前模块中引用的名字

  注意:由于模块在导入的时候会创建自己的名称空间,所以,我们在使用模块中的变量的时候一般是不会产生冲突的。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tang
name='糖儿'
tang.xihuan()  #结果还是用的是tang中的‘糖糖’

  注意:在模块中使用global,我们之前说global表示把全局的内容引入进到局部,但是,这个全局指的是py文件,换句话说,global指向的是模块内部,并不会改变外部模块的内容

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tang.py
name='糖糖'
def xihuan():
  global name
  name='糖糖糖'
  print(name)

111.py
import tang
name='唐儿'
tang.xihuan()  #结果是‘糖糖糖’
print(name)     #结果是‘唐儿’

  特别要注意,如果我们在不同的模块中引入同一个模块,并且在某一个模块中改变了被引入模块中的全局变量,则其他模块看到的值也随之改变,原因是python的模块只会引入一次,大家共享同一个名称空间

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tang.py
name='糖'

111.py
import tang
tang.name='糖糖'
#if __name__ == __main__:  此时,只有在111py文件为执行文件时才会改变值
  #tang.name='糖糖’

112.py
import tang
import 111
print(tang.name)  #结果是‘糖糖’

113.py
import tang
import 111
#print(tang.name) #而此时,结果就不在是‘糖糖’,而是‘糖’

  我们可以对引入的模块重新命名,还可以一次性引入多个模块

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import tang as t
print(t.name)  #这样也行的

import time,random,json,tang #一次引入多个,但引入的顺序是有规定的

  正确的导入模块的顺序:

  1,所有的模块导入都要写在最上面,这是最基本的

  2,先引入内置模块

  3,在引入扩展模块

  4,最后引入自定义的模块

三,from xxx import xxx

  其实就是选择性的导入

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tang.py
name='糖糖'
def xihuan():
    print('%s喜欢看小说'%name)
    print('她喜欢画画')
    print('她喜欢喝冰红茶')
    print('她喜欢吃胡豆')
xihuan()

from tang import xihuan
xihuan() #直接使用就可以,不用tang.

  但是这有个坑,当我们从一个模块中引入一个变量的时候,如果当前文件中出现了重名的变量时,会覆盖掉模块中引入的那个变量。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tang.py
name='糖糖'
def xihuan():
    print('%s喜欢看小说'%name)
    print('她喜欢画画')
    print('她喜欢喝冰红茶')
    print('她喜欢吃胡豆')
xihuan()

from tang import name
name='静静'
print(name) #此时结果是‘静静’

 所以,不要重名,切记,不要重名!不仅仅是变量名不要重复,我们创建的py文件的名字不要和系统内置的模块重名,否则,引入的模块都是python内置的模块。

  还有一种特殊的写法,from xxx import *,此时也是把模块中的所有内容导入。注意:如果所导的模块中没有写__all__则默认所有内容导入,但如果写了__all__,此时导入的内容就是__all__列表中列出来的所有名字

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tang.py
__all__=['name']
name='糖糖'
def xihuan():
    print('%s喜欢看小说'%name)
    print('她喜欢画画')
    print('她喜欢喝冰红茶')
    print('她喜欢吃胡豆')

www.py
from tang import *
print(name)  #结果是‘糖糖’
xihuan()  #报错

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2019/04/09 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
Python 模块与包
模块就是一个包含了python定义和申明的文件,文件名就是模块的名字加上.py的后缀/
py3study
2020/01/19
5150
python学习:模块的导入方式教程
首先啊,在python中我们熟知的py文件就是一个模块,也就是换言之以py结尾的Python源代码文件都是一个模块我就简单概括一下了直接上代码
Python学习者
2022/10/08
9580
模块的四种形式、 import和from...import、 循环导入问题、模块的搜索路径、 python文件的两种用途
自己写的一个.py文件就是一个自定义的模块,文件名就是模块名。模块名不要和python自带模块冲突。
GH
2022/05/10
6750
【从零学习python 】37.Python自定义模块的使用和注意事项
除了使用系统提供的内置模块以外,我们还能自己写一个模块供自己的程序使用。一个.py文件就是一个模块,所以,自定义模块很简单,基本上相当于创建一个.py文件。但是,需要注意的是,如果一个.py文件要作为一个模块被别的代码使用,这个.py文件的名字一定要遵守标识符的命名规则。
全栈若城
2024/02/29
1620
1.自定义模块
​ 一个函数封装一个功能,你使用的软件可能就是由n多个函数组成的(先备考虑面向对象)。比如抖音这个软件,不可能将所有程序都写入一个文件,所以咱们应该将文件划分,这样其组织结构要好并且代码不冗余。加入分了10个文件,每个文件里面可能都有相同的功能(函数),怎么办?所以将这些相同的功能封装到一个文件中,那么这个存储着很多常用的功能的py文件,就是模块。 模块就是文件,存放一堆常用的函数,谁用谁拿。怎么拿?比如:我要策马奔腾共享人世繁华,应该怎么样?我应该骑马,你也要去浪,你是不是也要骑马。 我们说一个函数就是一个功能,那么把一些常用的函数放在一个py文件中,这个文件就称之为模块,模块,就是一些列常用功能的集合体。
changxin7
2019/09/10
5360
1.自定义模块
Python import 与 __all__
使用from <module> import *导入模块时,若显式定义了__all__,则只导入__all__中的name,否则会导入除以下划线开头的所有name
雪飞鸿
2020/06/16
1.2K0
第二十五天- 包
# 包: # 定义: # 包是⼀种通过'模块名'来组织python模块名称空间的⽅式.我们创建的每个⽂件夹都可 # 称之为包.但要注意,在python2中规定.包内必须存在 __init__.py⽂件.在python3中可以 # 省略,但是最好都保留.当我们导入一个包的时候,默认执行这个包内的__init__.py;创建包 # 的⽬的不是为了运⾏, ⽽是被导入使⽤. 包只是⼀种形式⽽已.包的本质就是⼀种模块 # 作用: # 随着功能越写越多,我们无法将所有功能都放在⼀个⽂件中,于是我们用模块去组织功能,
py3study
2020/02/10
2850
周末学习笔记——day03(模块,包)
一,复习 ''' 装饰器 @wraper # fn = wraper(fn) def fn(): pass def wrap(arg): def outer(func): # 可以用arg def inner(*args, **kwargs): # 可以用arg res = func(*args, **kwargs) return res return inner re
py3study
2020/01/16
5180
Python模块
有了命名空间的概念,可以有效的解决函数或者是变量重名的问题。不同的命名空间中允许出现相同的函数名或者 是变量名。它们彼此之间不会相互影响,例如在Namespace A和B中同时有一个名为var的变量,对A.var赋值并不 会改变B.var的值。
星哥玩云
2022/09/08
1.1K0
Python模块
python3--os模块,模块和包(import... , from..import...)
常见的场景:一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py的后缀
py3study
2018/08/02
8590
Python模块
模块:在Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个模块,下面就来了解一下Python中的模块。说的通俗点:模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就需要导入这个模块
用户7886150
2020/12/20
8140
Python之异常处理、模块与包
exception万能异常,不管抛出什么异常都能捕捉到,用一种方法去处理,但是如果想对于不同的异常需要定制不同的处理逻辑,还是要用多分支进行处理
py3study
2020/01/10
7240
Python3 与 C# 扩展之~模块专栏
代码裤子:https://github.com/lotapp/BaseCode/tree/maste
逸鹏
2018/07/07
1.3K0
Python3 与 C# 扩展之~模块专栏
python模块和包
一个模块就是一个包含了python定义和声明的文件,文件名就是模块名字加上.py 的后缀。
超蛋lhy
2018/08/31
1.4K0
4.模块与包
下面我会以tbjx.py 为例来介绍模块的使用:文件名tbjx.py 模块名tbjx
changxin7
2019/09/10
8190
Python基础13-模块的使用
-多年互联网运维工作经验,曾负责过大规模集群架构自动化运维管理工作。 -擅长Web集群架构与自动化运维,曾负责国内某大型金融公司运维工作。 -devops项目经理兼DBA。 -开发过一套自动化运维平台(功能如下): 1)整合了各个公有云API,自主创建云主机。 2)ELK自动化收集日志功能。 3)Saltstack自动化运维统一配置管理工具。 4)Git、Jenkins自动化代码上线及自动化测试平台。 5)堡垒机,连接Linux、Windows平台及日志审计。 6)SQL执行及审批流程。 7)慢查询日志分析web界面。
DriverZeng
2022/09/26
4020
Python基础13-模块的使用
Python import 【总结】
可能网上很多文章或博客都没解释清楚,作者自己也苦心于Python的import。至此,把自己的总结的分享给大家,本文不做基础讲解,仅说明疑惑的地方。
py3study
2020/01/10
7590
python中import星_Python imports 指北
声明:如果你每天写Python,你会发现这篇文章中没有新东西。 这是专为那些像运维人员等偶尔使用Python的人以及那些忘记/误用python import的人写的。 尽管如此,代码是用Python 3.6类型注释编写的,以满足有经验的Python读者。 像往常一样,如果你发现任何错误,请告诉我!
用户7886150
2020/12/31
1.2K0
【从零学习python 】38.Python包的使用及导入方式
现有以下包newmsg,包里由两个模块,分别是sendmsg.py、recvmsg.py文件。在包的上级文件夹里,有一个test.py文件,目标是在test.py文件里引入newmsg的两个模块。
全栈若城
2024/02/29
2230
python3--模块和包,软件开发规范
在第一次导入某个模块时(比如my_module),会检查该模块是否已经被加载到内存中(执行文件的名称空间对应的内存),如果有则直接引用,如果没有,解释器则会查找同名的内建模块,如果还没有找到就从sys.path给出的目录列表中依次寻找my_module.py文件
py3study
2018/08/02
7300
相关推荐
Python 模块与包
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验