day 20 02 模块的导入
程序员文章站
2022-04-09 07:52:10
day 20 02 模块的导入 运行结果: 9. 两种不同导入的优缺点: (1)import demo demo:里面的名字都会导入 会占很多内存 里面的命名空间和不是模块里面的命名空间是分开的,所以外面如果有和demo里面相同的变量名,也是不会相互影响 (2)from demo import 变量 ......
day 20 02 模块的导入
1.
模块:就是一个文件:放置一些通用的有独立功能程序或者函数.
比如建立一个py文件,文件名为:demo,文件里面的内容:
demo模块:
print('嗨大米')
def tx():
print('123')#函数没有进行调用
2.
怎么导入demo的:首先import+文件名(文件名要符合命名规则)
1.import demo#此时就可以导入并且运行出demo的结果
2.demo.tx()#调用demo文件里面的函数tx,此时写好的函数就可以调用了
(每次要使用模块里面的参数函数名字,都得通过demo.名字才可以使用)
3.
每次import一个模块所做的事情:
找到模块(文件:有它自己的路径)
创建这个模块的命名空间
把文件中的名字都放到命名空间里面
4.
假设demo里面有一个参数money=100而在导入的模块外面也有一个参数money=200
导入模块后面的代码:
import demo#此时就可以导入并且运行出demo的结果 money=200 demo.tx()#调用demo文件里面的函数tx print(demo.money)
#当调用demo里面的函数tx的时候,里面的money是等于100的,因为在demo模块里面有自己的命名空间, 自己里面有就使用自己文件里面的,与外面的money=200不相关
demo模块里面的代码:
print('嗨大米') money = 100 def tx(): print('123',money)
运行结果:
嗨大米 123 100 100
5.
为什么一个模块不会被重复导入:
import sys print(sys.modules.keys()) print(sys.path)
先从sys.modules里面查看是否已经被导入(正是因为这样查看是否被导入,被导入后,后面的都不会去看了,所以才不会被重复导入)
#如果没有被导入,就依据sys.path路径去寻找模块
#找到了就导入
#创建这个模块的命名空间
#执行文件,把文件中的名字都放到命名空间里面
6.
给一个模块起别名:即重命名
import time as t print(t.time())
为什么要起别名:写一个代码可以在两个地方都可以用,即代码具有兼容性
两个数据库:oracle和mysql,对这两个数据库的使用的操作一般都是:
连接数据库:
登入数据库
增删改查
关闭数据库
oracle.connect mysql.connect
同样方式只是导入的模块名字不一样而已,此时给两个数据库起同一个别名就方便简单的多:
if 数据库=='oracle':
import oracle as db
elif 数据库=='mysql':
import mysql as db
import time as t
time.time #报错:重命名为t了,原来的time就不能用了
7. 写程序的时候,应该先一次性把使用的模块都在文件开头依次导入:
内置模块
扩展模块:别人写好的,需要安装的
自定义的模块:自己写的
最好不要写一点程序就导入一个模块
import time,sys,os 一行可以导入多个模块
8.
单独从某个模块当中导入一个方法或者是变量,就用:from 模块 import 方法/变量
from time import sleep #从time模块当中导入sleep方法 sleep(1) #直接调用sleep方法
from demo import tx tx() #此时的执行结果中的money还会使用demo模块里面函数tx外面的money=100,但是我只是调用了函数而已,为什么会这样呢: 因为在导入模块的时候,都会一次将模块里面的代码看过并且将参数保存起来,当使用到的时候会直接拿来用
9.
两种不同导入的优缺点:
(1)import demo demo:里面的名字都会导入 会占很多内存 里面的命名空间和不是模块里面的命名空间是分开的,所以外面如果有和demo里面相同的变量名,也是不会相互影响
(2)from demo import 变量名:不占内存 但是只是导入单一的变量或者方法,不方便后面使用,这里的变量名如果在模块外面存在一样的变量名的话,就会依据外面的变量名为准,demo里面的将不会存在
from demo import money,tx print(money) tx() money=200 tx()#调用tx还是会继续使用demo里面的money,而不会使用200
运行结果:
嗨大米 123 100 100 100 123 100
10.
_all_ = ['demo模块里面的变量名/方法']与import*
demo模块:
_all_ = ['tx'] #这里没有money,下面的demo.money就不能使用,即money没有被导入,存在_all_里面的才会被导入 print('嗨大米') money = 100 def tx(): print('123',money)
导入模块后的代码:
import sys print(sys.path) from demo import * #如果demo模块里面没有_all_ = ['tx']的话,这里就会导入全部的变量名,但是此时有,就受到了限制,没有在列表里面的变量名或者方法都不会被导入
tx() #tx已经被导入
print(demo.money) #报错,money没有被导入
11.
_name_与_main_
如果在demo模块里面 print(_name_),此时的打印结果,_name_=_main_
当我们使用其他模块,而在其他模块里面引用demo模块的时候,这个模块中的_name_=demo
我们可以用 if _name_=_main_,来判断是否执行模块里面的某个独立功能的函数,这样在导入模块的时候就不会全部都执行
12.
复习总结: # 所有模块导入尽量往上写:且导入顺序: 内置模块 扩展模块:需要安装的都是扩展模块 自定义模块 # import 模块名 #模块名. 变量名 和本文件中的变量名完全不冲突 import 模块名 as 重命名的模块名:提高代码的兼容性 import 模块1,模块2 # from import from 模块名 import 变量名 直接使用 变量名 就可以完成操作 如果本文件中有相同的变量名会发生冲突 from 模块名 import 变量名 as 重命名变量名 from 模块名 import 变量名1,变量名2.. from 模块名 import * # 将模块中的所有变量名都放到内存中 # 如果文件中有相同的变量名会发生冲突 # from 模块名 import * 和_all_是一对 没有这个变量,就会导入所有名字 有_all_就导入_all_列表里面的名字而已 # 包:一大堆模块的集合
上一篇: 收集的PHP中与数组相关的函数
下一篇: 直接带着一车人窜进了池塘
推荐阅读
-
JavaEE基础day02 1.定义Java中的变量 四类八种 2.变量定义和使用的注意事项 3.数据类型的转换、强制数据类型转换4.算数运算符、比较运算符、逻辑运算符、赋值运算符、三元运算符
-
es6模块化导出(export)导入(import)的用法
-
python 中的列表生成式、生成器表达式、模块导入
-
python 中的列表生成式、生成器表达式、模块导入
-
python根据路径导入模块的方法
-
Python中的模块导入和读取键盘输入的方法
-
Python中import导入上一级目录模块及循环import问题的解决
-
python添加模块搜索路径和包的导入方法
-
Python3.5模块的定义、导入、优化操作图文详解
-
Python动态导入模块的方法实例分析