python学习-Day16
今日内容详细
内置函数补充
常见内置函数
help()
查看注释信息
help(len)
id()
返回一串相当于内存地址的数字
print(id('jojo'))
int()
类型转换、机制转换
isinstance()
判断数据类型
print(type('jason') is str) # 类型判断 不推荐
print(isinstance('jason', str)) # True
print(isinstance('jason', int)) # False
pow()
幂指数
print(pow(10,2))
round()
四舍五入
print(round(11, 1)) # 第二个参数控制需要保留几位小数部分
print(round(11.29, 1))
print(round(11.59, 1))
sum() 求和
print(sum([11,2,2,3,4,3,2]))
迭代器
迭代器即用来迭代取值的工具,迭代其实就是更新换代。每一次对过程的重复称为一次“迭代”,而每一次迭代得到的结果会作为下一次迭代的初始值,单纯的重复并不是迭代
eg:游戏的更新其实就是版本的迭代
# 单纯的循环 不是迭代
import time
while True:
print(123)
time.sleep(0.1)
# 属于迭代
n = 1
while True:
print(n)
n += 1
''' 每一次迭代的过程都需要依赖于上一次的结果'''
# 迭代取值
l1 = [11, 22, 33, 44, 55]
n = 0
while n < len(l1):
print(l1[n])
n += 1
'''不仅满足重复,而且以每次重新赋值后的n值作为下一次循环中新的索引进行取值,反复迭代,最终可以取尽列表中的值'''
可迭代对象
什么是可迭代对象?
从语法形式上讲,内置有__iter__方法的对象都可以称之为是可迭代对象,字符串、列表、元组、字典、集合、打开的文件都是可迭代对象
{'name':'jason'}.__iter__
{7,8,9}.__iter__
...
'''数据可以通过点的方式获取出 __iter__ (读作:双下iter方法)'''
哪些数据是可迭代对象?
'''我们可以通过依次列举并尝试调用__iter__方法来得知哪些数据是可迭代对象'''
# 列举所学数据类型
i = 11 # 整型不是
f = 11.11 # 浮点型不是
s = 'jojo' # 字符是
l = [1,2,3,4] # 列表是
d = {'name':'jojo','age':18} # 字典是
t = (1,2,3,4) # 元组是
se = {1,2,3,4,5} # 集合是
b = True # 布尔值不是
f = open() # 文件是
def index():pass # 普通函数不是
"""
属于可迭代对象的有
字符串、列表、字典、元组、集合、文件对象
可迭代对象其实就是为了后续迭代取值做准备
提供了不依赖于索引取值的方式
"""
迭代器对象
什么是迭代器对象?
调用 obj.iter() 方法返回的结果就是一个迭代器对象(Iterator)。
迭代器对象是内置有 iter 和 next 方法的对象
'''可迭代对象调用__iter__方法之后生成的结果就是迭代器对象,打开的文件本身就是一个迭代器对象,执行迭代器对象.iter()方法得到的仍然是迭代器本身,而执行迭代器.next()方法就会计算出迭代器中的下一个值。'''
迭代器对象的特征
'''含有 __iter__ 方法和 __next__ 方法'''
如何理解迭代器对象
'''迭代器对象能够极大的节省存储空间'''
# 迭代器对象:只要你需要我就给你,你不需要我就不产生
# 迭代器:Python提供的一种统一的、不依赖于索引的迭代取值方式,只要存在多个“值”,无论序列类型还是非序列类型都可以按照迭代器的方式取值
迭代器对象如何取值
'''调用__next__方法即可 如果取完了则会直接报错!!!'''
s={1,2,3} # 可迭代对象s
i=iter(s) # 本质就是在调用s.__iter__(),返回s的迭代器对象i
print(next(i)) # 1 本质就是在调用i.__next__()
print(next(i)) # 2
print(next(i)) # 3
print(next(i)) # 抛出StopIteration的异常,代表无值可取,迭代结束
'''
ps:开辟了一种不需要索引取值的方式(for循环底层依据的就是迭代器对象)
有了迭代器对象才出现了针对字典和集合的迭代取值操作
'''
迭代器对象补充说明
有些双下方法有简便写法
"""
__方法名__ 等价 方法名()
最为常见的两个是
__iter__ iter()
__next__ next()
"""
s = 'jojo'
print(s.__iter__())
print(iter(s))
print(s.__len__())
print(len(s))
小Tips
# 有一些可迭代对象本身也是迭代器对象 >>>: 文件对象
# 可迭代对象调用一次__iter__方法编程迭代器对象 ,如果继续调用,结果还是迭代器对象本身
s = 'jojo'
res = s.__iter__()
res1 = s.__iter__().__iter__().__iter__()
print(res, res1)
# <str_iterator object at 0x000001677D8AB278> <str_iterator object at 0x000001677D8AB4A8>
迭代取值的要求
s = 'camellia'
print(s.__iter__().__next__()) # c 每次先产生一个新的迭代器对象然后取值
print(s.__iter__().__next__()) # c 每次先产生一个新的迭代器对象然后取值
print(s.__iter__().__next__()) # c 每次先产生一个新的迭代器对象然后取值
print(s.__iter__().__next__()) # c 每次先产生一个新的迭代器对象然后取值
res = s.__iter__() # 已经变成迭代器对象了
print(res.__iter__().__next__()) # c 之后再调用还是自身
print(res.__iter__().__next__()) # a
print(res.__iter__().__next__()) # m
print(res.__iter__().__next__()) # e
迭代取值与索引取值的对比
索引取值
优势:可以反复获取相同的元素,并且没有固定的方向。
劣势:只能支持有序的容器类型,无序的无法取值兼容性没有迭代取值高。
迭代取值
优势:兼容所有的容器类型
劣势:取值的顺序永远都是从左往右,并且无法重复获取,取完就完了。除非取尽,否则无法获取迭代器的长度。
"""
迭代器里面的东西是固定的,每取一个就会少一个,取完就空了
"""
# 真正底层的迭代取值后续可能很少用,一般都是for循环代替
for循环内部原理
for循环又称为迭代循环,in后可以跟任意可迭代对象
开胃小菜
l1 = [11,22,33,44,55,66,77,88]
'''需求:不依赖于for循环 完成对列表元素的取值'''
res = l1.__iter__()
n = 0
while n < len(l1):
print(res.__next__())
n += 1
res = l1.__iter__()
while True:
print(res.__next__())
for循环底层原理
"""
for循环底层原理
for 变量名 in 可迭代对象:
循环体代码
"""
# 1.会将in后面的数据调用__iter__()变成迭代器对象
# 为什么文件对象也可以for循环 ==> 因为本身就是迭代器对象 再次调用不变
# 2.针对产生的迭代器对象依次调用__next__()方法迭代取值
# 3.当值取完之后 会自动处理报错并退出循环
for循环的本质
# 利用while与异常捕获 实现for循环的功能
info = {'name': 'jojo', 'age': 18, 'pwd': 123}
# 1.先转换成迭代器对象
# res = info.__iter__()
res = iter(info)
# 2.迭代取值
while True:
# print(res.__next__())
try:
print(next(res))
except StopIteration as e:
# 结束while循环
break
异常处理
什么是异常?
代码运行出错之后就是异常 异常会导致程序立刻停止
是我们以后在编程过程中需要极力避免的情况(异常的外号>>>:bug)
异常信息的组成部分
Traceback (most recent call last):
File "/Users/jiboyuan/PycharmProjects/day16/05 异常处理.py", line 3, in <module>
name
NameError: name 'name' is not defined
# 1.line关键字所在的一行
用于提示你代码哪一行出错了 点击前面的蓝色字体可以直接定位
'''如果报错的信息很长 一般最后一个才是'''
# 2.NameError错误的类型
代码的报错也可以分为很多类型
# 3.name 'name' is not defined
具体的报错原因(就是解决报错的答案)
异常的分类
语法异常
# 是不被允许的 如果出现了必须立刻改正
eg:if分支结构都不会写...
if 1, while :,...
逻辑异常
# 可以允许的 如果出现了尽快修改即可
eg:代码动态获取到了一个字符串类型的数据但是调用了列表的内置方法
name = 'jason'
print(name.append())
# 改bug其实就是在重新梳理你的思路
"""
公司里面写代码的流程
1.程序员写完之后自己先大致测试
2.然后交给专门的测试人员去测试
"""
异常的类型(有很多)
print(name) # NameError 名字错误
l1 = [11, 22, 33]
print(l1[100]) # IndexError 索引错误
d = {'name':'jason'}
print(d['age']) # KeyError 键错误
int('jason') # ValueError 值错误
异常处理实操
'''有时候针对可能会出错的代码 也可以自己提前写好处理措施'''
正常情况下代码出错 肯定是直接导致程序停止
但是也可以自己通过代码来处理 从而避免程序的停止
基本语法结构
try:
可能会出错的代码
except 错误的类型1 as e: # e指代的就是错误的提示信息
针对性的处理措施
except 错误的类型2 as e: # e指代的就是错误的提示信息
针对性的处理措施
except 错误的类型3 as e: # e指代的就是错误的提示信息
针对性的处理措施
错误类型
很多时候可能自己都不知道会报什么类型的错误
'''万能异常:常见的报错都可以照单全收'''
try:
可能会出错的代码
except Exception as e:
统一的处理措施
##############################################
异常处理使用准则:
1.被检测的代码越少越好
2.能尽量少用就尽量少用
##############################################
了解异常处理
结合else使用
# 当try检测的代码没有发生异常 正常运行完毕之后执行else的子代码
try:
可能会出错的代码
except Exception as e:
统一的处理措施
else:
可能会出错的代码没有出错 最后走else子代码
结合finally使用
# 无论try检测的代码是否有异常 最后都会执行finally子代码
try:
name
except Exception as e:
print(e)
finally:
无论try检测的代码是否有异常 最后都会执行finally子代码
全部整合到一起使用
try:
name
except Exception as e:
print(e)
else:
print('没报错 好极了')
finally:
print('管你错不错 都执行')
断言
name = 'jojo'
assert isinstance(name,str)
主动报错*
raise NameError('不爽 就要作!!!')
'''由于是主动报错 所以可以非常明确的知道错误的类型'''
python学习-Day16的更多相关文章
- python学习 day16 (3月21日)----(正则)
背景:(对程序的伤害) #__author : 'liuyang' #date : 2019/3/21 0021 上午 10:34 #模块和功能之间的关系 #先有的功能 #正则表达式 #time模块 ...
- python学习-day16:函数作用域、匿名函数、函数式编程、map、filter、reduce函数、内置函数r
一.作用域 作用域在定义函数时就已经固定住了,不会随着调用位置的改变而改变 二.匿名函数 lambda:正常和其他函数进行配合使用.正常无需把匿名函数赋值给一个变量. f=lambda x:x*x p ...
- python学习day16 模块(汇总)
模块(总) 对于range py2,与py3的区别: py2:range() 在内存中立即把所有的值都创建,xrange() 不会再内存中立即创建,而是在循环时边环边创建. py3:range() 不 ...
- Python学习day16-模块基础
<!doctype html>day16 - 博客 figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { ...
- python学习之旅
python学习分类 python基础 +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
随机推荐
- x64 番外篇——知识铺垫
写在前面 此系列是本人一个字一个字码出来的,包括示例和实验截图.由于系统内核的复杂性,故可能有错误或者不全面的地方,如有错误,欢迎批评指正,本教程将会长期更新. 如有好的建议,欢迎反馈.码字不易, ...
- 面试问题之计算机网络:TCP如何保证数据可靠传输
转载于:https://blog.csdn.net/liuchenxia8/article/details/80428157 TCP协议传输的特点主要就是面向字节流.传输可靠.面向连接. TCP保证数 ...
- 设备像素,CSS像素,设备独立像素
1.概念 设备像素(device pixel)简写DP 设备像素又称 **物理像素** ,是设备能控制显示的最小单位,我们可以把它看做显示器上的一个点.我们常说的 1920x1080像素分辨率就是用的 ...
- H5 视频播放解决方案
前两天,美团推出的杨洋H5火爆朋友圈.里面主要的是多段视频播放.暂停.听起来很简单,但是由于腾讯白名单限制,在微信浏览器,qq浏览器,会自动将video标签中非腾讯域名的视频 ,自动全屏,结尾追加视频 ...
- 微信小程序:手写日历组件
一.前言 最近公司要做一个酒店入住的小程序,不可避免的一定会使用到日历,而小程序没有内置的日历组件.在网上看了一下也没有非常适合需求的日历,于是自己写了一个. 二.代码 1. 原理分析 写一个日历只需 ...
- 微信小程序——gulp处理文件
懒癌直接贴代码,想写在写因为最近搞了一下小程序,直接使用微信的开发者工具搞感觉有点不习惯,并且看了几篇给小程序瘦身的博客,决定给自己的项目做一套配置文件,使用gulp来支持sass scss文件编译以 ...
- 一个命令完成[打包+同步七牛cdn+上传服务器]
webpack+gulp+qshell+npm-scripts实现一个命令完成[打包+同步cdn+上传服务器] 说明 由于我们用的七牛云存储,所以cdn也是走的七牛,所以并不适用于其他的cdn,但是思 ...
- Java实现链表反转(借助栈实现)
public class ListNode { int val; ListNode next = null; ListNode(int val) { this.val = val; } // 添加新的 ...
- 微服务架构学习与思考(09):分布式链路追踪系统-dapper论文学习
一.技术产生的背景 1.1 背景 先来了解一下分布式链路追踪技术产生的背景. 在现在这个发达的互联网世界,互联网的规模越来越大,比如 google 的搜索,Netflix 的视频流直播,淘宝的购物等. ...
- 解决stram++的host代理443端口被占用的问题(电脑有虚拟机进!!)
解决stram++的host代理443端口被占用的问题 一.steam++ 最近在用steam++这个开源且功能强大的加速器,过多就不介绍了 主页地址跳转:Steam++ - 主页 (steampp. ...