Python学习日记(十九) 模块导入

模块导入

当文件夹中有这样一个自定义的command模块

在它的内部写下下列代码:

print(‘这个py文件被调用!‘)
def fuc():
    print(‘这个函数被调用!‘)

然后我们在command模块中执行下列代码:

import command      #这个py文件被调用!

我们如果在这段程序中反复执行多次这一段代码,这一个文件结果也只会被导入一次

import command      #这个py文件被调用!
import command
import command
import command
import command
import command

调用command模块中的方法fuc()

import command      #这个py文件被调用!
command.fuc()       #这个函数被调用!

当我们写这样一个代码的时候,计算机会先去找到这一个模块,找到之后再创建这个模块的命名空间,把文件夹的名字都放在命名空间里

如果我们在temp_py.py中也写一个fuc()函数:

import command      #这个py文件被调用!
def fuc():
    print(‘hello __fuc__‘)
command.fuc()       #这个函数被调用!

那么实际上它调用的还是command模块内的函数

如果在command模块内和temp_py.py中加入相同的变量:

command模块代码:

print(‘这个py文件被调用!‘)
number = 150
def fuc():
    print(‘这个函数被调用!‘,number)    #number获取到一个内存地址再从中拿到值

temp_py.py执行代码:

import command      #这个py文件被调用!
number = 300
print(command.number)   #150
print(number)           #300

当你要导入一个模块的时候,计算机会先到sys.modules()中去找你导入的这个模块是否在这个里面

import command      #这个py文件被调用!
import sys
print(sys.modules.keys())   #dict_keys([‘sys‘, ‘builtins‘, ‘_frozen_importlib‘, ‘_imp‘, ‘_thread‘, ‘_warnings‘, ‘_weakref‘, ‘zipimport‘, ‘_frozen_importlib_external‘, ‘_io‘, ‘marshal‘, ‘nt‘, ‘winreg‘, ‘encodings‘, ‘codecs‘, ‘_codecs‘, ‘encodings.aliases‘, ‘encodings.utf_8‘, ‘_signal‘, ‘__main__‘, ‘encodings.latin_1‘, ‘io‘, ‘abc‘, ‘_abc‘, ‘site‘, ‘os‘, ‘stat‘, ‘_stat‘, ‘ntpath‘, ‘genericpath‘, ‘os.path‘, ‘_collections_abc‘, ‘_sitebuiltins‘, ‘_bootlocale‘, ‘_locale‘, ‘encodings.gbk‘, ‘_codecs_cn‘, ‘_multibytecodec‘, ‘encodings.cp437‘, ‘command‘])

在最后我们可以看到之前的command模块有被成功导入

如果我们要找的这个模块在sys.modules()中找不到,那么就依据sys.path()路径去找到模块,若找到就创建这个模块的命名空间再把文件名陈放在内存里并执行,若找不到那么就会报错

给模块取别名:

语法:import ‘模块名‘ as ‘别名‘

import command as comd  #这个py文件被调用!
comd.fuc()              #这个函数被调用! 150
import time as t
print(t.time())         #1567359703.0011516
print(time.time())      #NameError: name ‘time‘ is not defined  

假设有两个模块xmlreader.py和csvreader.py,它们都定义了函数read_data(filename):用来从文件中读取一些数据,但采用不同的输入格式.可以编写代码来选择性地挑选读取模块,例如

if file_format == ‘xml‘:
     import xmlreader as reader
elif file_format == ‘csv‘:
     import csvreader as reader
data=reader.read_date(filename)

一行获取模块:

import sys,os,pickle,shelve,json

不推荐这样写后期不好维护,建议一行一行写在开头,能够让人一目了然

模块的写法顺序:

内置模块(re、time等)、扩展的模块(django等)、自定义的模块

from...import...的用法

from time import time
print(time())   #1567360779.0056956
from sys import version
print(version)  #3.7.1 (default, Dec 10 2018, 22:54:23) [MSC v.1915 64 bit (AMD64)]

在pycharm中,如果是自定义模块要用from...import...调用方法有红色的波浪线报错是因为pycharm主观认为从根目录去找这个模块,结果却找不到,但其实这个模块可以从sys.path()中找到

若在temp_py.py定义一个和fuc同名的函数,让我们来看看执行结果:

from command import fuc     #这个py文件被调用!
def fuc():
    print(‘!!!!!!!‘)        #!!!!!!!
fuc()

也支持获取多个方法:

from 模块名 import *

它能把模块内的名字都调用

缺点:不安全怕重名

from time import *
sleep = 10
sleep(0.1)      #TypeError: ‘int‘ object is not callable

__all__

只和from 模块名 import *有关

如果有被__all__约束住那么才能够执行

原文地址:https://www.cnblogs.com/Fantac/p/11444478.html

时间: 2024-08-11 03:02:21

Python学习日记(十九) 模块导入的相关文章

Python学习笔记十_模块、第三方模块安装、模块导入

一.模块.包 1.模块 模块实质上就是一个python文件.它是用来组织代码的,意思就是把python代码写到里面,文件名就是模块的名称,test.py test就是模块的名称 2.包 包,package本质就是一个文件夹,和文件夹不一样的是它有一个__init__.py文件.包是从逻辑上来组织模块的,也就是说它是用来存放模块的,如果想到如其他目录下的模块,那么这个目录必须是一个包才可以导入. 二.模块分类 1.标准模块.标准包 python自带的这些模块,直接import就能用的 import

Python学习日记(十四) 正则表达式和re模块

正则表达式: 它是字符串的一种匹配模式,用来处理字符串,可以极大地减轻处理一些复杂字符串的代码量 字符组:它是在同一位置可能出现的各种字符组成了一个字符组,用[]表示,但是它的结果只能是一个数字或者一个大写字母或小写字母等 下面测试以该网站为例http://tool.chinaz.com/regex/ #正则表达式 匹配字符串 匹配结果 #[0-9] 9 9 [0-9]的写法就相当于在用[0123456789] #[0123456789] 0 0 #[a-z] 1 None 这里只匹配小写字符a

python学习笔记-day6-【 sys模块, 导入模块的方法】

记录下 sys模块的用法,看着不难,但容易忘记的东西. 一.sys模块 1.常见的使用方法 2.如何导入其他模块的python文件 3.导入同目录下的python模块 4.导入方式二 5.把所需导入的模块放到python环境变量中任何一个目录都可以,但是这样做太麻烦 6.把导入模块的目录加入到Python的环境变量中去,即可 二.sys.argv 用法 1.sys.argv意义 2.用来判断从命令行执行的参数的合法性,示例代码 原文地址:https://www.cnblogs.com/shmil

Python学习(十) —— 模块和包

一.模块 一个模块就是一个包含了python定义和声名的文件,文件名就是模块名加上.py后缀. import加载的模块分为四个通用类别: 1.使用python编写的代码(.py文件) 2.已被编译为共享库或DLL的C或C++扩展 3.包好一组模块的包 4.使用C编写并链接到python解释器的内置模块

Python学习日记(十七) os模块和sys模块

os模块 1.os.getcwd() 获取当前工作目录,即当前python脚本工作的目录路径 import os print(os.getcwd()) #C:\Users\Administrator\PycharmProjects\PYL\temp_file 2.os.chdir() 改变当前脚本工作目录;相当于shell下cd import os print(os.getcwd()) #C:\Users\Administrator\PycharmProjects\PYL\temp_file o

python 学习笔记十九 django项目bbs论坛

跨站请求伪造保护 CSRF 中间件和模板标签提供对跨站请求伪造简单易用的防护.某些恶意网站上包含链接.表单按钮或者JavaScript ,它们会利用登录过的用户在浏览器中的认证信息试图在你的网站上完成某些操作,这就是跨站攻击.还有另外一种相关的攻击叫做“登录CSRF”,攻击站点触发用户浏览器用其它人的认证信息登录到其它站点. 全局: 中间件 django.middleware.csrf.CsrfViewMiddleware 局部: @csrf_protect,为当前函数强制设置防跨站请求伪造功能

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据

Python进阶(三十九)-数据可视化の使用matplotlib进行绘图分析数据 ??matplotlib 是python最著名的绘图库,它提供了一整套和matlab相似的命令API,十分适合交互式地进行制图.而且也可以方便地将它作为绘图控件,嵌入GUI应用程序中. ??它的文档相当完备,并且 Gallery页面 中有上百幅缩略图,打开之后都有源程序.因此如果你需要绘制某种类型的图,只需要在这个页面中浏览/复制/粘贴一下,基本上都能搞定. ??在Linux下比较著名的数据图工具还有gnuplot

Python进阶(四十九)-初识Flask Blueprint

Python进阶(四十九)-初识Flask Blueprint 前言   在进行Python Web开发时选择Flask框架.项目模块划分阶段,使用Blueprint(这里暂且称之为“蓝本”).Blueprint通过把实现不同功能的module分开,从而把一个大的application分割成各自实现不同功能的module.在一个Blueprint中可以调用另一个blueprint的view function, 但要加相应的blueprint名.   Blueprint还有其他好处,其本质上来说就

Python学习系列(九)(IO与异常处理)

Python学习系列(九)(IO与异常处理) Python学习系列(八)( 面向对象基础) 一,存储器 1,Python提供一个标准的模块,称为pickle,使用它既可以在一个文件中存储任何Python对象,又可以把它完整的取出来,这被称为持久的存储对象.类似的,还有一个功能与之相同的模块—cPickle,用c语言编写的,速度比pickle快1000倍. 2,示例: 1 import cPickle as p 2 shoplistfile='shoplist.data' 3 shoplist=[