迭代器、模块的简单总结
常见函数内置方法
1.abs()
计算绝对值
num = abs(-50) #50
2.all()/any()
判断括号内数据值对应的布尔值是否为True
print(all(0,1,2,3,4,5)) #括号内所有数据值对应的布尔值均为True时,输出为True
#因为0对应的布尔值为False,输出Falseprint(any(0,1,2,3,4,5)) #括号内有一个数据值对应的布尔值为True时,输出为True
#除了0其他布尔值对应均为True,输出True
3.进制转换
int() | 转换为十进制 |
bin() | 转换为二进制 |
oct() | 转换为八进制 |
hex() | 转换为十六进制 |
4.bytes()
字符编码的转换
s1 = bytes('今天天气真好','utf8') #将引号里的内容转码为utf8格式
5.callable
判断目标是否是可作为函数调用,可调用输出为True
name = 'jason'
def index():print('from index')
print(callable(name)) # False,name是字符串
print(callable(index)) # True,index是函数
6.chr() ord()
将字符/数字根据ASCII码进行转换
print(chr(65)) # A 大写字母的范围是65~90
print(chr(97)) # a 小写字母的范围是97~122
print(ord('A')) # 65
print(ord('a')) # 97
7.dir()
获取目标对象拥有的内置方法的名字
import time
"""
['_STRUCT_TM_ITEMS', '__doc__', '__loader__', '__name__', '__package__', '__spec__',
'altzone', 'asctime', 'clock', 'ctime', 'daylight', 'get_clock_info', 'gmtime',
'localtime', 'mktime', 'monotonic', 'perf_counter', 'process_time', 'sleep', 'strftime',
'strptime', 'struct_time', 'time', 'timezone', 'tzname']
"""
8.divmod()
输出目标数值整除之后的整数和余数,可用于网页页数计算
page, more = divmod(898,10)
if more: #当more不为0时,条件为True,直到整除为0,条件为Falsepage += 1
print('总页数为:%s' % page)
9.enumerate()
枚举,按照索引值顺序一个个输出
name_list = ['jason', 'kevin', 'oscar', 'jerry']
for i, j in enumerate(name_list, 100): # 默认是从0开始 可以自定义print(i, j)
10.eval() exec()
识别目标字符串中包含的python代码并执行
res = 'print(123)'
eval(res) # 不识别复杂结构的代码 只能识别最简单的res1 = "for i in range(10):print(i)"
exec(res1) # 能够识别复杂结构的代码
11.hash()
生成一串随机数字
12.help()
查看帮助信息
13.isinstance()
判断是否属于某个数据类型
print(isinstance(123,int)) # True
print(isinstance(123,str)) # False
14.pow()
幂指数计算
print(pow(2, 3)) # 8
15.round()
四舍五入
print(round(98.3)) #98
可迭代对象
迭代是更新目标对象的意思,程序软件的更新就是对代码进行迭代。
判断是否可迭代的方法
目标内置方法存在__iter__则是可迭代对象
可迭代 | 不可迭代 |
字符串 | 整型 |
列表 | 浮点型 |
字典 | 布尔值 |
元组 | 函数 |
集合 | |
文件对象 |
迭代器对象
迭代器对象的其中一个作用,就是从字典、集合这类不依靠索引排序的类型中取值。
可迭代对象调用__iter__方法之后就会变成迭代器对象
迭代器对象调用__iter__方法无论多少次还是迭代器对象本身
for循环的本质
######例如不使用for循环进行列表打印
l1 = [11, 22, 33, 44, 55, 66, 77, 88, 99]res = l1.__iter__() #先把列表转换成迭代器对象
count = 0
while count < len(l1):print(res.__next__()) #使用__next__输出迭代器的赋值count += 1
for循环的本质就是将目标对象转换成迭代器对象来进行循环操作
for 变量名 in 可迭代对象:
循环体代码
生成器对象
生成器对象本质就是自定义迭代器对象,使用自定义迭代器可以帮助我们优化代码结构,使代码看上去更加简洁。
yield关键字
当它出现在函数代码中时,首次调用函数时会把函数本身转换成迭代器对象,不会执行函数其他代码。
def index():print('一段函数代码')yield
res = index()
print(res)
######打印结果为<generator object index at 0x0000024BAD685BF8>
经过yield之后函数本身被转换成了一个生成器,也就是自定义迭代器,此时就可以使用__next__来调用迭代器。
yield存在中断功能
当执行生成器时,每一个yeild都会在它当前那一行代码停止,相当于把代码截成多个部分,每次调用迭代器从对应的yeild执行到下一yeild,而如果yeild下面没有代码,此时调用就会报错。
def index():print('一段函数代码')yieldprint('另一段代码')yieldprint('第三段代码')yield
res = index()
res.__next__()
res.__next__()
res.__next__()
yield还可以使用关键字send来传递信息,使用send相当于传入数据后自动执行__next__的功能启动迭代器。
无论yeild在哪个位置,都会执行中断的功能。
def index(name,food=None):print(f'{name}准备干午饭!!!')while True:food = yieldprint(f'{name}正在吃{food}')
res = index('jack')
res.__next__()
res.send('米饭')
res.send('面条')
res.send('炸鸡')
模块
模块是指在编程中直接导入另一个已经含有完整代码功能的文件的行为,用于方便节省代码操作。
模块的分类
1.内置模块
python解释器自带的模块,无需编辑
import time
2.自定义模块
由自己编辑的模块,例如其他的py文件,都可以作为模块导入到另一文件中
3.第三方模块
网络上他人写好的模块,在下载之后导入即可使用
模块的导入
1.import
import 模块名
模块名是文件名,不加文件的后缀名,但要注意作为模块导入的文件名只能是英文数字下划线,不能出现中文等其他不允许的字符。
使用import导入会把模块中的所有变量、函数等全部导入到文件中,具体效果是创造一个与模块同名的名称空间,获取时指向该名称空间来获取内容。
2.from......import
from 模块名 import 变量/函数名
from......import导入只会导入import后面的变量/函数名,也不会产生一个名称空间,具体效果是直接把导入内容进行赋值操作。
模块的使用
使用import导入时用模块名加点使用模块中的内容,与内置方法相同
import导入之后,为了区分属于模块的部分需要添加模块名加点才能使用,不会覆盖文件内已经存在的变量名。
money = 10##################假设以上是另一个模块文件,名字是md#########################money = 100
import mdprint(money) # 100print(md.money) # 10
使用from......import导入之后,直接使用导入的变量名即可,具体效果为直接覆盖原本的值,导入之后也可以再次重新赋值。
money = 100####################假设以上是另一个模块,名字是md################
money = 10
from md import moneyprint(money) # 100money = 10
print(money) # 10
from....import也可以批量导入,使用逗号隔开
from md import a,b,c,d
也可以使用*代表所有变量,除此之外,在模块代码文件中,可以使用__all__ = [变量名]来控制哪些变量可以被导入和不被导入
from md import *#########################__all__ = ['a'] #变量a不会被模块导入
判断当前文件
导入模块之后,运行文件数量就会多了起来,有时需要判断当前运行的是哪个文件,此时可以使用__name__来判断。
if __name__ = '__main__':#确认是对应文件后执行的代码
绝对导入与相对导入
绝对导入
绝对导入是以该项目文件版本的python解释器的环境变量路径中一层一层往下寻找,使用的是绝对路径,好处是能锁定模块文件的位置。
from bin.project.test import login
相对导入
相对导入是从当前项目所在的文件夹开始,一层一层往上或者往下开始寻找,使用的是相对路径。相对路径有三种方式。
from . import login
# 使用.表示在当前路径下寻找from .. import support
# 使用..表示从上一级路径下寻找from ../.. import help
# 使用../..表示从上上级路径下寻找
包
包是存储了一个或多个py文件的文件夹的统称,在导入多个同一文件夹下的模块时,可以直接导入整个包,更方便使用和管理。
import 包名(文件夹名)
导入包的本质是导入每个py文件的__init__.py文件。
在python2.X版本中需要在文件夹中额外添加__init__.py文件才能导入,在python3.X版本中不需要添加。
软件开发目录规范
专业软件的目录下,会发现软件的文件夹命名大多数都有接近统一的命名方式。在我们自己编译的过程中,随着编程量增加,也会需要更加方便的存储不同功能模块文件,此时可以遵循软件目录规范来给文件夹命名。
bin文件夹 | 储存软件程序的启动文件 |
config文件夹 | 储存程序代码的配置信息(各种变量的赋值) |
core文件夹 | 储存程序的核心逻辑代码 |
lib文件夹 | 储存程序的各种公共功能 |
db文件夹 | 储存程序的数据库(即database) |
log文件夹 | 储存程序运行日志 |
interface文件夹 | 储存程序与其他文件的接口 |
readme文件夹 | 说明程序的功能用途 |
requirement文件夹 | 储存程序的插件 |
在实际编译过程中也可以不完全遵守规范,但为了自己和他人方便查找相关文件,最好能明确看出文件和文件夹的用途。
常见内置模块
1.collection
(1)namedtuple
创建一个具名元组,可以构造一个拥有字段名的元组。
('元组名称'['元素名称'])
################################
from collections import namedtuplepoint = namedtuple('二维坐标系', ['x', 'y'])a = point(1,5)
b = point(2,2)
print(a)
print(b) #二维坐标系(x=1, y=5)
#二维坐标系(x=2, y=2)
2.deque
创建一个双端队列,可以更方便地插入数据到队列的头部。
dq = []
dq.append(1)
dq.append(2)
dq.append(3)
dq.appendleft(0)
3.OrderedDirt
创建一个有序字典
from collections import OrderedDictod = OrderedDict([('a', 1), ('b', 2), ('c', 3)])
print(od)
2.time
1.time
time.time,生成一个时间戳,效果是生成一个从1970年1月1日0点0分0秒直到当前时间所经过的秒数的数据值。
from time import timet = time.time
print(t)
2.gmttime
生成一个字典,内部存储的数据是当前时间,并按照年,月,日等将数据分到对应的键上。
from time import gmtimet = gmtime()
print(t)
#time.struct_time(tm_year=2022, tm_mon=7, tm_mday=14, tm_hour=12,
#tm_min=55, tm_sec=10, tm_wday=3, tm_yday=195, tm_isdst=0)
3.strftime
根据输入的格式生成对应的当前时间
import timeprint(time.strptime('%Y-%m-%d %H:%M:%S'))
3.datetime
1.datetime
提取当前的年月日时分秒
import datetimeres = datetime.datetime.today() # 将当前具体的年月日时分秒赋值给变量
还能通过year,month等单独获取时间数值
print(res.year)
print(res.month)
2.date
相比datetime,date只能获取到年月日
import datetimeres = datetime.date.today()
date还可以使用timedelta来对年月日进行数值增减操作
t = datetime.date.timedelta(days = 3)print(res - t)
print(res + t)
4.os
1.创建文件/目录
import osos.mkdir(r'dd') #在执行文件的文件夹内新建一个文件夹,文件夹名为括号内的引号内容os.makedirs(r'aa\bb\cc') #在执行文件目录内依次创建多层文件夹
2.删除文件/目录
文件夹必须内容为空,如果目标不是空文件夹则会报错
import osos.rmdir(r'aa') #移除执行文件目录下的空文件夹os.removedirs(r'aa\bb\cc') #按内到外的顺序批量删除文件夹
3.列举文件夹内容
import osos.listdir(r'project') #将文件夹内容以列表形式储存
4.重命名和删除
os.rename(r'a.txt',r'aaa.txt') #将指定文件更改成后面的名字os.remove(r'aaa.txt') #将文件删除
5.获取当前文件路径
import osprint(os.getcwd())
6.获取启动文件路径
import osprint(os.path.abspath(__file__)) #获取程序启动文件的绝对路径print(os.path.dirname(__file__)) #获取程序启动文件所在的目录路径
7.判断目标是否存在
import osprint(os.path.exsits(r'b.txt')) #判断目标文件是否存在,存在输出Trueprint(os.path.exsits(r'project')) #判断目标文件夹是否存在
8.文件路径拼接
import ospath_a = 'D:\project\aim'
path_b = 'b.txt'res = os.path.join(path_a, path_b) #将两个文件路径进行拼接
9.获取文件大小
import osprint(os.path.getsize(r'b.txt')) #获取文件大小,单位为bytes
sys模块
1.path
获取当前python解释器相关文件的路径,结果以列表形式返回
import sysprint(sys.path)
2.version
获取当前python解释器版本的各种信息
import sysprint(sys.version)
3.platform
查看当前操作系统平台(32/64)
import sysprint(sys.platform)
json模块
dump/dumps/load/loads
转换为json格式时所有的单引号''会自动换成双引号""
import json
d = {'name': 'jason', 'pwd': 123}with open(r'b.txt', 'w', encoding='utf8') as f:f.write(json.dumps(d)) #将字典转换为json格式并写入txt文件with open(r'b.txt', 'r', encoding='utf8') as f:data = f.read()data1 = json.loads(data) #将读取出来的json格式转换为对应的数据类型print(data1, type(data1))
dump() | 将数据转换为json格式并写入到文件中 |
dumps() | 将数据转换为json格式 |
load() | 将文件内json数据转换为对应的格式并自动读取 |
loads() | 将json数据转换为对应的格式 |
迭代器、模块的简单总结相关推荐
- python:容器、迭代器、生成器 简单介绍
python:容器.迭代器.生成器 简单介绍 python提供了多种数据类型来存放数据项. 之前已经介绍了几个python中常用的容器,分别是列表list.元组tuple.字典dict和集合set. ...
- Discuz! X2.5 添加自定义数据调用模块(简单方法)
转:http://521-wf.com/archives/46.html Discuz! X2.5 添加自定义数据调用模块(简单方法) Discuz!X系列的diy功能还是相当不错的,在对其进行二次开 ...
- python操作微信电脑版_Python使用itchat模块实现简单的微信控制电脑功能示例
本文实例讲述了Python使用itchat模块实现简单的微信控制电脑功能.分享给大家供大家参考,具体如下: #!/usr/bin/python #coding=UTF-8 import request ...
- python 微信模块_Python使用itchat模块实现简单的微信控制电脑功能示例
本文实例讲述了python使用itchat模块实现简单的微信控制电脑功能.分享给大家供大家参考,具体如下: #!/usr/bin/python #coding=UTF-8 import request ...
- python requests 示例_Python Requests模块的简单示例
这篇文章主要为大家详细介绍了Python Requests模块的简单示例,具有一定的参考价值,可以用来参考一下. 对python这个高级语言感兴趣的小伙伴,下面一起跟随512笔记的小编两巴掌来看看吧! ...
- 思源黑体ttf_模块模板 | 简单方法替换将TTF格式字体转换为Magisk模块
注 意 本模块还处于测试阶段,不保证完全稳定,欢迎大家下载测试.如介意请不要使用. 由topjohnwu开发的Magisk(又称「面具」)工具由于其「systemless」的便捷特性已经受到越来越多 ...
- boost::proto模块实现简单的算术表达式求值器的测试程序
boost::proto模块实现简单的算术表达式求值器的测试程序 实现功能 C++实现代码 实现功能 boost::proto模块实现简单的算术表达式求值器的测试程序 C++实现代码 #include ...
- boost::contract模块实现简单queue的测试程序
boost::contract模块实现简单queue的测试程序 实现功能 C++实现代码 实现功能 boost::contract模块实现简单queue的测试程序 C++实现代码 #include & ...
- python中pickle模块的用法_Python中json模块和pickle模块的简单介绍(附示例)
本篇文章给大家带来的内容是关于Python中json模块和pickle模块的简单介绍(附示例),有一定的参考价值,有需要的朋友可以参考一下,希望对你有所帮助. Python中的json模块和pickl ...
- python中excel制作成绩报表_python制作简单excel统计报表2之操作excel的模块openpyxl简单用法...
python制作简单excel统计报表2之操作excel的模块openpyxl简单用法 # coding=utf-8 from openpyxl import Workbook, load_workb ...
最新文章
- 骆驼iptv_骆驼路线的主/从故障转移
- ubuntu修改ip地址后如何保存_如何在 Ubuntu 中检查你的 IP 地址 | Linux 中国
- C++11之异步调用
- 2009年上半年网络工程师考试下午试卷参考答案(二)
- php 算法 二进制文件,关于PHP二进制流 逐bit的低位在前算法(详解)_PHP教程
- “约见”面试官系列之常见面试题第二十一篇之函数防抖和节流(建议收藏)
- 源代码加密-防泄密解决方案-SDC沙盒
- 匿名管道和pipe函数
- Direct Training for Spiking Neural Networks: Faster, Larger, Better
- JHelpers——一个善良忠实的仆人
- 优先队列-二叉堆-堆排序原理-Java相关API
- 已经到了退休年龄的城乡居民,可以一次性补交十五年的养老金吗?
- 对话MySQL之父:代码一次性完成才是优秀程序员
- 【渝粤教育】国家开放大学2018年秋季 0056-21T知识产权法 参考试题
- ESXi开启SSH的方法总结
- 【扫盲系列】网络术语
- Windows实例通过IIS如何搭建多个FTP站点
- [MEM]Backdoor Access Memory
- php怎么把时间精确到毫秒,PHP date日期格式化精确到毫秒ms/微秒µs (000000问题)...
- 基于vue,安装vux-ui步骤
热门文章
- python字典转字符串并输出其长度_从Python中SOX的字符串输出中获取字典中的可用数据...
- 宁夏新八景[之一]:古峡新韵
- 浏览器网页 自动转格式化显示json数据
- springboot-grpc
- inputstream流乱码_InputStream读取文件乱码
- hcl出现“Invalid ciphertext password.”错误的解决方法
- 五星好评的蓝牙耳机长什么样子?2021高人气蓝牙耳机榜单前五
- 拉网小调(民歌介绍)
- 职业规划-Android工程师
- CUBEMX+FreeRTOS使用ArmComplier6(AC6)编译器的设置方法