环境小硕的转行之路-25-模块的导入与管理

模块的一些基本概念

什么是模块? ->别人已经写好的一组功能的集合。
别人写好的函数,变量,方法放在一个文件里. (这个文件可以被我们直接使用)这个文件就是模块

import os,re,sys,random#alt点进去可以看到都是py文件但也有dll文件(c语言代码编译成的py代码).所以直接写py文件即可。

如何自己写一个模块?->创建py文件,自己写一个名字,符合变量名命名规则+汉字的文件名,这个名字就是模块名了。

本文中my_module中的代码

#__all__ = [‘name‘]
print(‘123456‘)
name = ‘negu‘
def read():
    print(‘in read in funcread‘)
def read1():
    print(‘in read in funcread‘,name)

  

模块的导入

import my_modulemy module下面有波浪线的原因,pycharm认为你模块导入不进来,因为pycharm只识别项目下面的模块。
#在导入模块的过程中发生了什么?
#导入一个模块就是执行一个模块.
#怎么使用my_module模块中的变量
name = ‘negu‘
print(name)#negu 找自己的内存空间
print(my_module.name)#negu 找my_module的内存空间
my_module.read()#成功执行
#模块和当前文件在不同的命名空间中
#模块在导入的过程中发生了什么?
    #找到这个模块
    #判断这个模块是否已经被导入过
    #如果没有被导入过
        #创建一个属于这个模块的命名空间
        #然后让模块的名字指向这个空间再执行这个模块的代码
        #模块是否可以被重复导入?不可以,不会被执行.
#怎么判断这个模块已经被导入过了?
import sys
print(‘my_module‘ in sys.modules)#用这个判断
my_module.read1()#显示negu 用自己同级命名空间下的name

#导入多个模块
#给模块起别名,使用这个模块都使用别名去引用变量了.
import my_module as m
m.read()
my_module.read()#报错,第一步让去找my_module的空间,让m指向这个空间.
def squence(dic,modules = ‘json‘):#序列化方案的选择
    if modules == ‘json‘:
        import json as aaa
    elif modules == ‘pickle‘
        import pickle as aaa
        return  aaa.dumps(dic)#导入模块做相同的事的时候用于简化代码
#导入多个模块
import os as o,time as t#规范建议,模块应该一个个的导入:自定义模块,第三方模块,内置模块,而不是在一行导入多个.
#导入顺序:内置,第三方,自定义模块#这样做的原因是为了看我代码的人,可以分辨出自定义模块.

  

from import的用法

# 如何使用from import?
# 需要从哪个文件使用某个名字,就把那个名字导入进来.
from my_module import name #import 了谁只能用谁.
from my_module import read1
from my_module import read
 from import 发生了什么?是否执行了整个被导入的文件呢?
from import 还是会执行模块主程序的程序
read1()#打印了negu ,read1里面有name 外面就不能用
read()

#当前文件命名空间和模块名命名空间的问题
from my_module import read
from my_module import read1
def read1():#到此处主程序的read1断开了my_module命名空间里的read1的链接.
    print(‘main read1‘)
read1()#执行主程序的read1,主程序的read1覆盖了模块的read1
from my_module import read
read()

‘‘‘
from import 导入的过程中发生了什么事?
    找到要被导入的模块
    判断这个模块是否被导入过
    如果这个模块没被导入过
        创建一个属于这个模块的命名空间,然后执行这个文件.
    找到你要导入的变量,给你要导入的变量创建一个引用指向要导入的变量.(在自己的空间里创建)
‘‘‘

# 如何导入多个名字?
 from my_module import read as r,read1 as r1
 r()
 r1()
 # from my_module import *#在导入过程中内存的引用变化
 from my_module import *#代表把所有东西都导入到主空间进来了,直接用即可。

#* 和__all__的关系
from my_module import *
print(name)
read()
read1()#报错,*会参考__all__变量,__all__只有name,所以只导入了name.__all__只能约束*

  

原文地址:https://www.cnblogs.com/negu/p/11739870.html

时间: 2024-10-10 00:28:01

环境小硕的转行之路-25-模块的导入与管理的相关文章

环境小硕的转行之路-12-序列化和反序列化、模块的引用

利用json和pickle模块序列化代码 序列化定义:把内存的数据对象变成字符串了 序列化 def sayhi(name): print('hello',name) info = { 'name':'negu', 'age':22 # 'func':sayhi() } '''法1''' f = open('test.text','w') f.write(str(info)) f.close() '''法2''' import json#只能处理简单的数据类型:str.list.dict.所以函数

环境小硕的转行之路-23-异常处理

异常处理 常见的变量代称 1.NameError 变量错误2.IndexError 列表index错误3.KeyError 字典的key不存在4.EOFError iteration到末端5.FileNotFoundError6.8ModuleNotFoundError*7.ValueError 值的类型不匹配以下的应该在写代码的时候就规避掉8.SyntaxError 语法错误9.NameError 变量错误 需要报错的情景以及报错的常见情况 #什么时候最容易出异常:有用户参与的时候,有外界数据

环境小硕的转化之路-17-内置函数拾遗

前言 之前写过内置函数的博文,但觉得这个老师讲的更详细一点,分类也更清楚一点. 将一些常用的内置函数po出来. 内部储存函数相关 lst = [1,2,3] #id(obj) print(id(lst))#打印id #hash(obj) print(hash(lst))#目的是为了存储,计算之后是一个数字.hash值尽量不要重复(某些特定环境下会重复), 是一种另类的加密.所以hash值往往很大.字典就是用hash法进行存储数据的. #打个比方 dict = {'jay':'周董','jj':'

开坑,Unix环境高级编程,转行之路又得缓缓了

不要问我基础,我用了近6年的Linux系统,最早的版本可以追溯到Ubuntu 8.04,常用的命令 VIM基本上是没压力,遇到问题google 配置环境变量 网络环境也不在话下, C语法基本熟练,过去一年,我自学过 数据结构 算法 CSAPP等课程,开坑Unix环境编程压力不大, 开坑的原因主要是为了了解系统底层编程,更接系统实现的原理,预计时间2-3个月,Unix网络编程留明年开坑算了, 估计Spring MVC等web后端框架又得推一推了,说实话,目前我真的不急着去找工作,我缺乏实际的工程经

python之路---25 模块和包

一.模块 1.导入方式 自己创建的模块名称 切不可和 内置模块的一样 ①  import  模块 ②  import 模块 as  名      设置在此空间的名称 ③  from 模块 import  功能 ④  from  模块  import  *          引入所有的功能 __all__=[a,b,c]       调用时只调用[  ]中的功能 ⑤ 一次引入多个模块的顺序 2.导入模块的过程 3.if __name__ == '__main__': 测试模块时使用的语句块 调用此

一名Android开发者的微信小程序填坑之路(2)

前言 上一篇是九月二十七日写的,而这一篇我动笔的时间是十月十日(特殊的日子),中间相隔十三天--当然是因为国庆节.说老实话,这十三天里面我都没有碰和小程序有关的东西--毕竟学习小程序的开发也只是起于兴趣,而平时的工作并不会涉及与其相关的东西--但是在这十三天里,我能明显的感受到小程序热正在逐渐的消退,或者说大家正在逐渐以一种较为平和的姿态接受它的存在,其实这是一件好事.期待公测的到来. 接下来我就直接进入正题了,另外,文末我想和大家分享一下我的国庆节. PS:这篇文章是接着上一篇文章 一名And

firefly的环境搭建(2013年9月25日最新,win下最详图文)

原地址:http://bbs.gameres.com/forum.php?mod=viewthread&tid=224026 一.安装PythonFirefly是采用Python编写的高性能.分布式游戏服务器框架,所以使用Firefly的前提是必须安装Python.Python在Linux.windows等操作系统下都有相应的版本,不管在什么操作系统下,它都能够正常工作.除非使用平台相关功能,或特定平台的程序库,否则可以跨平台使用.1.windows下安装Python1)下载对应系统的pytho

Hybrid小程序混合开发之路 - 数据交互

HTML+CSS是历史悠久.超高自由度.控制精准.表现能力极强.编码简单.学习门槛超低.真跨平台的一种UI界面开发方式. 本文介绍的是微信小程序和H5混合开发的一种数据交互方式. 很多应用在原生界面中混杂着HTML界面 记得xp时代的QQ,有些界面偶尔会弹出熟悉的js错误对话框,还能右键弹出熟悉的IE6的右键菜单,伪装的挺好,差点没认出来,现在的QQ就不知道了. 美团.淘宝这些拥有几乎无限界面的手机App,顶部进度条一亮,这是一个H5 没谁了! Electron!好嗨哟~ 数据交互 使用了HTM

C#开发微信门户及应用(25)-微信企业号的客户端管理功能

我们知道,微信公众号和企业号都提供了一个官方的Web后台,方便我们对微信账号的配置,以及相关数据的管理功能,对于微信企业号来说,有通讯录中的组织架构管理.标签管理.人员管理.以及消息的发送等功能,其中微信企业号的组织架构和标签可以添加相应的人员,消息发送可以包含文本.图片.语音.视频.图文.文件等内容.对于企业号来说,官方的接口几乎可以无限的发送消息,因此构建一个管理后台,管理企业号的人员,以及用来给企业成员发送消息就是一个很好的功能亮点,有时候可以提高我们企业内部的消息通讯效率和日常工作管理效