Python--模块化

Python 模块化 详解 Python 模块化 详解1、模块化介绍2、导入语句 12.1 示例2.2 总结3、导入语句 23.1 示例3.2 总结4、自定义模块4.1自定义模块命名规范5、模块搜索顺序6、模块的重复导入7、模块运行8、`if __name__ == '__main__'` 用途9、模块的属性10、其它总结及注意事项 1、模块化介绍 一般来说,编程语言中,库 包 模块 是同一概念,是代码组织方式 模块 module:指的是Python的源代码文件 包 package:指的是模块组织再一起的和包名同名的目录及其相关文件 阅读详情

概念

  • 一般来说,变成语言中,库、包、模块是同一种概念,是代码组织方式
  • Python中只有一种模块对象类型,但是为了模块化组织模块的便利,提供了“包”的概念

模块module,指的是Python的源代码文件
包package,指的是模块组织在一起的包名同名的目录及其相关文件

导入语句

语句含义
import模块1[,模块2,…]完全导入
import…as…模块别别名

import语句

  1. 找到指定的模块,加载和初始化它,生成模块对象。找不到,抛出异常
  2. 在import所在的作用域的局部命名空间中,增加名称和上一步创建的对象关联
impoer functools #导入模块
print(die()) # [..., 'functools']
print(functools) # <module 'functools' from ''path/to/functools.py'>
print(functools.wraps) # <function wraps at 0x0000018ECFA1AF28>
import os.path # 导入os.path,os加入当前名词空间
print(dir()) #[..., 'os']
print(os) # # <module 'os' from ''path/to/os.py'>
print(os.path) # 完全限定名词访问path
import os.path as osp # 导入os.path并赋给osp
print(dir()) # [..., 'osp']
print(osp) # <mdule 'ntpath' form 'path/to/path.py'>
def testimport():
	import os.path # 局部
	print(dir())

testimport() # ['os']
print(globals().keys()) # 没有‘os’,但有'testimport'
# dict_keys(['__name__', '__doc__', '__package__',\
'__loader__', '__spec__', '__annotations__', \
'__builtins__', '__file__', '__cached__', 'testimport'])
import os.stat # 不可导入
# ModuleNotFoundError: No module named 'os.stat'; 'os' is not a package

总结

  • 导入顶级模块,其名词会加入到本地名词空间中,并绑定到其模块对象
  • 导入非顶级模块,值将顶级模块吗形参加入到本地名词空间中。导入的模块必须使用完全限定名称来访问
  • 如果使用了as,as后的名词直接绑定到导入的模块对象,并将该名词加入到本地名词空间中

导入语句

语句含义
from…import…含义
from…import…as…别名

from语句

from pathlib import Path, PosixPath # 在当前名词空间导入该模块指定的成员
print(dir()) # [..., 'Path', 'PosixPath']
from pathlib import * # 在当前名词空间导入该模块所有公共成员(非下划线开头成员)或指定成员
print(dir()) # [...,'Path', 'PosixPath', 'PurePath', 'PurePosixPath', 'PureWindowsPath', 'WindowsPath']
from functools import wraps as wr,partial # 别名
print(dir)) # [..., 'wr', 'partial]
from os.path import exists

if exists('c://'):
	print('Found') # Found
else:
	print('Not Found')

print(dir()) # [..., 'exists']
print(exists) # <function exists at 0x000001C57FF9AD08>

4中方式获得同一个对象exists

import os

print(os.path.exists)
print(exists)
print(os.path.__dict__['exists']) # 字符串
print(getattr(os.path, 'exists')) # 字符串
# 打印结果都为
<function exists at 0x0000022CC806AD08>

总结

  • 找到from子句中指定的模块,加载并初始化它(注意不是导入)
  • 对于import子句后的名词
    1.先查from子句导入的模块是否具有该名词的属性
    2.如果不是,则尝试导入该名词的子模块
    3.还没有找到,则抛出ImportError异常
    4.这个名称保存到本地名词空间中,如果有as子句,则使用as子句后的名称
from pathlib import Path # 导入类Path
print(Path, id(Path)) # <class 'pathlib.Path'> 2089961619096

import pathlib as p1 # 导入模块使用别名
print(dir()) # [..., 'Path','p1']
print(p1) # <module 'pathlib' from 'path/to/pathlib.py'>
print(p1.Path, id(p1.Path)) # <class 'pathlib.Path'> 2089961619096

可以看出,导入的名词Path和p1.Path是统一个对象

自定义模块

自定义模块:.py文件就是一个模块

# t1.py文件
print('This is t1 module')

class A:
    def showmodule(self):
        print(1, self.__module__, self)
        print(2, self.__dict__)
        print(3, self.__class__.__dict__)
        print(4, self.__class__.__name__)

a = A()
a.showmodule()

# t2.py文件
import t1

a = t1.A()
a.showmodule()

# t3.py文件
from t1 import A as cls

a = cls()
a.showmodule()

自定义模块命名规范

  1. 模块名就是文件名
  2. 模块名必须符合标识符的要求,是非数字开头的字母、数字和下划线的组合。
  3. test-module.py这样的文件名不能作为模块名,也不要使用中文
  4. 不要使用系统模块名来命名,避免冲突
  5. 通常模块名为全小写,下划线来分割单词

模块搜索顺序

使用sys.path查看搜索顺序

import sys

# print(*sys.path, sep='\n')
for p in sys.path:
    print(p) 

显示结果为,Python模块的路径搜索顺序

  • 当加载一个模块的时候,需要从这些搜索路径中从前到后依次查找,并不搜索这些目录的子目录
  • 搜索到模块就加载,搜索不到就抛异常
  • 路径也可以为字典、zip文件、egg文件名
  • .egg文件,由setuptools库创建的包,第三方库常用的格式。添加了元数据(版本号、依赖项等)信息的zip文件
  • 路径顺序为
    程序主目录,程序运行的主程序脚本所在的目录
    PYTHONPATH目录,环境变量PYTHONPATH设置的目录也是搜索模块的路径
    标准库目录,Python自带的模块所在目录

sys.path虽可以被修改,增加新的目录,但不建议修改

模块的重复导入

# t1.py文件
print('This is t1 module')

class A:
    def showmodule(self):
        print(1, self.__module__, self)
        print(2, self.__dict__)
        print(3, self.__class__.__dict__)
        print(4, self.__class__.__name__)

a = A()
a.showmodule()

# t2.py文件
import t1

print('local module')
import t1
import t1

# t2.py文件中执行结果
This is t1 module
1 t1 <t1.A object at 0x0000022070CD9668>
2 {}
3 {'__module__': 't1', 'showmodule': <function A.showmodule at 0x0000022070CD5268>, '__dict__': <attribute '__dict__' of 'A' objects>, '__weakref__': <attribute '__weakref__' of 'A' objects>, '__doc__': None}
4 A
local module

从执行结果来看,不会产生重复导入的现象。
所有加载的模块都会记录在sys.modules中,sys.modules是储存已经加载过的所有模块的的字典
打印sys.modules可以看到os、os.path都已经加载了

模块运行

  • __name__,每个模块都会定义一个__name__特殊变量来储存当前模块的名词,如果不指定,则默认为源代码文件名,如果是包则有限定名。
  • 解释器初始化的时候,会初始化sys.modules字典(保存已加载的模块),加载builtins(全局函数、常量)模块、__main__模块、sys模块,以及初始化模块搜索路径sys.path
  • Python是脚本语言,任何一个脚本都可以直接执行,也可以作为模块被导入
  • 当从标准输入(命令行方式敲代码)、脚本($ python t1.py) 或交互式读取的时候,会将模块的__name__设置为__main__,模块的顶层代码就在__main__这个作用域中执行。顶层代码:模块中缩进最外层的代码
  • 如果是import导入的,其__name__默认就是模块名
# t1.py
# 判断模块是否以程序的方式运行
if __name__ == '__main__':
    print('in __main__') # 程序的方式运行的代码
else:
    print('in imported module') # 模块导入的方式运行的代码

# 执行结果
in __main__

# t2.py
import t1

# 执行结果
in imported module

if __name__ == '__main__':用途

  1. 本模块的功能测试
    对于非主模块,测试本模块内的函数、类
  2. 避免主模块变更的副作用
    顶层代码,没有封装,主模块使用时没有问题。但是,一旦有了新的主模块,老的主模块成了被导入模块,由于原来代码没有封装,就会一并执行

模块的属性

属性含义
__file__字符串,源文件路径
__cached__字符串,编译后的字节码文件路径
__spec__显示模块的规范
__name__模块名
__package__当模块是包,同__name__;否则,可以设置为顶级模块的空字符串
print(__file__)
print(__name__)

# 执行结果
C:/Users/mayn/PycharmProjects/mypython/new/t3.py
__main__

包

  • 包,特殊的模块
  • Python模块支持目录

实验

  • 新建一个目录m
import m
print(m)
print(type(m))
print(dir(m)) # 没有__file__
print(m.__path__)

# 执行结果
<module 'm' (namespace)>
<class 'module'>
['__doc__', '__loader__', '__name__', '__package__', '__path__', '__spec__']
_NamespacePath(['C:\\Users\\mayn\\PycharmProjects\\mypython\\m'])
  • 一个目录文件没有__file__,但是有__path__
  • 上例中可以看出,可以导入目录m,目录也是文件,所以可以导入。
  • Python为了解决能在目录模块中写代码,建立了一个特殊文件__init__.py。

在这里插入图片描述
pycharm中,创建Directory和创建Pyhon pcakage不同,前者是创建普通的目录,后者是创建一个带有__init__.py文件的目录即包

子模块

  • 包目录下的py文件、子目录都是其子模块
m
|-- __init__.py
|-- m1.py
|-- m2
	|-- __init__.py
	|-- m21
		|-- __init__.py
	|-- m22.py

如上建立子模块和目录和文件,所有的py文件中都写入代码print(__name__)
在这里插入图片描述

# 注意观察已经加载的模块、当前名词空间的名词
# import m
# import m.m1
# from m import m1
# from m.m2 import m21
import m.m2.m21

print('-' * 30)
print(dir())

print('-' * 30)
import sys
# print(sys.modules.keys())
print(sorted(filter(lambda x:x.startswith('m'), sys.modules.keys())))

# 执行结果
m
m.m2
m.m2.m21
------------------------------
['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'm']
------------------------------
['m', 'm.m2', 'm.m2.m21', 'marshal']

删除__init__.py文件,并不影响导入,但不建议这样操作。

模块和包的总结

  • 包能够更好的组织模块,尤其是大的模块,其代码行数很多,可以把它拆分成很多子模块,便于使用某些功能就加载相应的子模块

  • 包目录中__init__.py是在包第一次导入的时候就会执行,内容可以为空,也可以是用于该包初始化工作的代码,不要删除(低版本不可删除__init__.py文件)

  • 导入子模块一定会加载父模块,但导入父模块一定不会导入子模块

  • 包目录之间只能使用.点号作为间隔符,表示模块及其子模块的层级关系

  • 模块也是封装,如同类、函数,不过它能够封装变量、类、函数

  • 模块就是命名空间,其内部的顶层标识符,都是它的属性,可以通过__dict__或dir(module)查看

  • 包也是模块,但模块不一定是包,包是特殊的模块,是一种阻止方式,它包含__path__属性

绝对导入、相对导入

绝对导入

在import语句或者from导入模块,模块名称最前面不是以.点开头的
绝对导入总是去模块搜索路径中找

相对导入

只在包内使用,且只能用在from语句中
使用.点号,表示当前目录内
使用..表示上一级目录
不要在顶层模块中使用相对导入

例:

  • a.b.c模块,a、b是目录,c是模块c.py,c的代码中,使用以下代码
from . import d # imports a.b.d
from .. import e # imports a.e
from .d import x # a.b.d.x
from ..e import x # a.e.x

使用下面结构的包,体会相对导入的使用

m
|-- __init__.py
|-- m1.py
|-- m2
	|-- __init__.py
	|-- m21
		|-- __init__.py
	|-- m22.py

注意

一旦一个模块中使用相对导入,就i不可以作为主模块运行了

访问控制

下划线开头的模块名

_或者__开头的模块都可以导入,因为他们都是合法的标识符,就可以用作模块名
创建文件名为_xyz.py或者__xyz.py测试

模块内的标识符

# xyz.py
print(__name__)
A = 5
_B = 6
__C = 7
__my__ = 8

# abc.py
import xyz

import sys
print(sorted(sys.modules.keys())) # [..., 'xyz']
print(dir()) # [..., 'xyz']

print(xyz.A, xyz._B, xyz.__C, xyz.__my__) # 5 6 7 8 

普通变量、保护变量、私有变量、特殊变量,都没有被隐藏,也就是说模块内没有私有的变量,在模块中定义不做特殊处理

from xyz import A, _B as B, __my__, __C as C

import sys
print(sorted(sys.modules.keys()))
print(dir())

print(A, B, C, __my__)

使用from语句依然可以访问所有变量

from … import * 和__all__

使用from … import * 导入

# xyz.py
print(__name__)
A = 5
_B = 6
__C = 7
__my__ = 8

# abc.py
from xyz import *

import sys
print(sorted(sys.modules.keys()))
print(dir()) # [..., 'A']
print(locals()['A']) # 5

A = 55
print(locals()['A']) # 55

结果只导入了A,下划线开偷的都没有导入

使用__all__

  • __all__是一个列表,元素是字符串,每一个元素都是一个模块内的变量名
# xyz.py
__all__ = ["X", "Y"]

print(__name__)
A = 5
_B = 6
__C = 7

__my__ = 8

X = 10
Y = 20

# abc.py
from xyz import *

import sys
print(sorted(sys.modules.keys()))
print(dir()) # [...,'X', 'Y']

print(locals()['X']) # 10
  • 修改__all__列表,加入下划线开头变量
# xyz.py
__all__ = ["X", "Y", "_B", "__C"]

print(__name__)
A = 5
_B = 6
__C = 7

__my__ = 8

X = 10
Y = 20

# abc.py
from xyz import *

import sys
print(sorted(sys.modules.keys()))
print(dir()) # [..., 'X', 'Y', '_B', '__C']

print(locals()['X']) # 10
print(locals()['Y']) # 20
print(locals()['_B']) # 6
print(locals()['__C']) # 7

可以看到使用from xyz import * 导入__all__列表中的名称

包和子模块

m 
|-- __init__.py
|-- m1.py
# __init__.py
print(__name__)
x = 1

# m1.py中
print(__name__)
y = 5

test.py如何访问到m1.py中的变量y

  • 访问到m.m1变量y的几种实现:
# 方法1,直接导入m1模块
import m.m1
print(m.m1.y)

# 方法2,直接导入m.m1的属性y
from m.m1 import y
print(y)

# 方法3, from m import *
# print(dir())
# 该方法导入后,无法看到子模块m1,无法访问y
# 在__init__.py增加__all_- = ['X','m1'],使用__all__提供导出的名称
from m import *
print(m1.y)

# 方法4,不适用__all__
# 在__init__.py增加from . import m1
from m import *
print(m1.y)

__init__.py中有什么变量,则使用from m inport *加载什么变量,这依然符合模块的访问控制

# __init__.py文件
print(__name__)
x = 1

from .m1 import y as _z
print(dir())

总结

  • 使用from xyz import *导入
    1.如果模块没有__all__,from xyz import *只导入非下划线开头的该模块的变量。如果是包,子模块也不会导入,除非在__all__中设置,或__init__.py中导入它们
    2.如果模块有__all__,from xyz import *只导入__all__列表中指定的名称,哪怕这个名词是下划线开头的,或者是子模块
    3.from xyz import *方式导入,使用简单,但是其副作用是导入大量不需要使用的变量,甚至有可能造成名词的冲突。而__all__可以控制被导入模块在这种导入方式下能够提供的变量名词,就是为了复制from xyz import *导入过多的模块变量,从而避免冲突。因此,编写模块时,应该尽量加入__all__
  • from module import name1,name2导入
    这种方式打导入是明确的,哪怕是导入子模块,或者导入下划线开头的名称,可以有控制的导入名称和其对应的对象

模块变量的修改

# xyz.py
print(__name__)
X = 10

# test2.py
import xyz

print(xyz.X)

# test.py
import xyz

print(xyz.X)
xyz.X = 50

import test2

模块对象是同一个,因此模块的变量也是同一个,对模块变量的修改,会影响所有使用者

  • 建议不要修改模块的变量
新手避坑指南:用COMSOL Multiphysics仿真气体放电(汤逊vs.流注) 本文详细介绍了使用COMSOL Multiphysics仿真气体放电的实战指南,涵盖汤逊理论和流注模型的实现方法。通过对比两种放电模型的关键参数和物理场配置,帮助新手避免常见错误,准确预测气体击穿过程。文章还提供了工程应用案例,如高压绝缘子设计优化,展示了仿真技术在电力设备绝缘设计中的实际价值。 阅读详情

相关推荐

共封装光学(CPO):下一代互联革命

Nvidia:产品:Quantum-X Q3450(115.2T,144×800G,2025H2上市)、Spectrum 6800(409.6T,512×800G,2026H2上市);技术路线:TSMC COUPE封装、MRM调制器、光栅耦合、外部激光源(Lumentum/Ayar Labs供应);战略定位:以横向扩展CPO验证供应链,最终聚焦纵向扩展场景(Feynman架构)。

存储随笔 4965

【Python】13.模块

强大的标准库奠定了python 发展的基石,丰富和不断扩展的第三方库是python 壮大的保证。我们可以看到发布的第三方库达到了十多万种,众多的开发者为Python 贡献了自己的力量。

LouHerGetUp的博客 476

Python爬虫实战:逆向解析央视频加密参数(附完整代码)

本文详细解析了央视频加密体系的技术实现,通过Python逆向工程实战演示如何解密动态密钥、AES加密和自定义哈希算法等核心组件。文章提供完整代码示例,涵盖GUID生成、参数构造和异步请求处理,帮助开发者掌握现代视频平台的反爬机制破解方法。

weixin_42532473的博客 1130

Python高级之模块化(Python系列22)

当一个文件导入一个模块,并在当前文件运行时,先需要执行第一行的导入,也就是说需要将导入模块从头到尾执行完才返回当前文件继续执行。结论:当一个模块被导入时 ,该模块的模块变量__name__为该模块的模块名。2.标准库模块 下载python时自带的模块,需要导入如 random , time等。4.自己编写的模块 自己写的,需要导入使用,如上面代码中的exercise02模块。前言:为什么要使用模块化,模块化有什么好处,什么时候使用模块化,我们一起来看看吧。2.当在一个模块中测试该模块功能时可以使用。

a12345dfsdf的博客 612

避坑指南:Win10安装Docker Desktop时Hyper-V报错的7种解决方案(2024最新版)

本文提供了2024年最新、最全面的Windows 10系统下Docker Desktop安装时Hyper-V报错的解决方案指南。文章深入剖析了Hyper-V与Docker的共生关系,并系统性地给出了从BIOS/UEFI设置、Windows功能启用、bcdedit命令修复到处理多虚拟化环境共存等7种核心解决方案,帮助开发者彻底解决安装困局,顺利部署容器化开发环境。

weixin_28840143的博客 529

2025ICPC南昌邀请赛题解

2025ICPC南昌邀请赛由XDU和WHU联合出题的ICPC南昌邀请赛,榜单显示8题金、6题银、5题铜。

weixin_50089904的博客 1958

Python模块化:组织中大型项目的利器

本篇文章介绍 Python 当中的模块化,包括什么是模块化、使用模块化的好处以及如何使用模块化。此外,还介绍了 Python 解释器在执行 `import` 语句时的流程。

聚焦C++/Python编程语言、大模型应用开发 825

Windows server 2012R2安装Oracle11g

打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Database Configuration Assistant。打开 开始——所有程序——Oracle-OraDb11g_home1——配置和移植工具——Net Configuration Assistant。首先打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。打开Oracle的安装位置找到下面的位置找到tnsnames.ora文件右键编辑。选择仅安装数据库软件。

qq_74770105的博客 3596

python的模块化

模块化是工程的一个重要方面,如果一门语言不具备模块化的特性,那么自然是不能成为工程语言的候选者了。 为了支持这个功能,Python 有种方法可以把你定义的内容放到一个文件中,然后在脚本或者交互方式中使用。这种文件称为模块;模块中的定义可以导入到其它模块或主模块中。模块是包含 Python 定义和声明的文件。文件名就是模块名加上.py后缀。在模块里面,模块的名字(是一个字符串)可以由全局...

lengye7的博客 6034

Trae 在代码审查场景的 3 大差异化能力:对比 Claude Code、Cursor 与 Codex 实测

揭示代码审查的核心矛盾是上下文断层而非找 Bug,介绍 Trae 通过跨文件符号追踪、意图-实现对齐校验、增量变更影响图谱生成三件事实现上下文校准,并对比其与 Claude Code、Cursor、Codex 在多模块 Java 项目中的实际审查差异

weixin_42525482的博客 152

【用unity实现100个游戏之19】制作一个3D传送门游戏,实现类似鬼打墙,迷宫,镜子,任意门效果(附项目源码)

本文介绍了Unity中实现传送门效果的完整流程。通过第一人称角色控制器实现移动,使用PortalView脚本和自定义Unlit Shader渲染门内场景,巧妙利用相机位置和旋转同步实现动态视角。重点解决了近裁剪面问题,确保远距离渲染正确性。最后通过PortalTeleporter脚本实现传送功能,检测碰撞并计算相对位置进行瞬移。该方法无需复杂插件,代码简洁高效,适用于各类3D场景中的传送门实现。

向宇的博客,专注php/web全栈 unity游戏开发,欢迎大家评论纠错 1万+

前端的 Python 入门指南(九):模块化的实现、使用及注意事项对比

JavaScript 更侧重于静态分析和编译期优化,而 Python 则是动态加载和执行的方式。在 JavaScript 中,ES6 模块化通过import和export来处理依赖关系,使用起来更加简洁和灵活;而 Python 的模块化则通过import语句和包的组织方式来实现代码的结构化。需要特别注意的事项包括循环导入、模块缓存以及在开发过程中可能遇到的路径问题。在 Python 中,动态导入可能会带来一些复杂性,需要特别小心。

分享有趣的、贴近生活的CS知识 1396

第一节:初识n8n与下一代工作流自动化

本章介绍了n8n的Fair-code理念与节点式架构,对比了其与Zapier/Make的核心差异,并引导读者在n8n Cloud上完成首次界面导览,建立了工作流自动化的宏观认知。

easeyoo的专栏 106

Python的模块化

简单模块化 说到最简单的模块化方式,你可以把函数、类、常量拆分到不同的文件,把它们放在同一个文件夹,然后使用 from your_file import function_name, class_name 的方式调用。之后,这些函数和类就可以在文件内直接使用了。 # utils.py def get_sum(a, b): return a + b # class_utils.py class Encoder(object): def encode(self, s):

scu-liu的博客 474

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

Python模块化编程

想象你在搭乐高积木。如果所有零件都混在一起,找起来多费劲啊!模块化就是把代码像积木一样分门别类放好,需要哪块就拿哪块。模块化的三大好处代码复用:写好一个模块,可以在多个项目里反复使用便于维护:出了问题能快速定位到具体模块团队协作:不同人负责不同模块,互不干扰模块化不是Python的专利,但Python让它变得特别简单。记住:好的代码组织就像整理房间,虽然前期费点功夫,但后期效率提升不是一点半点。最后送大家一句话:“代码首先是写给人看的,其次才是给机器执行的。

陆小森_红齐飘飘的博客 586

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

Python之模块化开发

1.什么是模块化开发 模块化是代码的组成的一种方式,Python中的每一个文件就是模块; 在Python中,文件有三种方式进行组织:Python文件(也就是Python模块)、目录、包; 包和目录的区别:包内部多一个__init__.py文件,使得包能够被模块导入,而目录不能; 2.模块化开发的好处 模块化开发能够将不同的功能组装在一起,实现功能的累加,诸多功能组装在一起,最终形成项目; ...

qq_42992919的博客 1363

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

第二部分 Python提高—模块化编程

强大的标准库奠定了python发展的基石,丰富和不断扩展的第三方库是python壮大的保证。我们可以进入PyPI官网(https://pypi.org)可以看到发布的第三方库达到了十多万种,众多的开发者为Python 贡献了自己的力量。常用第三方库大汇总分类库名称说明环境管理P非常简单的交互式 python版本管理工具Pyenv简单的 Python 版本管理工具Vex可以在虚拟环境中执行命令创建独立 Python 环境的工具包管理pipPython 包和依赖关系管理工具。

weixin_44006060的博客 2355

Python之模块化

量变引起质变。 一个python文件就是一个模块。 模块多了,就有了‘包’。 python程序由模块组成。一个模块对应python源文件,一般后缀名是:.py。 模块由语句组成。运行python程序时,按照模块中语句的顺序依次执行。 语句时python程序的构造单元,用于创建对象、变量赋值、调用函数、控制语句等。 标准库模块 与函数类似,模块也分为标准库模块和用户自定义模块。 python标准...

why404 627

python模块化开发_(一)Python模块化编程简介

1 引言众所周知,模块化编程具备很多优点,尤其在复杂项目上体现更为明显。Python模块化编程有助于开发者统筹兼顾和分工协作,并提升代码灵活性和可维护性,是编程开发者不可或缺的一项重要工具。2 Python模块在平时Python编程中,我们所保存的以.py为后缀的代码文件(如hello.py),称为源文件(source file)。开始学习Python编程时,我们通常将项目所有代码放在一个源文件中...

weixin_31947509的博客 949

python函数模块化封装_python 模块化

广告关闭腾讯云11.11云上盛惠 ,精选热门产品助力上云,云服务器首年88元起,买的越多返的越多,最高返5000元!### 模块化编程> 模块化编程指把程序进行封装(函数封装,面向对象,文件。。。)####什么是函数? function -> 函数,功能>> 函数就是一个具有特定功能的代码块#### 函数的作用? 函数就是把代码进行封装,以提高代码的重用性,提高开发效率,并...

weixin_39977586的博客 828

python模块化编程_了解Python模块化编程思维

职说职语的Python学习笔记写到如今,已经涉及了变量、语句、对象、函数等,是否可以把这些进行封装实现某些场景下的可重用?模块化思维就是为解决这样的问题而诞生的。先呈上一张图:从图中我们可以至少看出:1. Python 程序由模块组成。一个模块对应 python 源文件,一般后缀名是:.py。2. 模块由语句组成。运行 Python 程序时,按照模块中语句的顺序依次执行。3. 语句是 Python...

weixin_39667041的博客 171

python是模块化编程吗_python模块化编程

模块化编程的基本概念(什么是模块化编程?)一个模块就是一个源文件(.py),一个有用的模块是一系列可复用函数和类的集合,模块化编程的本质就是使用模块来解决问题、提高代码复用率。模块的设计和实现(怎么构建一个合格的模块?)引入模块的程序被称为客户端程序,客户端程序要引用模块的函数和类、需要遵循的契约被称为应用程序接口(API Application Programming Interface),AP...

weixin_39582708的博客 836

Python的模块化编程

来源: https://www.bilibili.com/video/BV1jz411b7DH?t=331&p=29

福尔摩斯帅双的博客 479

Python模块化编程实践指南

模块化编程是将代码划分为多个独立的模块,每个模块负责完成特定的功能。通过模块化编程,可以将代码分解成更小的部分,使得代码结构清晰,易于维护和重用。Python模块化编程是一种重要的编程技术,通过将代码划分为多个独立的模块,可以提高代码的可维护性、可读性和可重用性。本文从模块的创建、导入、进阶技巧以及最佳实践等方面介绍了模块化编程的基本概念和实践方法。模块化编程的优势在于提高了代码的组织性、可维护性和可扩展性,特别适用于Web应用开发等项目。

一键难忘的博客 5419

python的编程方式模块化_python模块化编程的小练习

有关模块化编程的资料看到Clarmy写的模块化编程的文章(http://www.clarmy.net/2018/09/09/briefly-discuss-pythons-modular-programming/),很受启发。文中提到作者写python的三个阶段:(1)所有代码都堆叠在一起;(2)一个project创建一个文件,适当使用函数,但某些常用函数要从别的文件复制粘贴;(3)将常用函数封装...

weixin_31308407的博客 221

python里面的模块化功能

python里面的模块化功能 今天是学习python的第五天 1、明确项目需求 首先,明确我们的目标,要完成怎样的功能,将我们的项目拆解成不同的阶段,每个阶段提升难度,最终实现,环环相扣。 2、需求拆分,模块化功能 在编写一个复杂程序的之前,要先要理清楚思路,先从大的层面开始考虑,功能不断叠加,难度逐渐递升。 项目清晰地划好阶段后,就可以逐步去完成了,执行→遇到问题→解决问题→再次执行,以此循环。 3、模块化功能实现 自定义数值,手动计算 print('【人类舰队】\n生命值:100 \n攻击:50') #

cywyty的博客 305
上一篇: Python--实现类property装饰器
下一篇: Python -- 包管理--打包分发
鹿夏
博客等级 码龄8年 24粉丝 105原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值