匿名函数

什么叫匿名函数?

我们之前学过的叫有名函数,就是有名字的函数

匿名函数 就是没有名字的函数,

语法

lambda 参数:返回值

  1. # 演示匿名函数的使用
  2. f = lambda x:x
  3. print(f)
  4. # <function <lambda> at 0x00000000005D1E18>
  5. s = f(1) # 注意 ,匿名函数调用拿到的是返回值。
  6. print(s)
  7. # 1

匿名函数一般与python内置方法连用。

max/min()

  1. '''
  2. 用法:
  3. max(可迭代对象,匿名函数)
  4. 返回最大值
  5. '''
  6. 比如说我们想要求出以下字典的最高/最低薪资的人的名字
  7. salary_dict = {
  8. 'nick': 3000,
  9. 'jason': 100000,
  10. 'tank': 5000,
  11. 'sean': 2000
  12. }
  13. print(max(salary_dict)) # 如果直接用max函数的话会按照字符串首字母顺序来排序
  14. # tank
  15. # 我们可以定义一个函数
  16. def func(k):
  17. return salary_dict[k]
  18. print(min(salary_dict,key=func))
  19. # sean
  20. print(max(salary_dict,key=func))
  21. # jason
  22. '''
  23. key=func 做的事情:
  24. 1. 循环salary_dict 取出所有的key值
  25. 2. 将每个key值放入func函数中,返回values,返回薪资
  26. 3. max函数进行排序
  27. '''
  28. # 用匿名函数实现
  29. print(max(salary_dict,key=lambda name:salary_dict[name]))
  30. # jason
  31. print(min(salary_dict,key=lambda name:salary_dict[name]))
  32. # sean

sorted()

  1. '''
  2. sorted(可迭代对象,reverse)
  3. sorted,排序,返回值找一个变量接收
  4. '''
  5. lis = [1, 3, 2, 5, 8, 6]
  6. lis = sorted(lis,reverse=True) # reverse=True 反转
  7. print(lis)
  8. # [8, 6, 5, 3, 2, 1]
  9. salary_dict = {
  10. 'nick': 3000,
  11. 'jason': 100000,
  12. 'tank': 5000,
  13. 'sean': 2000
  14. }
  15. def f2(item):
  16. return salary_dict[item]
  17. res = sorted(salary_dict,key=f2,reverse=True)
  18. print(res)
  19. # ['jason', 'tank', 'nick', 'sean']
  20. # 用匿名函数实现
  21. res = sorted(salary_dict,key=lambda item:salary_dict[item],reverse=True)
  22. print(res)
  23. # ['jason', 'tank', 'nick', 'sean']

map()

  1. '''
  2. map(匿名函数,可迭代对象)
  3. 映射
  4. '''
  5. name_list = ['jason', 'tank', 'sean']
  6. def f1(item):
  7. return item + "hahahhahahhahahhaha"
  8. res = map(f1,name_list)
  9. print(list(res))
  10. # ['jasonhahahhahahhahahhaha', 'tankhahahhahahhahahhaha', 'seanhahahhahahhahahhaha']
  11. # 匿名函数实现
  12. res = map(lambda name:f"{name} sb",name_list)
  13. print(list(res))
  14. # ['jason sb', 'tank sb', 'sean sb']

filter()

  1. '''
  2. filter(匿名函数,可迭代对象)
  3. 筛选,按照某种条件对可迭代对象操作。
  4. '''
  5. name_list = ['nick', 'jason sb', 'tank sb', 'sean sb']
  6. # 匿名函数实现
  7. res = filter(lambda name:name.endswith("sb"),name_list)
  8. print(list(res))
  9. # ['jason sb', 'tank sb', 'sean sb']
  10. lis = [2,3,4,5,6,7]
  11. def function(item):
  12. if item > 5:
  13. return True
  14. else:
  15. return False
  16. res = filter(function,lis)
  17. print(list(res))
  18. # [6, 7]
  19. # 匿名函数实现
  20. res = filter(lambda item:item > 5,lis)
  21. print(list(res))
  22. # [6, 7]

reduce函数

  1. from functools import reduce
  2. lst=[1,2,3,4]
  3. print(reduce(lambda x,y: x+y, lst))
  4. #计算过程如下:
  5. # 这个式子只有两个参数,没有初始化值,那么就取列表前2项,通过lambda函数计算结果
  6. #1+2=3,
  7. #上面计算的结果在与列表第三个元素通过lambda函数计算
  8. # 3+3=6
  9. #上面计算的结果在与列表第四个元素通过lambda函数计算
  10. # 6+4=10
  11. # 它还可以传入一个参数
  12. print(reduce(lambda x,y: x+y, lst,100))
  13. # 表示初始值是100,第一次计算从100加列表的第一个元素,得到的结果再与后面的值依次相加

内置函数

  1. ## 需要掌握
  2. 1.bytes() # 解码字符
  3. res = bytes("你好" ,encoding="utf8") # 解码成二进制
  4. print(res)
  5. '''
  6. 2.chr()/ord()
  7. 按照ascil码 将数字转换为对应字符
  8. ord 将字符转换为数字
  9. '''
  10. print(chr(65))
  11. print(ord("A"))
  12. '''
  13. 3.divmod()
  14. 将商 余数以元组形式返回
  15. '''
  16. print(divmod(10,3))
  17. '''
  18. 4.ennumerate() ********************重要
  19. 带有索引的值
  20. '''
  21. l = ["a","b","c"]
  22. for i in enumerate(l):
  23. print(i)
  24. # (0, 'a')
  25. # (1, 'b')
  26. # (2, 'c')
  27. '''
  28. 5.eval() ********************重要
  29. 将字符串两边的引号去掉,变成剩下的数据类型
  30. '''
  31. lis = "[1,2,3]"
  32. print(type(list))
  33. # <class 'type'>
  34. print(type(eval(lis)))
  35. # <class 'list'>
  36. '''
  37. 6.hash()
  38. 是否可哈希
  39. '''
  40. print(hash(10))
  41. # 10
  42. ##############################################################################################
  43. ## 了解
  44. '''
  45. 1. abs() ***
  46. 求绝对值
  47. '''
  48. print(abs(-1))
  49. # 1
  50. '''
  51. 2. all()
  52. 可迭代对象内元素全为真则返回真
  53. '''
  54. print(all([1,2,3]))
  55. # True
  56. '''
  57. 3. any()
  58. 可迭代对象内有一元素为真,则为真
  59. '''
  60. print(any([1,2,3,0]))
  61. # True
  62. '''
  63. 4. bin()
  64. oct()
  65. hex()
  66. 二进制、八进制、十六进制转换
  67. '''
  68. print(bin(17))
  69. print(oct(17))
  70. print(hex(17))
  71. # 0b10001
  72. # 0o21
  73. # 0x11
  74. '''
  75. 5. dir()
  76. 列出所有time的功能
  77. '''
  78. print(dir())
  79. # ['__annotations__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__',
  80. # '__name__', '__package__', '__spec__', 'i', 'l', 'lis', 'res']
  81. '''
  82. 6. frozenset()
  83. 不可变的集合
  84. '''
  85. set8 = frozenset({1,2,3,4,5})
  86. print(set8)
  87. # frozenset({1, 2, 3, 4, 5})
  88. # set8.add(10)
  89. # AttributeError: 'frozenset' object has no attribute 'add'
  90. '''
  91. 7. globals()
  92. loacals()
  93. 查看全局、局部名字
  94. '''
  95. def func():
  96. a = 1
  97. # print(locals()) # 以字典形式返回
  98. # print(globals()) # 打印全局名字
  99. func()
  100. # {'a': 1}
  101. # {'__name__': '__main__', '__doc__': '\n1.bytes()\n解码字符\n', '__package__': None, '
  102. # __loader__': <_frozen_importlib_external.SourceFileLoader object at 0x0000000001DCB208>,
  103. # '__spec__': None, '__annotations__': {},
  104. # '__builtins__': <module 'builtins' (built-in)>,
  105. # '__file__': 'C:/Users/Administrator/Desktop/老男孩python文档/老男孩Python程序编写/练习/第三章Python基础--文件操作&函数/内置函数.py', '__cached__': None, 'res': b'\xe4\xbd\xa0\xe5\xa5\xbd', 'l': ['a', 'b', 'c'], 'i': (2, 'c'), 'lis': '[1,2,3]', 'set8': frozenset({1, 2, 3, 4, 5}), 'func': <function func at 0x00000000004F1E18>}
  106. '''
  107. 8. pow()
  108. 返回 xy(x的y次方) 的值。
  109. '''
  110. print(pow(5,2))
  111. # 25
  112. '''
  113. 9. round() ***
  114. 返回浮点数x的四舍五入值。
  115. '''
  116. print(round(5.1))
  117. # 5
  118. '''
  119. 10. slice()
  120. 切片对象,主要用在切片操作函数里的参数传递。
  121. slice 语法:
  122. class slice(stop)
  123. class slice(start, stop[, step])
  124. '''
  125. myslice = slice(5)
  126. print(myslice)
  127. '''
  128. 11. sum() ***
  129. 进行求和计算
  130. '''
  131. print(sum(range(100)))
  132. # 4950
  133. '''
  134. 12. __import__()
  135. 通过字符串导入模块
  136. '''
  137. m = __import__("time")
  138. print(m.time())
  139. # 1569325150.957757
  140. '''
  141. 面向对象函数,-----^_^-----
  142. classmethod
  143. staticmethod
  144. property
  145. delattr
  146. hasattr
  147. getattr
  148. setattr
  149. isinstance()
  150. issubclass()
  151. object()
  152. super()
  153. '''

面向过程编程

什么叫面向过程,面向 流程 编程

面向过程编程是解决问题的一种思想,过程是解决问题的步骤

将复杂的问题拆解成一个个流程,从而做完整个事情

优点:复杂的问题流程化,简单化

缺点:扩展性差

  1. '''
  2. 注册功能
  3. 接受用户输入用户名,进行合法性校验,拿到合法的用户名
  4. '''
  5. def check_user():
  6. username = input(">>>").strip()
  7. if username.isalpha():
  8. return username
  9. else:
  10. print("用户名必须为字母,傻逼")
  11. '''
  12. 分层实现功能
  13. 用户功能层:实现用户具体的功能
  14. 接口层:连接数据处理层和用户功能层
  15. 数据处理层:处理数据后把结果交给接口层
  16. '''

异常处理

什么是异常

异常就是程序运行时候的报错

异常的种类

在python中不同的异常是不同的类型,一个异常标识一种错误

异常处理

  1. try:
  2. 代码
  3. except 错误类型:
  4. 代码
  1. print(1)
  2. num = input('请输入数字:')
  3. dic = {'a': 1}
  4. try:
  5. print(dic['b']) # KeyError
  6. 1 / int(num) # 报错之后,不运行下面的代码
  7. except ZeroDivisionError:
  8. print('傻逼,不能输入0')
  9. except KeyError:
  10. print('傻逼,不知道什么错误')
  11. print(2)
  1. # 万能捕捉异常
  2. print(1)
  3. num = input('请输入数字:')
  4. dic = {'a': 1}
  5. try:
  6. print(dic['b']) # KeyError
  7. 1 / int(num) # 报错之后,不运行下面的代码
  8. except Exception as e: # 万能异常,只要有错误,就捕捉
  9. print(e) # 打印错误的描述信息
  10. print('傻逼,不知道什么错误')
  11. print(2)

try...except总结

  1. 把错误处理和真正的工作分开
  2. 代码更加清晰,复杂的工作任务更容易实现
  3. 代码更加有健壮性

finally语句

finally 表示无论报不报错都执行下面的代码

  1. # 异常捕捉只能捕捉逻辑错误
  2. fr = open('test.py')
  3. try:
  4. # 文件中途报错
  5. 1 / 0
  6. except Exception as e:
  7. print(e)
  8. finally: # 无论你报不报错,都执行这一行
  9. print('finally')
  10. fr.close()

主动抛出异常raise

  1. try:
  2. raise TypeError('抛出异常,类型错误')
  3. except Exception as e:
  4. print(e)

断言assert

  1. assert 1 == 1
  2. try:
  3. assert 1 == 2
  4. except Exception as e:
  5. print(e)

Python-匿名函数与异常处理的更多相关文章

  1. python 匿名函数的使用(并没有那么简单)

    以下为几种匿名函数的使用方式:x=[(lambda x:x**2)(x) for x in range(10)]print(x)y=[x**2 for x in range(10)]print(y)i ...

  2. Python匿名函数_return语句

    Python匿名函数: 使用 lambda 关键字创建匿名函数: lambda 定义的函数只是一个表达式,而不是代码块 lambda 函数拥有自己的命名空间,不能够访问参数列表之外的 或 全局命名空间 ...

  3. python匿名函数(lambda)

    简单来说,编程中提到的 lambda 表达式,通常是在需要一个函数,但是又不想费神去命名一个函数的场合下使用,也就是指匿名函数 当我们在传入函数时,有些时候,不需要显式地定义函数,直接传入匿名函数更方 ...

  4. python匿名函数

    文章导读: 以前自己一直没搞明白Python中的匿名函数,现在拿这个问题基本上搞明白了,拿自己的理解整成一篇文章,附带大量例子,让其更加好理解. 在编程语言中,函数的应用: 1. 代码块重复,这时候必 ...

  5. python 匿名函数与三元运算

    匿名函数 匿名函数就是不需要显示式的指定函数名 首先看一行代码: def calc(x,y): return x*y print(calc(2,3)) # 换成匿名函数 calc = lambda x ...

  6. python 匿名函数&内置函数

    匿名函数:为了解决那些功能很简单的需求而设计的一句话函数怎么定义匿名函数: cal = lambda x : x*x # cal是函数名,lambda是定义匿名函数的关键字 冒号前面的额x是参数即函数 ...

  7. python匿名函数 高阶函数 内置函数 文件操作

    1.匿名函数 匿名就是没有名字 def func(x,y,z=1): return x+y+z 匿名 lambda x,y,z=1:x+y+z #与函数有相同的作用域,但是匿名意味着引用计数为0,使用 ...

  8. Python匿名函数详解

    python 使用 lambda 来创建匿名函数. lambda这个名称来自于LISP,而LISP则是从lambda calculus(一种符号逻辑形式)取这个名称的. 在Python中,lambda ...

  9. [ python ] 匿名函数和高阶函数

    匿名函数 描述:    关键字 lambda 定义的函数    语法: 函数名 = lambda 参数:返回值 返回值:    函数返回结果值 实例: 一个参数的匿名函数: func = lambda ...

  10. python 匿名函数&装饰器

    匿名函数 关键字lambda表示匿名函数,冒号前面的x表示函数参数匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果. >>> list(map(l ...

随机推荐

  1. 无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll已解决

    问题 : 无法启动此程序,因为计算机中丢失api-ms-win-crt-runtime-l1-1-0.dll 解决 1, 首先把C:\Windows\SysWOW64\的api-ms-win-crt- ...

  2. LOL遇到登录服务器问题,未能连接到网络原因

    通过打开各种浏览器,发现只有IE不能上网,QQ之类的都能上网,不能登入LOL 只有IE是出现:远程计算机或设备将不接受连接 这个问题 解决办法是: 1.win+r --> 输入regedit 打 ...

  3. DRF的三大认证组件

    目录 DRF的三大认证组件 认证组件 工作原理 实现 权限组件 工作原理 实现 频率组件 工作原理 实现 三种组件的配置 DRF的三大认证组件 认证组件 工作原理 首先,认证组件是基于BaseAuth ...

  4. 牛客B-Xor Path /// 求所有Path( i->j )( j >= i )路径的异或和

    题目大意: https://ac.nowcoder.com/acm/contest/272/B?&headNav=acm 给定一棵n个点的树,每个点有权值.定义表示  到  的最短路径上,所有 ...

  5. Jmeter----请求依赖之边界值提取器

    填写左边界和右边界 引用变量名就是要存储的变量名词

  6. docker使用gitlab持续集成(1)

    修改ssh连接端口vi /etc/ssh/sshd_config 写docker-compose.yml文件配置gitlab version: '3' services: gitlab: image: ...

  7. 随笔-ansible-4

    触发器: 一个任务同时调用多个触发器: 为远程主机上的用户设置环境变量: 保存前一步命令的输出结果,并保存到foo中: 添加环境变量的另一种方式: 注意:lineinfile模块只适用于修改少量环境变 ...

  8. 在CentOS6上安装mysql5.7报错

    报错截图: 处理方法: # yum install numactl perl -y

  9. 如何使用maven打包

    使用maven打包有两种情况:不包括第三方jar包.包括第三方jar包 一般我们写程序,都会在IDEA上去调试,那么也就意味着,你需要将你所需要的jar包(第三方jar)全部给pom文件,否则是不能工 ...

  10. 随笔记录 Linux基本操作命令 2019.7.27

    临时关闭防火墙systemctl stop firewalld永久关闭防火墙systemctl disable firewalld 临时关闭selinux安全机制setenforce 0永久关闭sel ...