首页 > 编程语言 >Python模块

Python模块

时间:2023-03-15 23:55:58浏览次数:97  
标签:logging Python random 模块 print import

Python基础 之 模块

前置技术点:函数

模块概述

一个模块其实就是一个.py文件,同时大部分模块命名规范都是小写的,如time模块,os模块,pygame模块等

模块可分为三类:

  • 内置模块:python官方收录的,不用下载的自带模块

  • 第三方模块: python官方未收录的,要下载才能用的模块,如pygame, flask, django等

  • 自定义模块:自已项目中写的 main.py

模块导入

1 什么时候要导入?

在我们自己的python程序中,要使用模块(也就是另一个.py文件),是要先做导入操作的。

如:在 main.py 中要使用到 abc.py 中的函数,由于跨文件了,这时我们就要做导入操作。

2 如何导入?

方式一:

import 文件名称 (注意,只是文件名称,没有.py),在导入之后,就可以用这个 文件名称.方法()

import random  # (注意,只是文件名称,没有.py)
print( random.randint(1,100) )

还可给导入的模块取别名

import 文件名称 as 别名, ,在导入之后,就可以用这个 别名.方法()

import random as r
print( r.randint(1,100) )

方式二:

from 模块名称 import 类/变量/方法 ,在导入之后,就可以直接使用这个 类/变量/方法

from random import randint
print( randint(1,100) )

from 模块名称 import 类/变量/方法 as 别名,就可以使用 别名来使用这个 类/变量/方法

from random import randint as ri
print( ri(1,100) )

3 练习案例

请在main.py中导入main2, 之后使用main2.py中的变量和函数。

main2.py内的代码如下:

name = "张三丰"

def fun1():
    print("我是main2中的fun1...")

def fun2():
    print("我是main2中的fun2...")

def fun3():
    print("我是main2中的fun3...")

main.py的代码如下:

# 方式一:import xxx
import main2
print(main2.name)
main2.fun1()
main2.fun2()
main2.fun3()
#  方式二:from xxx import xxx
from main2 import *
print(name)
fun1()
fun2()
fun3()

4 __all____name__

关于__all__ = []

from 模块名 import * # 从模块 导入所有

关于__all__ = [“类1”,“类2”]

from 模块名 import * # 从模块导入所有,这个所有指的是__all__中包含的

关于if __name__ = ‘__main__’: pass

在模块中,添加此属性,一般用来做测试代码,表示当前在独立运行此模块才调用

test.py

def fu1():
    print("我是test这个模块的fun1 函数")

def fu2():
    print("我是test这个模块的fun2 函数")

fu1();
if __name__ == '__main__':
    fu2();

在独立运行test时,fun1函数、fun2函数会运行;

在其他模块中导入test时,fun1函数会运行,fun2函数不会直接运行;

5 关于包

当要分类管理不同的模块时,就可以用包来管理了,包“可以理解为”就是文件夹,当然做法上有点小区别

包有一个__init__.py的文件(其实就是个空文件,只是为了让python知道,它到底是文件夹还是包)

一般,在一个大一点的项目中,会用模块和包来组织所有代码文件,包就有效的解决了,模块重名的问题

包1
	模块1.py
	模块2.py
	__init__.py
包2
	模块1.py
	__init__.py
main.py

包下模块导入操作:

import 包1.模块2		  # 导入模块
包1.模块2.gogogo()		  # 调用模块内函数

from 包1 import 模块2	   # 导入模块
模块2.gogogo()		   # 调用模块内函数

内置模块

python官方收录的,不用下载, 导入后就可使用的自带模块

1 os模块

os.mkdir() & os.rename() & os.rmdir() & os.remove()

mkdir创建文件夹

rmdir删除文件夹

rename重命名文件/文件夹

remove删除文件

import os
# 创建nf1 nf2 nf3 nf4四个文件夹
os.mkdir("nf1")
os.mkdir("nf2")
os.mkdir("nf3")
os.mkdir("nf4")
# 删除nf3文件夹
os.rmdir("nf3")
# 重命名
os.rename("nf4","renamenf4")
print( os.getcwd() );				# 获取当前工作路径
print( os.path.exists("test.txt") );# 文件是否存在

os.system()

执行系统命令

import os

# notepad:记事本
# cmd:命令提示符
# calc:计算器
# mspaint:画图
# taskmgr:任务管理器
# msconfig:系统配置工具
# servicesmsc:服务管理工具
# regedit:注册表
# mstsc:运程管理
os.system("calc")

2 calendar模块

import calendar

# 生成日历
print(calendar.calendar(2023))
print(calendar.month(2022, 3))

3 time模块

import time

print( time.time()); 				# 返回从1970年1月1日0时0分0秒到现在经过的时间
print( time.localtime() );			# 获取本地时间,得到的是一个元组
print( time.localtime().tm_year );	# 年
print( time.localtime().tm_mon );	# 月
print( time.localtime().tm_mday );	# 日
print(time.strftime('%Y/%m/%d  %H:%M:%S'))  # 2023/02/28  22:11:25

4 练习案例

练习:设计一个函数,根据你的出生年份(参数),计算返回你的年龄

提示:用time模块来得到当前年份,再与你的出生年份做计算,返回结果

import time

# 函数定义
def getAge(myYear):
    # 现在的年份
    cy = time.localtime().tm_year
    # 现在的年份 - 出生年份
    age = cy - myYear
    # 返回结果
    return age;

# 函数调用
age = getAge(1998)
print( age )

5 math模块

数学模块

from math import *
 
print(pi) # 圆周率
print(e) # 自然常数
print(ceil(85.123)) # 向上取整
print(ceil(85.987))
print(floor(75.352)) # 向下取整
print(floor(75.959))
print(pow(7,3)) # 7的3次方
print(sqrt(2)) # 开平方根
print(sin(45)) # 正弦
print(cos(45)) # 余弦
print(tan(45)) # 正切
print(fabs(-1423.324)) # 绝对值
print(radians(50)) # 求弧度
print(fsum(range(1,101))) # 求和
print(log(16384,2)) # 以2为底的16384的对数
print(log2(65536)) # 以2为底的65536的对数
print(log10(100000000000)) # 以10为底的100000000000的对数
print(factorial(15)) # 阶乘:15!

6 练习案例

练习: 设计一个函数,计算两点间的距离,完成测试调用

image-20230302105926981

两点的坐标是(x1,y1)和(x2,y2),则两点之间的距离公式为 d = 根号[(x1-x2)2+(y1-y2)2]。

print( math.pow(4,2) )  # 4的2次方   16
print( math.sqrt(9) )   # 9的平方根   3

参考代码如下:

import math
# 分别用x1,y1,x2,y2表示两点
x1 = 5;
y1 = 15;
x2 = 5;
y2 = 3;
# x1-x2的平方
a = math.pow(x1 - x2, 2);
# y1-y2的平方
b = math.pow(y1 - y2, 2);
# 平方根
d = math.sqrt(a+b);
# 输出结果
print(d)

7 random模块

import random

print( random.random())  			#大于0小于1之间的小数
print( random.randint(80,100) );	# 获取一个随机整数,范围80-100
print( random.choice(['一等奖','二等奖','三等奖','欢迎再来']))  # 随机抽取一个样本

8 扩展练习案例

随机生成四位验证码

提示代码1: 关于随机数字

import random

random.randint(65, 65+25)   # 生成出来的是数字
random.choice(["A","a","6"])# 随机选择一个

提示代码2: 关于Unicode编码

ord()	# 返回字符对应的Unicode编码(如:A是65, a是97)
chr()	# 与ord()相反
        # A --> 65   a -->97     0 --> 48

步骤1 随机生成大写 or 小写 or 数字:

import random

t1 = random.randint(65, 65+25)   # 65 - 90之间的随机数 (65 -->A , 90 -->Z)
t2 = random.randint(97, 97+25)
t3 = random.randint(48, 48+8)    

t1 = chr(t1);
t2 = chr(t2);
t3 = chr(t3);

print(t1)
print(t2)
print(t3)

步骤2 随机生成一位验证码(大写 or 小写 or 数字,三选一), 执行四次生成四个

import random

for i in range(4):
    t1 = chr(random.randint(65, 65+25)); 
    t2 = chr(random.randint(97, 97+25));
    t3 = chr(random.randint(48, 48+8));
    # 从大写字母,小写字母,数字中随机三选一
    t = random.choice([t1,t2,t3]);
    print(t) # 现在仅仅是打印出来的

步骤3 将四个验证码数据连接成一个完整字符串

import random

code = '' # 定义一个用来保存完整验证码的字符串
for i in range(4):
    t1 = chr(random.randint(65, 65+25));
    t2 = chr(random.randint(97, 97+25));
    t3 = chr(random.randint(48, 48+8));
    # 从大写字母,小写字母,数字中随机三选一
    t = random.choice([t1,t2,t3]);
    # 验证码(字符串)连接
    code = code+t; 

print(f"验证码:{code}");

步骤4 重构代码, 整理为一个生成四位验证码的函数

以下代码在重构过程中, 将变量名称也标准化了, 不再是使用的t1,t2,t3,t这种随意的变量名称

import random

# 生成验证码:
# 1 每一位都可以是大写字母 小写字母 数字
# 2 要求共4位
def get_code():
    # 用来保存生成的验证码
    code = "";
    
    for i in range(4):
        r1 = chr(random.random(48, 48+8));
        r2 = chr(random.random(97, 97+25));
        r3 = chr(random.random(65, 65+25));
        rand = random.choice( [r1,r2,r3] );
    	code = code+rand;
    
    # 将此验证码返回
    return code;

# 生成验证码,函数调用
result = get_code()
print( result )

9 turtle模块

turtle(海龟)是python中比较好玩一个模块,它有一个专有名称“海龟作图”,它可以通过某些语句来控制一个点在白板上的运动轨迹,它在白板上走过的地方会留下痕迹,就像一支笔在纸上写字画画一样,属于入门级的图形绘制函数库;

此模块被python官方收录了,可直接导入使用,无需安装,所以也可以认为是一个内置模块了

import turtle  # 导入模块

turtle的使用主要分为以下三个方面:创建窗口设置画笔绘制图形

设置窗口

使用setup()函数创建图形窗口。

turtle.setup(width, height, startx=None, starty=None)
# width: 窗口宽度
# height: 窗口高度
# startx:窗口在计算机屏幕上的横坐标(当取值为None时,窗口位于屏幕中心)
# starty:窗口在计算机屏幕上的纵坐标(当取值为None时,窗口位于屏幕中心)
t.done() # 保持程序不关

turtle的空间坐标体系:

image

设置画笔

import turtle  # 导入模块

turtle.penup() 		#表示抬起画笔;可以简写成turtle.pu()
turtle.pendown() 	#表示画笔落下;可以简写成turtle.pd()

绘制图形

在画笔状态为DOWN时,通过移动画笔可以在画布上绘制图形,可以将画笔想象成一只海龟(这也是turtle模块名字的由来):海龟落在画布上,它可以向前、向后、向左、向右移动,海龟爬动时在画布上留下痕迹,路径即为所绘图形。

(1)移动控制函数

turtle.forward(distance)		# 向前移动 , 参数distance用于指定画笔移动的距离,单位为像素
turtle.backward(distance)		# 向后移动
turtle.goto(x,y=None)			# 移动到指定位置

(2)角度控制函数

turtle.right(degree)	# 向右转动, 参数degree用于指定画笔向右与向左的角度
turtle.left(degree)		# 向左转动
turtle.seth(angle)		# 转动到某个方向, 参数angle用于设置画笔在坐标系中的角度

(3)绘制函数

turtle.circle(radius, extent=None, steps=None)

# 参数radius用于设置半径;
# 参数extent用于设置弧的角度。
# 当radius为正时,画笔以原点为起点向上绘制弧线;radius为负时,画笔以原点为起点向下绘制弧线。
# 当extent为正时,画笔以原点为起点向右绘制弧线;extent为负时,画笔以原点为起点向左绘制弧线。

t.pencolor("green");	# 设置颜色
t.pensize(16);			# 设置粗细

(4)图形填充

turtle.begin_fill()    # 开始填充
turtle.end_fill()      # 结束填充

练习案例:turtle绘制三角形

三角形内角和 360	(360/3 => 120)
前进+转向即可完成
for i in range(3):
    turtle.forward(200)     	# 前进
    turtle.left(360/3)          # 左转120度

练习案例:绘制多边形

image

练习案例: 绘制一个时针表盘效果

扩展案例:要求利用turtle和time绘制下图所示的钟表,并使钟表的日期、周日期、时间跟随本地时间实时变化。

image

10 logging模块

Python logging 模块定义了为应用程序和库实现灵活的事件日志记录的函数和类。

程序开发过程中,很多程序都有记录日志的需求,并且日志包含的信息有正常的程序访问日志还可能有错误、警告等信息输出,Python 的 logging 模块提供了标准的日志接口,可以通过它存储各种格式的日志,日志记录提供了一组便利功能,用于简单的日志记录用法。

日志分级别,标准级别及其适用性(从高到低的顺序):

日志级别等级排序:critical > error > warning > info > debug

级别越高打印的日志越少,反之亦然,即

  • debug : 打印全部的日志( notset 等同于 debug )
  • info : 打印 info, warning, error, critical 级别的日志
  • warning : 打印 warning, error, critical 级别的日志
  • error : 打印 error, critical 级别的日志
  • critical : 打印 critical 级别
# 简单打印日志:
import logging

# 打印日志级别
def test_logging():
    logging.debug('Python debug')
    logging.info('Python info')
    logging.warning('Python warning')
    logging.error('Python Error')
    logging.critical('Python critical')

test_logging()

输出如下:

WARNING:root:Python warning
ERROR:root:Python Error
CRITICAL:root:Python critical

设置日志级别

通过 logging.basicConfig() 可以设置 root 的日志级别,和日志输出格式。

注意:Logging.basicConfig() 需要在开头就设置,在中间设置并无作用。

import logging

# 打印日志级别
def test():
    logging.basicConfig(level=logging.DEBUG)
    logging.debug('Python debug')
    logging.info('Python info')
    logging.warning('Python warning')
    logging.error('Python Error')
    logging.critical('Python critical')
    
test()

输出如下:

DEBUG:root:Python debug
INFO:root:Python info
WARNING:root:Python warning
ERROR:root:Python Error
CRITICAL:root:Python critical

日志信息记录

# 日志信息记录到文件
logging.basicConfig(filename='D:/example.log', level=logging.DEBUG)
logging.debug('This message should go to the log file')
logging.info('So should this')
logging.warning('And this, too')

在相应的路径下会有 example.log 日志文件。

日志信息格式

import logging

# 打印日志级别
def test_logging():
    # 设置日志级别
    # logging.basicConfig(level=logging.DEBUG)
    # 日志信息记录到文件,同时设置日志级别
    # logging.basicConfig(filename='D:/example.log', level=logging.DEBUG)
    # 日志信息记录到文件,同时设置日志级别, 消息时间
    logging.basicConfig(filename='D:/example.log', level=logging.DEBUG,format='%(asctime)s %(message)s', datefmt='%m/%d/%Y %I:%M:%S %p')
    logging.debug('Python debug')
    logging.info('Python info')
    logging.warning('Python warning')
    logging.error('Python Error')
    logging.critical('Python critical')

test_logging()

第三方模块

python官方未收录的,要先下载到, 导入后就可使用的第三方模块

模块下载

pip install 模块名称
pip install 模块名称 -i https://pypi.tuna.tsinghua.edu.cn/simple/

几个常用国内镜像源:

下载后的第三方模块所在位置:

...\Python\Lib\site-packages

常用第三方库

二维码:pyqrcode

pyqrcode 是一款 老牌 二维码生成模块了,安装之后三行代码就能搞定一个简单的二维码图片。

安装

pip install pyqrcode
pip install pypng

代码如下:

import pyqrcode
import png

inpStr = "http://www.baidu.com"
qrc = pyqrcode.create(inpStr)
qrc.png("baidu.png", scale=6)

二维码:qrcode

安装

pip install qrcode

代码如下:

import qrcode

qr = qrcode.QRCode(
    version=None,
    error_correction=qrcode.constants.ERROR_CORRECT_L,
    border=4,
    box_size=10
)
img = qrcode.make('http://www.baidu.com',version=4,border=4,box_size=12)
img.save('bd.jpg')  # 保存图片

qrcode 模块中最重要的方法是 qrcode.QRCode()函数,其参数简单说明如下:

  • version:二维码大小,1-40 不等;
  • error_correction:二维码纠错范围,4 个常量值在下文说明;
  • box_size:二维码中每个小格子包含的像素数;
  • border:边框,二维码与图片边界的距离。

其中,二维码纠错范围,可以选择 4 个常量:

  • ERROR_CORRECT_L: 7%以下的错误会被纠正;
  • ERROR_CORRECT_M (默认值): 15%以下的错误会被纠正;
  • ERROR_CORRECT_Q:25%以下的错误会被纠正;
  • ERROR_CORRECT_H:30%以下的错误会被纠正。

游戏:pygame
略~

标签:logging,Python,random,模块,print,import
From: https://www.cnblogs.com/yxchao/p/17198494.html

相关文章

  • Kali中python问题
    Kali中python问题1、查看python有哪些版本update-alternatives--displaypython2、如果没有,可以去/usr/bin查看kali自带哪些版本查看命令:lspython*3、添加不同的pyt......
  • 【视频】Python用LSTM长短期记忆神经网络对不稳定降雨量时间序列进行预测分析|数据分
    全文下载链接:http://tecdat.cn/?p=23544最近我们被客户要求撰写关于LSTM的研究报告,包括一些图形和统计输出。在本文中,长短期记忆网络——通常称为“LSTM”——是一种特殊......
  • Python 中 with 语句的详解
    1.概述在Python中,只要一个对象实现了__enter__和__exit__方法,那么就能使用with语句,该对象也可以称之为上下文管理器。官方文档的相关说明:上下文管理器的语法:......
  • python发邮件
    importsmtplibfromemail.mime.textimportMIMEText#邮件正文fromemail.headerimportHeader#邮件头#登录邮件服务器smtp_obj=smtplib.SMTP_SSL("s......
  • python配置和多版本
    python安装镜像安装包:https://registry.npmmirror.com/binary.html?path=python/选择python-3.*-amd64.exe即可pip下载包使用国内镜像的配置在C:\Users\username\p......
  • Python 异步: 异步推导式(18)
    动动发财的小手,点个赞吧!当我们想到“pythonic”时,理解,如列表和字典理解是Python的一个特性。这是我们执行循环的一种方式,与许多其他语言不同。Asyncio允许我们使用异......
  • Python Flask JinJa2 语法介绍与示例讲解
    目录一、概述二、JinJa2语法介绍与示例讲解1)变量2)控制结构3)循环结构4)宏5)过滤器6)继承7)包含一、概述Flask是一个轻量级的PythonWeb框架,支持Jinja2模板引擎。Jinja2是一个......
  • 基于python实现的抓取腾讯视频所有电影的爬虫
    我搜集了国内10几个电影网站的数据,里面近几十W条记录,用文本没法存,mongodb学习成本非常低,安装、下载、运行起来不会花你5分钟时间。#-*-coding:utf-8-*-importreimport......
  • python应用题 字符填充
    提示代码#请在_______完善代码s=input()print("{_______(1)_________}".format(_______(2)_________))......
  • python爬虫案列08:梨视频爬取一个短视频
    importrequestsfromlxmlimportetreeimportos#拿到视频地址urlurl='https://www.pearvideo.com/video_1160135'#提取url中的cont_id,后面用cont_id=url.sp......