重要内置函数

  1. 1.map() 映射
  2. l1 = [1, 2, 3, 4, 5]
  3. # def func(a):
  4. # return a+1
  5. res = map(lambda x:x+1, l1)
  6. print(list(res))
  7. 2.max()\min()
  8. l1 = [11, 22, 33, 44]
  9. res = max(l1)
  10. d1 = {'zj':100,
  11. 'jason': 99999,
  12. 'bekr':888080,
  13. 'jerry':45455454
  14. }
  15. def func(a):
  16. return d1.get(a)
  17. # res = max(d1,key=lambda k:d1.get(k))
  18. res = max(d1, key=func)
  19. print(res)
  20. 3.reduce
  21. 传多个值 返回一个值
  22. 把列表中所有的数值加一起
  23. from functools import reduce
  24. l1 = [11, 22, 334, 4555, 666, 777, 8888, 222323]
  25. res = reduce(lambda a, b: a + b, l1)
  26. print(res)
  27. 4.zip 多个数据集合 组合 一一对应,如果那个集合数据比较多,多出部分 直接丢掉
  28. l1 = [11, 22, 33, 44, 55]
  29. l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
  30. l3 = [1, 2, 3, 4, 5]
  31. res = zip(l1, l2, l3)
  32. print(list(res))
  33. l1 = [11, 22, 33]
  34. l2 = ['jason', 'kevin', 'oscar', 'jerry', 'tony']
  35. l3 = [1, 2, 3, 4]
  36. res = zip(l1, l2, l3)
  37. print(list(res))
  38. 5.filter 过滤 统计列表中比40大的值
  39. l1 = [11,22,33,44,55,66,778,888]
  40. res = filter(lambda x: x > 40, l1)
  41. print(list(res))
  42. 6.sorted 排序
  43. l1 = [21,12,53,64,88,44,333,555]
  44. res = sorted(l1)
  45. print(res) # 默认升序

常见内置函数

  1. # 1.abs() 绝对值
  2. # print(abs(-100)) # 100
  3. # print(abs(100)) # 100
  4. # 2.all() 所有数据值对应的布尔值为True结果才是True否则返回Flase
  5. # print(all([0,1, 2, 3])) # False
  6. # print(all([1, 2, 3, True])) # True
  7. # 3.any() 所有数据值对应的布尔值又一个为 True结果就是True 否则返回Flase
  8. # print(any([0, None, '', 1])) # True
  9. # print(any([0, None, '', ])) # False
  10. # 4.bin() oct() hex() int()
  11. # 5.bytes() 转换成bytes类型
  12. # s1 = '今天周五 内容也简单'
  13. # print(s1.encode('utf8'))
  14. # print(bytes(s1,'utf8'))
  15. # 6.callable() 判断名字是否可以加括号调用
  16. # name = 'jason'
  17. # def index():
  18. # print('from index')
  19. # print(callable(name)) # False
  20. # print(callable(index)) # True
  21. # 7.chr() ord() 基于ASCII码做数字与字母的转换
  22. # print(chr(65)) # A
  23. # print(ord('A')) # 65
  24. # 8.dir() 返回括号内对象能够调用的名字
  25. # print(dir('hello')) # 内置函数
  26. # 9.divmod() 元组 第一个数据为整除数 第二个是余数
  27. # res = divmod(100, 2)
  28. # print(res) # (50, 0)
  29. # res = divmod(100, 3)
  30. # print(res) # (33, 1)
  31. """
  32. 总数据 每页展示的数据 总页码
  33. 100 10 10
  34. 99 10 10
  35. 101 10 11
  36. """
  37. # page_num, more = divmod(999999, 21)
  38. # print(divmod(99999, 10)) # (9999, 9)
  39. #
  40. # if more:
  41. # page_num += 1
  42. # print('总页码为:',page_num) # 总页面为: 47619
  43. # 10.enumerate() 枚举
  44. # # 11.dval() exec() 能够识别字符串中的python并执行
  45. # s1 = 'print("哈哈哈")'
  46. # eval(s1)
  47. # exec(s1)
  48. # s2 = 'for i in range(100):print(i)'
  49. # eval(s2) # 报错 # 只能识别简单的python代码 具有逻辑性的都不行
  50. # exec(s2) # 可以识别具有一定逻辑性的python代码
  51. # 12.hash() 哈希加密
  52. # print(hash('jason'))
  53. # 13.id()数据的地址 input()输入 isinstance()输入两个值 第二个值判断第一个值是不是输入的类型
  54. # 14.open() 打开文件
  55. # 15.pow() 幂指数(次方) **
  56. # 16.range() 工厂 顾头不顾尾
  57. # 一个值 0-该数值前一个
  58. # 两个值 从第一个开始到后面的值前一个
  59. # 三个值 输出等差数列 第三个值为等差值
  60. # 17.round() 五舍六入 应该是python对数值不敏感导致
  61. # print(round(98.3)) # 98
  62. # print(round(98.5)) # 98
  63. # print(round(98.6)) # 99
  64. # 18.sum() 求和
  65. # print(sum([11, 22, 33, 44, 55, 66, 77])) # 308

可迭代对象

  1. 1.可迭代对象
  2. 对象内置有__iter__方法的都称为可迭代对象
  3. """
  4. 1.内置方法 通过点的方式能够调用的方法
  5. 2.__iter__ 双下iter方法
  6. """
  7. 2.可迭代对象的范围
  8. 不是可迭代对象
  9. int float bool 函数对象
  10. 是可迭代对象
  11. str list dict tuple set 文件对象
  12. 3.可迭代的含义
  13. """
  14. 迭代:更新换代(每次更新都必须依赖上一次的结果)
  15. eg:手机app更新
  16. """
  17. 可迭代对象在python中可以理解为是否支持for循环

迭代器对象

  1. 1.迭代器对象
  2. 是有可迭代对象调用__iter__方法产出的
  3. 迭代器对象判断的本质是看是否内置有__iter____next__
  4. 2.迭代对象的作用
  5. 提供了一种不依赖于索引取值的方式
  6. 正因为有迭代器的存在 我们的字典 集合才能够被for循环
  7. 3.迭代器对象实操
  8. s1 = 'hello' # 可迭代对象
  9. res = s1.__iter__() # 迭代器对象
  10. print(res.__next__()) # 迭代取值 for 循环的本质
  11. 一旦__next__取不到值 会直接报错
  12. 4.注意事项
  13. 可迭代对象调用__iter__会成为迭代器对象 迭代器对象如果还调用__iter__不会有任何变化 还是迭代器对象本身

for循环的本质

  1. for 变量名 in 可迭代对象:
  2. 循环体代码
  3. """
  4. 1.先将in后的数据调用__iter__转变成迭代器对象
  5. 2.依次让迭代器对象调用__next__取值
  6. 3.一旦__next__取不到值报错 for循环会自动捕获并处理
  7. """

昨日作业

  1. # 有下列用户数据
  2. # user_data = {
  3. # '1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']},
  4. # '2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']},
  5. # '3': {'name': 'oscar', 'pwd': '222', 'access': ['1']}
  6. # }
  7. # 并有三个函数
  8. # def func1():
  9. # pass
  10. # def func2():
  11. # pass
  12. # def func3():
  13. # pass
  14. #
  15. # 要求: 调用上述三个函数的时候需要从user_data中校验用户身份是否正确
  16. # 并获取当前登录用户拥有的可执行函数功能编号即键access对应的功能编号列表
  17. # func1是1、func2是2、func3是3
  18. # 并且一旦用户登录成功之后后续函数的调用不再校验用户身份
  19. # 请思考如何获取函数功能编号
  20. # 如何校验用户身份
  21. # 如何校验权限
  22. # ps: 装饰器知识
  23. # 附赠: 实现上述主体功能即可
  24. # 其他扩展优化功能可暂且不写
  25. #
  26. # '''
  27. # 1.先编写校验用户身份的装饰器
  28. # 2.然后再考虑如何保存用户登录状态
  29. # 3.再完善各种需求
  30. # '''

答案

  1. user_data = {
  2. '1': {'name': 'jason', 'pwd': '123', 'access': ['1', '2', '3']},
  3. # '1': {'name': 'jason', 'pwd': '123', 'access': [func1, func2, fun3]},
  4. '2': {'name': 'kevin', 'pwd': '321', 'access': ['1', '2']},
  5. '3': {'name': 'oscar', 'pwd': '222', 'access': ['1']}
  6. }
  7. """
  8. 1.先写模板
  9. 2.再写用户校验
  10. 3.记录用户登录状态
  11. """
  12. is_login = {
  13. 'login_status': False, # 记录用户是否登录
  14. 'user_access': None # 记录登录用户的权限
  15. }
  16. def loin_auth(func_id):
  17. def outer(func_name):
  18. def inner(*args, **kwargs):
  19. # 6.先校验用户是否登录
  20. if is_login.get('login_status'):
  21. # 8.需要校验功能编号是否在当前登录的用户权限中
  22. if func_id not in is_login.get('user_access'):
  23. print(f'您没有功能编号为{func_id}的权限')
  24. return
  25. res = func_name(*args, **kwargs)
  26. return res
  27. # 1.先获取用户的编号
  28. user_id = input('请输入您的编号>>>>:').strip()
  29. # 2.校验用户编号是否存在
  30. if user_id not in user_data:
  31. print('用户编号不存在 无法完成身份校验 请走开!!!')
  32. return
  33. # 3.获取用户的用户名和密码
  34. username = input('please input your username>>>:').strip()
  35. password = input('please input your password>>>:').strip()
  36. # 4.获取用户编号对应的真实数据进行比对
  37. user_dict = user_data.get(user_id)
  38. if username == user_dict.get('name') and password == user_dict.get('pwd'):
  39. # 5.登录成功之后修改字典中登录状态
  40. is_login['login_status'] = True
  41. # 6.记录当前登录用户的权限编号
  42. is_login['user_access'] = user_dict.get('access')
  43. # 7.校验当前函数编号是否在当前用户权限列表内
  44. if func_id in user_dict.get('access'):
  45. res = func_name(*args, **kwargs)
  46. return res
  47. else:
  48. print(f'您没有功能编号为{func_id}的权限')
  49. else:
  50. print('用户名和密码错误')
  51. return inner
  52. return outer
  53. @loin_auth('1')
  54. def func1():
  55. print('执行函数func1')
  56. @loin_auth('2')
  57. def func2():
  58. print('执行函数func2')
  59. @loin_auth('3')
  60. def func3():
  61. print('执行函数func3')
  62. func1()
  63. func2()
  64. func3()

python进阶之路14 之函数内置方法、可迭代对象、异常捕获处理的更多相关文章

  1. Python-全局函数(内置方法、内置函数)

    Python有很多内置方法,这些都全局可用 abs() 求数值的绝对值,如果是复数则返回其模 print(abs(-17), abs(30.2), abs(3+4j)) # Python中复数表示为 ...

  2. 【python基础】第09回 数据类型内置方法 01

    本章内容概要 1.数据类型的内置方法简介 2.整型相关方法 3.浮点型相关方法 4.字符串相关方法 5.列表相关方法 本章内容详情 1.数据类型的内置方法简介 数据类型是用来记录事物状态的,而事物的状 ...

  3. Python:数字类型和字符串类型的内置方法

    一.数字类型内置方法 1.1 整型的内置方法 作用 描述年龄.号码.id号 定义方式 x = 10 x = int('10') x = int(10.1) x = int('10.1') # 报错 内 ...

  4. python之字符串,列表,字典,元组,集合内置方法总结

    目录 数字类型的内置方法 整型/浮点型 字符串类型的内置方法 列表的内置方法 字典的内置方法 元组的内置方法 集合类型内置方法 布尔类型 数据类型总结 数字类型的内置方法 整型/浮点型 加 + 减 - ...

  5. 【python基础】第11回 数据类型内置方法 02

    本章内容概要 列表内置方法 字典内置方法 元组内置方法 集合内置方法 可变类型与不可变类型 本章内容详细 1.列表内置方法 list 列表在调用内置方法之后不会产生新的值 1.1 统计列表中的数据值的 ...

  6. 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 ...

  7. Python进阶【第六篇】内置函数中好玩的几个(今天写的太水)

    zip()函数 两个参数一一对应,参数是序列类型,序列包括列表,元组,字符串,当两个序列不等长时,按公共最长部分匹配,形似“拉链”. max()和min()函数 以max()为例,min()类似,只是 ...

  8. Python全栈之路----函数----内置方法

    Built-in Functions abs() dict() help() min() setattr() all() dir() hex() next() slice() any() divmod ...

  9. python 函数内置方法short_desc

    1. 给函数设置一个文本 def action_checked(self, request): pass action_checked.short_desc = "签到" # sh ...

  10. Python学习day07 - Python进阶(1) 内置方法

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

随机推荐

  1. Selenium+Python系列 - 开发环境搭建

    一.写在前面 我从未想过自己会写python系列的自动化文章,有些同学会问,那你现在为什么又开始写了? 不止一个人找过我,问我可以写一些Python自动化的文章吗,答案是肯定的. 笔者Java党,整P ...

  2. 靶机: medium_socnet

    靶机: medium_socnet 准备工作 需要你确定的事情: 确定 kali 已经安装,并且能正常使用[本文不涉及 kali 安装配置] VirtualBox 以前能正常导入虚拟文件 ova 能正 ...

  3. python渗透测试入门——基础的网络编程工具

    <Python黑帽子--黑客与渗透测试编程之道学习>这本书是我在学习安全的过程中发现的在我看来十分优秀的一本书,业内也拥有很高的评价,所以在这里将自己的学习内容分享出来. 1.基础的网络编 ...

  4. 什么是ForkJoin?看这一篇就能掌握!

    摘要:ForkJoin是由JDK1.7之后提供的多线程并发处理框架. 本文分享自华为云社区<[高并发]什么是ForkJoin?看这一篇就够了!>,作者: 冰 河. 在JDK中,提供了这样一 ...

  5. hadoop配置day01

    hadoop 安装jdk 配置文件: sudo vim /etc/profile 配置文件: export JAVA_HOME=/home/hadoop/jvm/jdk1.8.0_341 export ...

  6. 嵌入式-C语言基础:指针偏移打印数组

    在C语言中,数组名代表数组中首元素的地址,所以,下面两句获取数组的首地址是等价的: #include<stdio.h> int main() { int a[5]={1,2,3,4,5}; ...

  7. C#结构体大小问题

    using System; using System.Collections.Generic; using System.Linq; using System.Runtime.InteropServi ...

  8. 32bit和64bit系统的区别,运行机制浅析

    32bit:内存的最大寻址空间是2^32=4G,就是说32位系统的处理器最大只支持到4G内存 64bit:内存的最大寻址空间是2^64,大于1亿GB,但是实际上支持不到那么大的内存,大概是2^40+ ...

  9. spring运行报500 bean不存在

    spring运行报500 bean不存在 bean不存在 步骤: ​ 查看bean是否注入成功 ​ junit单元测试 ​ 问题,不一定在我们底层,是spring出现了问题 ​ SpringMVC整合 ...

  10. Linux 交叉编译使用代码覆盖GCOV及LCOV

    1. GCOV GCOV是GCC自带的代码覆盖工具,GCOV. 在 GCC 编译的时加入特殊的编译选项,生成可执行文件,和 *.gcno: 运行(测试)生成的可执行文件,生成了 *.gcda 数据文件 ...