前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >模块(十九章)

模块(十九章)

作者头像
天钧
发布2019-07-28 15:02:25
3840
发布2019-07-28 15:02:25
举报
文章被收录于专栏:渗透云笔记渗透云笔记

把定义存放在文件中,为一些脚本或者交互式的解释器实力使用,这个文件被称为模块

模块是一个包含所有你定义的函数和变量的文件,其后缀名是py模块可以被背的程序引用,以使用该模块中的函数等功能,这就是使用Python标准库的方法

可以说模块实际上就是程序

在前面咱们尝试过,如import OS

如下

代码语言:javascript
复制
>>> import os>>> type(os)<class 'module'>

import os 引用了os模块

同理,使用Python标准库的例子

代码语言:javascript
复制
>>> import sys>>> import using_sys.py命令行参数如下:
Python 路径为: ['', 'C:\\WINDOWS\\SYSTEM32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']

自定一个模块,代码内容如下

代码语言:javascript
复制
def name():  print("hello")

编辑好后。命名为modle.py,运行后

代码语言:javascript
复制
>>> import modle>>> modle.name()hello

想使用 Python 源文件,只需在另一个源文件里执行 import 语句,语法如下:

代码语言:javascript
复制
import module1[, module2[,... moduleN]

当解释器遇到import语句时,如果模块在当前的搜索路径就会被导入

搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块需讲命令放在脚本顶端

例子计算摄氏度与华氏度的相互转换

代码语言:javascript
复制
#pan.pydef c2f(cel):  fan = cel *1.8  + 32  return fandef f2c(fah):  cel = (fah - 32)/1.8  return cel

在写个文件

代码语言:javascript
复制
import pan  print("32摄氏度 = %.2f" % pan.c2f(32))  print("99华氏度 = %.2f" % pan.f2c(99))

这样显得有些麻烦

from 模块名 import 函数名如下

代码语言:javascript
复制
from modname import name1[, name2[, ... nameN]]

例如,要导入模块 sa 的 name 函数,使用如下语句:

代码语言:javascript
复制
from sa import name

它不会把整个sa模块导入当前的命名空间里,只会把其对应的函数引入

from 模块名 as 新名字

代码语言:javascript
复制
from modname import *

把一个模块的所有内容全都导入到当前的命名空间也是可行的

这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。

所以并不推荐使用

推荐使用方法

import 模块名 as 新名字【指模块的新名字,方便】

用这种方法给导入的命名空间替换一个新名字

命名空间解释;如同在一个文件里声明一个name函数,再另一个文件里再声明一个name函数,这两个函数虽然名字相同,但是却不相干,如何识别,在name函数前面加上文件名,而这个文件名加上命名空间

__name__属性

一个模块被另一个程序第一次引入时,其主程序将运行。如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性来使该程序块仅在该模块自身运行时执行。

代码语言:javascript
复制
>>> __name__'__main__'

简单的理解,就是说__name__属性的值是__main__ 每个模块都有一个__name__属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入。

测试下面的代码

代码语言:javascript
复制
if __name__ == '__main__':   print('程序自身在运行')else:   print('我来自另一模块')

dir()内置函数dir()可以找到模块内定义的所有名称

代码语言:javascript
复制
>>> import pan>>> pan.__name__'pan'>>> dir(pan)['__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'c2f', 'f2c']

path搜索路径

代码语言:javascript
复制
>>> import sys>>> sys.path['', 'C:\\WINDOWS\\SYSTEM32\\python34.zip', 'C:\\Python34\\DLLs', 'C:\\Python34\\lib', 'C:\\Python34', 'C:\\Python34\\lib\\site-packages']>>>

简单理解就是,上面咱们把建立一个文件叫做模块,其实包就是建立一个文件夹

但是文件夹是有前提条件的,Python怎么识别这个文件夹是一个包呢?

  1. 创立一个文件夹,用于存放相关模块,文件夹的名字即包的名字
  2. 在文件夹内创建一个叫做__init__.py的模块文件,内容可以是空的,也可以是初始化代码,这个是Python识别这个是个包的前提
  3. 将相关的代码放入文件夹中
本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2019-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 渗透云笔记 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • __name__属性
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档