python进阶之路14 之函数内置方法、可迭代对象、异常捕获处理
重要内置函数
1.map() 映射
l1 = [1, 2, 3, 4, 5]
# def func(a):
# return a+1
res = map(lambda x:x+1, l1)
print(list(res))
2.max()\min()
l1 = [11, 22, 33, 44]
res = max(l1)
d1 = {'zj':100,
'jason': 99999,
'bekr':888080,
'jerry':45455454
}
def func(a):
return d1.get(a)
# res = max(d1,key=lambda k:d1.get(k))
res = max(d1, key=func)
print(res)
3.reduce
传多个值 返回一个值
把列表中所有的数值加一起
from functools import reduce
l1 = [11, 22, 334, 4555, 666, 777, 8888, 222323]
res = reduce(lambda a, b: a + b, l1)
print(res)
4.zip 多个数据集合 组合 一一对应,如果那个集合数据比较多,多出部分 直接丢掉
l1 = [11, 22, 33, 44, 55]
l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
l3 = [1, 2, 3, 4, 5]
res = zip(l1, l2, l3)
print(list(res))
l1 = [11, 22, 33]
l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
l3 = [1, 2, 3, 4]
res = zip(l1, l2, l3)
print(list(res))
5.filter 过滤 统计列表中比40大的值
l1 = [11,22,33,44,55,66,778,888]
res = filter(lambda x: x > 40, l1)
print(list(res))
6.sorted 排序
l1 = [21,12,53,64,88,44,333,555]
res = sorted(l1)
print(res) # 默认升序
常见内置函数
# 1.abs() 绝对值
# print(abs(-100)) # 100
# print(abs(100)) # 100
# 2.all() 所有数据值对应的布尔值为True结果才是True否则返回Flase
# print(all([0,1, 2, 3])) # False
# print(all([1, 2, 3, True])) # True
# 3.any() 所有数据值对应的布尔值又一个为 True结果就是True 否则返回Flase
# print(any([0, None, '', 1])) # True
# print(any([0, None, '', ])) # False
# 4.bin() oct() hex() int()
# 5.bytes() 转换成bytes类型
# s1 = '今天周五 内容也简单'
# print(s1.encode('utf8'))
# print(bytes(s1,'utf8'))
# 6.callable() 判断名字是否可以加括号调用
# name = 'jason'
# def index():
# print('from index')
# print(callable(name)) # False
# print(callable(index)) # True
# 7.chr() ord() 基于ASCII码做数字与字母的转换
# print(chr(65)) # A
# print(ord('A')) # 65
# 8.dir() 返回括号内对象能够调用的名字
# print(dir('hello')) # 内置函数
# 9.divmod() 元组 第一个数据为整除数 第二个是余数
# res = divmod(100, 2)
# print(res) # (50, 0)
# res = divmod(100, 3)
# print(res) # (33, 1)
"""
总数据 每页展示的数据 总页码
100 10 10
99 10 10
101 10 11
"""
# page_num, more = divmod(999999, 21)
# print(divmod(99999, 10)) # (9999, 9)
#
# if more:
# page_num += 1
# print('总页码为:',page_num) # 总页面为: 47619
# 10.enumerate() 枚举
# # 11.dval() exec() 能够识别字符串中的python并执行
# s1 = 'print("哈哈哈")'
# eval(s1)
# exec(s1)
# s2 = 'for i in range(100):print(i)'
# eval(s2) # 报错 # 只能识别简单的python代码 具有逻辑性的都不行
# exec(s2) # 可以识别具有一定逻辑性的python代码
# 12.hash() 哈希加密
# print(hash('jason'))
# 13.id()数据的地址 input()输入 isinstance()输入两个值 第二个值判断第一个值是不是输入的类型
# 14.open() 打开文件
# 15.pow() 幂指数(次方) **
# 16.range() 工厂 顾头不顾尾
# 一个值 0-该数值前一个
# 两个值 从第一个开始到后面的值前一个
# 三个值 输出等差数列 第三个值为等差值
# 17.round() 五舍六入 应该是python对数值不敏感导致
# print(round(98.3)) # 98
# print(round(98.5)) # 98
# print(round(98.6)) # 99
# 18.sum() 求和
# print(sum([11, 22, 33, 44, 55, 66, 77])) # 308
可迭代对象
1.可迭代对象
对象内置有__iter__方法的都称为可迭代对象
"""
1.内置方法 通过点的方式能够调用的方法
2.__iter__ 双下iter方法
"""
2.可迭代对象的范围
不是可迭代对象
int float bool 函数对象
是可迭代对象
str list dict tuple set 文件对象
3.可迭代的含义
"""
迭代:更新换代(每次更新都必须依赖上一次的结果)
eg:手机app更新
"""
可迭代对象在python中可以理解为是否支持for循环
迭代器对象
1.迭代器对象
是有可迭代对象调用__iter__方法产出的
迭代器对象判断的本质是看是否内置有__iter__和__next__
2.迭代对象的作用
提供了一种不依赖于索引取值的方式
正因为有迭代器的存在 我们的字典 集合才能够被for循环
3.迭代器对象实操
s1 = 'hello' # 可迭代对象
res = s1.__iter__() # 迭代器对象
print(res.__next__()) # 迭代取值 for 循环的本质
一旦__next__取不到值 会直接报错
4.注意事项
可迭代对象调用__iter__会成为迭代器对象 迭代器对象如果还调用__iter__不会有任何变化 还是迭代器对象本身
for循环的本质
for 变量名 in 可迭代对象:
循环体代码
"""
1.先将in后的数据调用__iter__转变成迭代器对象
2.依次让迭代器对象调用__next__取值
3.一旦__next__取不到值报错 for循环会自动捕获并处理
"""
昨日作业
# 有下列用户数据
# user_data = {
# '1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']},
# '2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']},
# '3': {'name': 'oscar', 'pwd': '222', 'access': ['1']}
# }
# 并有三个函数
# def func1():
# pass
# def func2():
# pass
# def func3():
# pass
#
# 要求: 调用上述三个函数的时候需要从user_data中校验用户身份是否正确
# 并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表
# func1是1、func2是2、func3是3
# 并且一旦用户登录成功之后后续函数的调用不再校验用户身份
# 请思考如何获取函数功能编号
# 如何校验用户身份
# 如何校验权限
# ps: 装饰器知识
# 附赠: 实现上述主体功能即可
# 其他扩展优化功能可暂且不写
#
# '''
# 1.先编写校验用户身份的装饰器
# 2.然后再考虑如何保存用户登录状态
# 3.再完善各种需求
# '''
答案
user_data = {
'1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']},
# '1': {'name': 'jason', 'pwd': '123', 'access': [func1, func2, fun3]},
'2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']},
'3': {'name': 'oscar', 'pwd': '222', 'access': ['1']}
}
"""
1.先写模板
2.再写用户校验
3.记录用户登录状态
"""
is_login = {
'login_status': False, # 记录用户是否登录
'user_access': None # 记录登录用户的权限
}
def loin_auth(func_id):
def outer(func_name):
def inner(*args, **kwargs):
# 6.先校验用户是否登录
if is_login.get('login_status'):
# 8.需要校验功能编号是否在当前登录的用户权限中
if func_id not in is_login.get('user_access'):
print(f'您没有功能编号为{func_id}的权限')
return
res = func_name(*args, **kwargs)
return res
# 1.先获取用户的编号
user_id = input('请输入您的编号>>>>:').strip()
# 2.校验用户编号是否存在
if user_id not in user_data:
print('用户编号不存在 无法完成身份校验 请走开!!!')
return
# 3.获取用户的用户名和密码
username = input('please input your username>>>:').strip()
password = input('please input your password>>>:').strip()
# 4.获取用户编号对应的真实数据进行比对
user_dict = user_data.get(user_id)
if username == user_dict.get('name') and password == user_dict.get('pwd'):
# 5.登录成功之后修改字典中登录状态
is_login['login_status'] = True
# 6.记录当前登录用户的权限编号
is_login['user_access'] = user_dict.get('access')
# 7.校验当前函数编号是否在当前用户权限列表内
if func_id in user_dict.get('access'):
res = func_name(*args, **kwargs)
return res
else:
print(f'您没有功能编号为{func_id}的权限')
else:
print('用户名和密码错误')
return inner
return outer
@loin_auth('1')
def func1():
print('执行函数func1')
@loin_auth('2')
def func2():
print('执行函数func2')
@loin_auth('3')
def func3():
print('执行函数func3')
func1()
func2()
func3()
python进阶之路14 之函数内置方法、可迭代对象、异常捕获处理的更多相关文章
- Python-全局函数(内置方法、内置函数)
Python有很多内置方法,这些都全局可用 abs() 求数值的绝对值,如果是复数则返回其模 print(abs(-17), abs(30.2), abs(3+4j)) # Python中复数表示为 ...
- 【python基础】第09回 数据类型内置方法 01
本章内容概要 1.数据类型的内置方法简介 2.整型相关方法 3.浮点型相关方法 4.字符串相关方法 5.列表相关方法 本章内容详情 1.数据类型的内置方法简介 数据类型是用来记录事物状态的,而事物的状 ...
- Python:数字类型和字符串类型的内置方法
一.数字类型内置方法 1.1 整型的内置方法 作用 描述年龄.号码.id号 定义方式 x = 10 x = int('10') x = int(10.1) x = int('10.1') # 报错 内 ...
- python之字符串,列表,字典,元组,集合内置方法总结
目录 数字类型的内置方法 整型/浮点型 字符串类型的内置方法 列表的内置方法 字典的内置方法 元组的内置方法 集合类型内置方法 布尔类型 数据类型总结 数字类型的内置方法 整型/浮点型 加 + 减 - ...
- 【python基础】第11回 数据类型内置方法 02
本章内容概要 列表内置方法 字典内置方法 元组内置方法 集合内置方法 可变类型与不可变类型 本章内容详细 1.列表内置方法 list 列表在调用内置方法之后不会产生新的值 1.1 统计列表中的数据值的 ...
- python学习day6 for循环 字符串的内置方法
1.for循环 和while相比 l=[1,2,3] i=0 while i <len(l) print(l[i]) i+=1 l=['a','b','c'] for item in l: pr ...
- Python进阶【第六篇】内置函数中好玩的几个(今天写的太水)
zip()函数 两个参数一一对应,参数是序列类型,序列包括列表,元组,字符串,当两个序列不等长时,按公共最长部分匹配,形似“拉链”. max()和min()函数 以max()为例,min()类似,只是 ...
- Python全栈之路----函数----内置方法
Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod ...
- python 函数内置方法short_desc
1. 给函数设置一个文本 def action_checked(self, request): pass action_checked.short_desc = "签到" # sh ...
- Python学习day07 - Python进阶(1) 内置方法
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
随机推荐
- 堆内存动态分配情况和jvm调优方向
由上图可以看出: 堆中分为新生代(占堆1/3内存)和老年代(占堆2/3内存), 新生代又分为Eden区(占新生代内存的8/10)和survivor区(占新生代内存的2/10), survivor区又分 ...
- JavaScript基本语法(函数与对象)
3.函数 #①内置函数 内置函数:系统已经声明好了可以直接使用的函数. #[1]弹出警告框 alert("警告框内容"); #[2]弹出确认框 用户点击『确定』返回true,点 ...
- Linux系统管理_用户管理
cat /etc/passwd #账户文件 cat /etc/shadow #密码文件 cat /etc/login.defs #密码策略机UID定义文件 #普通用户UID范围1000~60000:系 ...
- Vue学习之--------Scoped样式(2022/8/1)
1.场景 一个页面开发团队进行页面的开发设计.无可避免的会发生样式选择器命名的重复(id的重复.class的重复等).这样间接导致的后果就是.自己的页面样式好好的.在整合一起的时候.可能就会发生样式的 ...
- 1、小程序Vant_WebApp组件库的安装步骤和简单使用
Vant 1.小程序对于npm的支持 目前,小程序当中已经支持使用npm安装的第三方包,通过使用这些第三方包,我们可以提高对小程序开发的效率,但是在小程序当中使用所谓的npm包有如下的三个限制 不能支 ...
- golang中的变量阴影
索引:https://waterflow.link/articles/1666019023270 在 Go 中,在块中声明的变量名可以在内部块中重新声明. 这种称为变量阴影的原理很容易出现常见错误. ...
- day03-CSS
CSS 1.css介绍 css指的是层叠样式表(cascading style sheets) 官方文档:https://www.w3school.com.cn/css/index.asp 为什么需要 ...
- 恭喜磊哥喜提n+1
昨天下午两点多磊哥突然喊我下楼,第一反应是"这孙子,抽烟就直说,还说个事,你以外你是吉祥村大姐啊". 心里骂完以后我慢慢悠悠下楼了,见他在打电话我先默默点上一支,准备待他结束以后对 ...
- 5 why 分析法,一种用于归纳抽象出解决方案的好方法
最近在看了<微信背后的产品观 - 张小龙手抄版>,其中有段话如下: 用户需求是零散的,解决方案是归纳抽象的过程 那如何归纳抽象呢?是否有一定的实践方法论呢?经过一轮探讨和学习,有这些答案: ...
- Python处理刚刚,分钟,小时,天前等时间
简介 用爬虫获取目标网站数据后可能会遇见时间为处理刚刚,分钟,小时,天前等时间格式,如图 解决问题: 写了一个工具类来处理该问题,其中封装了两个函数 1. 将时间中的中文数字转换成阿拉伯数字 def ...