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=
demo.tx()#调用demo文件里面的函数tx
print(demo.money) #当调用demo里面的函数tx的时候,里面的money是等于100的,因为在demo模块里面有自己的命名空间, 自己里面有就使用自己文件里面的,与外面的money=200不相关

demo模块里面的代码:
print('嗨大米')
money =
def tx():
print('',money)

运行结果:

嗨大米
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() #直接调用sleep方法

from demo import tx
tx()
#此时的执行结果中的money还会使用demo模块里面函数tx外面的money=,但是我只是调用了函数而已,为什么会这样呢:
因为在导入模块的时候,都会一次将模块里面的代码看过并且将参数保存起来,当使用到的时候会直接拿来用

9.

两种不同导入的优缺点:

(1)import demo demo:里面的名字都会导入 会占很多内存 里面的命名空间和不是模块里面的命名空间是分开的,所以外面如果有和demo里面相同的变量名,也是不会相互影响

(2)from demo import 变量名:不占内存 但是只是导入单一的变量或者方法,不方便后面使用,这里的变量名如果在模块外面存在一样的变量名的话,就会依据外面的变量名为准,demo里面的将不会存在


from demo import money,tx
print(money)
tx()
money=
tx()#调用tx还是会继续使用demo里面的money,而不会使用200

运行结果:

嗨大米

10.

_all_ = ['demo模块里面的变量名/方法']与import*

demo模块:

_all_ = ['tx']
#这里没有money,下面的demo.money就不能使用,即money没有被导入,存在_all_里面的才会被导入
print('嗨大米')
money = def tx():
print('',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_列表里面的名字而已 # 包:一大堆模块的集合
 

day 20 02 模块的导入的更多相关文章

  1. day 20 - 1 序列化模块,模块的导入

    序列化模块 首先我们来看一个序列:'sdfs45sfsgerg4454287789sfsf&*0' 序列 —— 就是字符串序列化 —— 从数据类型 --> 字符串的过程反序列化 —— 从 ...

  2. Python全栈工程师(包、模块 的导入)

    ParisGabriel                每天坚持手写  一天一篇  决定坚持几年 为了梦想 为了信仰     Python人工智能从入门到精通 $ pip3 install tenso ...

  3. python模块以及导入出现ImportError: No module named 'xxx'问题

    python中,每个py文件被称之为模块,每个具有__init__.py文件的目录被称为包.只要模块或者包所在的目录在sys.path中,就可以使用import 模块或import 包来使用如果你要使 ...

  4. 浅谈python模块的导入操作

    1.什么是模块 在Python中有一个概念叫做模块(module). 所谓模块,就是将代码量较大的程序分割成多个有组织的,彼此独立但双能互相交互的代码片段, 这些自我包含的有组织的代码段就是模块. 2 ...

  5. TypeScript 中非代码模块的导入

    需要理解的是,TypeScript 作为语言,他只处理代码模块.其他类型的文件这种非代码模块的导入,讲道理是通过另外的打包工具来完成的,比如 Web 应用中的图片,样式,JSON 还有 HTML 模板 ...

  6. Python模块的导入以及软件开发规范

    Python文件的两种用途 1 . 当脚本直接使用,直接当脚本运行调用即可 def func(): print("from func1") func() 2 . 当做模块被导入使用 ...

  7. Learning-Python【16】:模块的导入使用

    一.什么是模块 模块就是一系列功能的集合体,一个模块就是一个包含了Python定义和声明的文件,文件名就是模块名字加上.py的后缀. 模块有三种来源: 1.内置的模块 2.第三方的模块 3.自定义模块 ...

  8. python之模块的导入

    今天在做一个项目的时候卡在模块导入这个点上了.赶紧回头总结一下 一.被导入的文件和工作的脚本在一个目录下 1.导入一个.py文件里的功能或参数(导入模块) 先看一下目录结构: module里有两个功能 ...

  9. Python之路(第十二篇)程序解耦、模块介绍\导入\安装、包

    一.程序解耦 解耦总的一句话来说,减少依赖,抽象业务和逻辑,让各个功能实现独立. 直观理解“解耦”,就是我可以替换某个模块,对原来系统的功能不造成影响.是两个东西原来互相影响,现在让他们独立发展:核心 ...

随机推荐

  1. 转转转---ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法

    ROWNUMBER() OVER( PARTITION BY COL1 ORDER BY COL2)用法   http://blog.csdn.net/yinshan33/article/detail ...

  2. SOLR对多个(关联)表创建索引

    又两天没写博客,关于SOLR的东西,写了一周了还没写完我也是醉了,毕竟会的东西真不多,周四晚上加班没写,周五晚上公司同事聚会也没写,今天在家,还是把最后的一点写完吧,我会的剩下的也就是一个对多个表创建 ...

  3. python类静态变量

    python的类静态变量直接定义在类中即可,不需要修饰符,如: 1 class Test: stc_attr = 1 def __init__(self,attr1,attr2): self.attr ...

  4. Python中的strip()函数的用法

    函数:string.strip() Python strip() 方法用于移除字符串头尾指定的字符(默认为空格). 一.函数说明 strip() 语法:str.strip([rm]); 参数说明 rm ...

  5. c#,读取二维码

    /// <summary>/// 读取二维码/// 读取失败,返回空字符串/// </summary>/// <param name="filename&quo ...

  6. VS2017连接Oracle设置

    1. 下载安装 Oracle Developer Tools for Visual Studio 2017: 2. 配置tnsnames.ora ODP.Net默认使用安装目录下的 tnsnames. ...

  7. ATL控件签名之后页面还提示“在此页面上的Activex控件和本页上的其他部分及交互可能不安全”

    ATL控件正常签名打包,然后安装之后还是会提示: 没理由啊,签名是花钱搞得正当的签名.后来查了资料才知道这还不够,需要在创建ATL控件的时候继承一个IObjectSafetyImpl 类 知道了原因, ...

  8. Eclipse 安装Hibernate Tools 工具 提高开发效率

    1.打开Eclipse 开发工具  2.配置使用hibernate Tools 3.选择search 选项卡,搜索 hibernate 关键字 点击Install       Next  finish ...

  9. HBase实验(CRUD和MR入库)

    目录 前期准备 在HBase shell中实现CRUD操作 1. 启动命令行客户端 2. 创建表 3. 删除.新增列族 4. 删除表teacher 5. 新增数据 6. 查看数据 用Java API实 ...

  10. 与DispatcherServlet的 url-pattern配置问题

    <!--当DispatcherServlet 的url-pattern配置成/ 访问不到静态资源 的解决方法1:使用Tomcat默认的Servlet解决 --> 在web.xml中加以下代 ...