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. (转)为C# Windows服务添加安装程序

    本文转载自:http://kamiff.iteye.com/blog/507129 最近一直在搞Windows服务,也有了不少经验,感觉权限方面确定比一般程序要受限很多,但方便性也很多.像后台运行不阻 ...

  2. PAT 甲级 1011 World Cup Betting (20)(20 分)(水题,不用特别在乎精度)

    1011 World Cup Betting (20)(20 分) With the 2010 FIFA World Cup running, football fans the world over ...

  3. [转]FluentData

    本文来自:http://fluentdata.codeplex.com/wikipage?title=Fluency&referringTitle=Home Documentation  Fl ...

  4. 使用word设置标题级别, 自动生成和大纲对应的多级列表, 自动生成索引目录

    作为程序员,只会开发是不够的, 在日常工作中还需要掌握一些办公软件的的操作方法,word excel ppt精通不敢, 暂且入个门吧, 在前后台开发配合过程中,能写的一手好文档将会达到事半功倍的效果, ...

  5. [Python] String strip() Method

    Description The method strip() returns a copy of the string in which all chars have been stripped fr ...

  6. Python开发一个WEB聊天室

    项目实战:开发一个WEB聊天室 功能需求: 用户可以与好友一对一聊天 可以搜索.添加某人为好友 用户可以搜索和添加群 每个群有管理员可以审批用户的加群请求,群管理员可以用多个,群管理员可以删除.添加. ...

  7. 25.OGNL与ValueStack(VS)-集合对象进阶

    转自:https://wenku.baidu.com/view/84fa86ae360cba1aa911da02.html 首先在LoginAction中增加如下字段并提供相应的get/set方法: ...

  8. Running Bitvise SSH Client as a Windows Service

    It is possible to run a Windows program as a system service. The advantage of services is that they ...

  9. 使用D3D渲染YUV视频数据<转>

    源代码下载 转载地址:http://blog.csdn.net/dengzikun/article/details/5824874 源码地址:http://download.csdn.net/down ...

  10. Shiro框架的简单应用

    一.概念 Shiro是一个安全框架,可以进行角色.权限管理. Shiro主要功能如下:Authentication(认证):用户身份识别,通常被称为用户“登录”Authorization(授权):访问 ...