python模块是使用
‘壹’ python模块是类吗
模块可以理解为就是一个py文件,而类则只是你创建的一个对象而已,一个模块中可以有多个类
在Python程序中,每个.py文件都可以视为一个模块,通过在当前.py文件中导入其它.py文件,可以使用被导入文件中定义的内容,例如类、变量、函数等。
Python中的模块可分为三类,分别是内置模块、第三方模块和自定义模块,相关介绍如下。
(1)内置模块是Python内置标准库中的模块,也是Python的官方模块,可直接导入程序供开发人员使用。
(2)第三方模块是由非官方制作发布的、供给大众使用的Python模块,在使用之前需要开发人员先自行安装;
(3)自定义模块是开发人员在程序编写的过程中自行编写的、存放功能性代码的.py文件。
‘贰’ Python系统模块sys和os使用(一)
sys 与 os 都是大型的模块,提供了基础的系统接口,我们先简单看一下它们各有什么基础功能
可见这两个模块的碰则属性列表都是非常长的,以下是一些基础操作
可以看出split与join是一对功能互异的方法
除此之外,我们也可笑销棚以使用字符串的 split 以及 join 方法简单类似实现,例如
注意 os 模块下的 os.path.normpath 也很好用,可以用来规范一个路径,用法如下斗悄
os.popen(cmd, mode, buffering)
首次修改与 2019/3/22
‘叁’ Python 中随机数random模块的常用使用方法介绍
Python中random模块包含了生成随机数的常用函数,random模块不能唯带孝直接访问,需要导入random 模指稿块(import random)。常见的random函数包含如下几个,( 我使用行誉的是jupyter notebook) 。
https://www.runoob.com/python/func-number-random.html
‘肆’ Python函数和模块的定义与使用,包括变量的类型及匿名函数用法
函数是组织好,可重复使用的,用来实现相关功能的代码段
函数提高了代码的重复利用率和应用的模块性。
除Python自带的函数之外,也可以自己创建函数,叫做自定义函数
语法:
函数代码块以 def 开头
参数为 输入值 ,放于函数名后口号里面,
函数内容以冒号:开始,函数体缩进, return 返回 输出值
函数调用使用关键字参数来确定传入的参数值,此时,如果多个函数则不需要按照指定顺序。
在定义函数时,指定参数默认值。调用时如果不传入参数,则使用默认值
不定长部分如果没有指定参数,传入是一个空元组
加了 两个星号 ** 的参数会以字典的形式导入
/ 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
3.8版本之后的才能使用
不使用 def 定义函数,没有函数名
lamdba主体时一个表达式,而不是代码块,函数体比def简单很多
定义在函数内部的为局部变量,仅能在函数内部使用
定义在函数外部的为全局变量,可在全局使用
模块是将包含所有定义的函数和变量的文件,一般将同类功能的函数组和在一起称为模块。
模块需要导入后,在调用相应函数进行使用
模块导入的方法:
从模块中导入一个指定的部分
把一个模块的所有内容全都导入
‘伍’ Python telnetlib模块使用
telnetlib模块使用
1、telnet 登录祥此设备
2、将输出的信息写到list里面
3、读取毁败想要的值或接谨余迅口属性
下面是读取接口的PVID
‘陆’ Python的keyboard模块使用多线程
在Python的keyboard模块中,使用了线程来处理键盘事件。具体来说,keyboard模块使用了Python标准库中的threading模块来创建线程,以便在后台监视键盘事件并在发生事件时调用回调函数。
当你使用keyboard模块的add_hotkey()函数注册热键时,模块会创建一个新的线程来监缓袜视键盘事件。当你按下热键时,这个线程会在后台调用你提供的回调函数。
在使扰含激用keyboard模块时,你不需要显式地创建或控制线程,模块会在内部处理线程的创建和管理。如果你需要在程序中使用多线程来老孙完成其他任务,可以通过Python标准库中的threading模块来创建新的线程。
需要注意的是,在使用多线程时,需要注意线程之间的同步和互斥,以避免竞争条件和死锁等问题。建议在使用多线程时仔细阅读Python官方文档,并使用线程安全的工具和技术来编写多线程程序。
‘柒’ Python 中 logging 模块使用详情
在实际应用中,日志文件十分重要,通过日志文件,我们知道程序运行的细节;同时,当程序出问题时,我们也可以通过日志快速定位问题所在。在我们写程序时,也可以借助 logging 模块的输出信息来调试代码。
但是很多人还是在程序中使用print()函数来输出一些信息,比如:
这样用的话缺点很明显,当程序写好运行时,我们要把这些print()函数删掉,在简单的的程序中用还行,当程序比较复杂时,这个办法很低效。
如果使用 logging 模块,看看效果
运行结果如下:
你也许会问,这和 print() 函数有什么区别呢?区别就在于,logging模块可以通过改变level来控制一些语句是否被输出,比如当我们把level改成DEBUG级别:
得到输出如下:
logging 模块是python自带的一个包,因此在使用的时候,不必安装,只需要import即可。有5个level,分别是debug,主要是查看一下程序运行的信息,一般是调试程序要看的信息;info,是我们看程序是否如预料执行的信息;warn,意料之外的,但是不影响程序运行; error 和 critical 就是一些比较严重的问题,会影响程序运行。默认leval是warn,这个时候debug级别和info级别就不会被输出到日志里了。如果想要看到这些信息,就需要进行一些设置。
我们主要调用 basicConfig(***kwargs*) 这个函数对 logging 进行设置。
常用的参数如下:
我们通过调整format,可以输出我们想要的格式,比如:
结果是:
这就是在 format 参数中设置了时间的,所以得到了时间,我们可以输出多种想要的信息
总结:
本文主要介绍了 logging 模块的基础用法,除非是自己写的小脚本中我们使用print()函数,其他情况下最好还是用logging模块来打印信息,输出日志吧。
‘捌’ 如何使用和制作 Python 安装模块
Python模块的安装方法:
1. 单文件模块:直接把文件拷贝到$python_dir/lib
2. 多文件模块,带setup.py:python setup.py install
3. egg文件,类似java的jar:
1) 下载ez_setup.py,运行python ez_setup
2) easy_install *.egg
虽然Python的模块可以拷贝安装,但是一般情况下推荐制作一个安装包,即写一个setup.py文件来安装。
setup.py文件的使用:
% python setup.py build #编译
% python setup.py install #安装
% python setup.py sdist #制作分发包
% python setup.py bdist_wininst #制作windows下的分发包
% python setup.py bdist_rpm
setup.py文件的编写:
setup.py中主要执行一个 setup函数,该函数中大部分是描述性东西,最主要的是packages参数,列出所有的package,可以用自带的find_packages来动态获取羡慎package。所以setup.py文汪派陪困蠢件的编写实际是很简单的。
简单的例子:
setup.py文件:
from setuptools import setup, find_packages
setup(
name="mytest",
version="0.10",
description="My test mole",
author="Robin Hood",
url="",
license="LGPL",
packages= find_packages(),
scripts=["scripts/test.py"],
)
mytest.py文件:
import sys
def get():
return sys.path
scripts/test.py文件:
import os
print os.environ.keys()
setup中的scripts表示将该文件放到 Python的Scripts目录下,可以直接用。OK,简单的安装成功,可以运行所列举的命令生成安装包,或者安装该python包。
本机测试成功(win32-python25)!
‘玖’ 那些Python中的模块
Python的解释环境是很好用,但是如果我们需要编写一个大型的程序的时候,解释环境就完全不够用了。这个时候我们需要将python程序保存在一个文件里。通常这个文件是以.py结尾的。
对于大型的应用程序来说,一个文件可能是不够的,这个时候我们需要在文件中引用其他的文件,这样文件就叫做模块。
模块是一个包含Python定义和语句的文件。文件名就是模块名后跟文件后缀 .py 。在模块内部,模块名可以通过全局变量 __name__ 获得。
还是之前的斐波拉赫数列的例子,我们在fibo.py文件中存放了函数的实现:
编写完毕之后,我们可以在Python的解释环境中导入它:
然后直接使用即可:
常用的函数,我们可以将其赋值给一个变量:
或者,我们在导入的时候,直接给这个模块起个名字:
或者导入模块中的函数:
每个模块都有它自己的私有符号表,该表用作模块中定义的所有函数的全局符号表。因此,模块的作者可以在模块内使用全局变量,而不必担心与用户的全局变量发生意外冲突。
前面我们提到了可以使用import来导入一个模块,并且 __name__ 中保存的是模块的名字。
和java中的main方法一样,如果我们想要在模块中进行一些测试工作,有没有类似java中main方法的写法呢?
先看一个例子:
在模块中,我们需要进行一个判断 __name__ 是不是被赋值为 "__main__"。
我们这样来执行这个模块:
以脚本执行的情况下,模块的 __name__ 属性会被赋值为 __main__ , 这也是例子中为什么要这样写的原因。
看下执行效果:
如果是以模块导入的话,那么将不会被执行:
使用import导入模块的时候,解释器首先会去找该名字的内置模块,如果没找到的话,解释器会从 sys.path变量给出的目录列表里寻找。
sys.path的初始目录包括:
要想查看模块中定义的内容,可以使用dir函数。
上面的例子列出了当前模块中定义的内容,包括变量,模块,函数等。
我们可以给dir加上参数,来获取特定模块的内容:
java中有package的概念,用来隔离程序代码。同样的在Python中也有包。
我们看一个Python中包的例子:
上面我们定义了4个包,分别是sound,sound.formats, sound.effects, sound.filters。
__init__.py 可以是一个空文件,也可以执行包的初始化代码或设置 __all__ 变量。
当导入的时候, python就会在 sys.path 路径中搜索该包。
包的导入有很多种方式,我们可以导入单个模块:
但是这样导入之后,使用的时候必须加载全名:
如果不想加载全名,可以这样导入:
那么就可以这样使用了:
还可以直接导入模块中的方法:
然后这样使用:
如果一个包里面的子包比较多,我们可能会希望使用 * 来一次性导入:
那么如何去控制到底会导入effects的哪一个子包呢?
我们可以在 __init__.py 中定义一个名叫 __all__ 的列表,在这个列表中列出将要导出的子包名,如下所示:
这样from sound.effects import * 将导入 sound 包的三个命名子模块。
如果没有定义 __all__,from sound.effects import * 语句 不会 从包 sound.effects 中导入所有子模块到当前命名空间;它只会导入包 sound.effects。
Import 可以指定相对路径,我们使用 . 来表示当前包, 使用 .. 来表示父包。
如下所示:
‘拾’ 【Python】xlrd模块使用
python操作excel主要用到xlrd和xlwt这两个库,即xlrd是读excel,xlwt是写excel的库
安装:pip install xlrd
导入局信:import xlrd
打开excel文件:xlrd.open_workbook(filename)
如果路径或者文件名中有中文的话,加桐蔽轮上r即可: xlrd.open_workbook(r"filename")
获取所有sheet名:sheet_names( )。将所有的sheet名存放到数组中输出
根据sheet索引或者名称获取每张sheet表里的数据内容:sheet_by_index( 索引值 )、sheet_by_name("sheetname")。
excel里的索引值都从0开始
这俩输出结果是一致的
获取指定sheet页的名称、行数、列数
获取整行的值:row_values( 索引值 ) 并帆 获取整列的值:col_values( 索引值 ) ——> 都以数组形式返回数据
此处注意,我们输出结果里面数字是保留了一位小数的,那如果我们想直接输出整数如何处理呢?网络了好久都需要自己写个函数转一下,能更改excel里的数据格式直接读出来就是int型吗?而且我发现,如果直接读取那个数据其实是int型,但是写入数组里就变成浮点型了,谁能告知一下
获取单元格对象:cell( 行的索引值,列的索引值 )
获取单元格值的数据类型:cell( 行的索引值,列的索引值 ).ctype
ctype返回值对应的数据类型是: 0 - empty, 1 - string, 2 - number, 3 - date, 4 - boolean, 5 - error
获取某个单元格的值:cell_value( 行的索引值,列的索引值 )/cell( 行的索引值,列的索引值 ).value/row( 行的索引值 )[ 列的索引值 ].value