函数进阶三

1. 匿名函数

1. 什么是匿名函数

匿名函数就是没有名字的函数,没法调用,他只能和某些方法联合起来使用

2. 匿名函数的语法

lambda 参数:返回值
#也可以通过赋值,让它变为有名函数
f = lambda x,y:x+y
res = f(1,2)
print(res)

3. 能和匿名函数联用的一些方法

(1)max 返回最大值

  • 使用方法:max(iterable,key = function)
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000,
'z': 1000
}
def func(name): # nick/jason/tank/sean/z
return salary_dict[name] # 3000/100000/5000/2000/1000 res = max(salary_dict, key=func) # 默认按key的首字母 这里是按工资排序
res = max(salary_dict, key=lambda name: salary_dict[name])
  • key=function默认做的事情
    # 1. 循环遍历salary_dict,会取到所有的key值
    # 2. 然后把所有的key值依次丢入function的形参中,返回薪资
    # 3. 通过返回的薪资排序,得到最大值 #下面的方法中key同理

(2)min 返回最小值

  • 使用方法:min(iterable,key = function)
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000,
'z': 1000
}
def func(name): # nick/jason/tank/sean/z
return salary_dict[name] # 3000/100000/5000/2000/1000 res = min(salary_dict, key=lambda name: salary_dict[name])
print(res)

(3)fileter 返回筛选值

  • 使用方法:fileter(function,iterable)
  • 返回的是布尔值为True的item
def function(item):  # 1/2/3/4
if item < 5:
return True
else:
return False res = filter(function, [1, 2, 3, 4])
res = filter(lambda item: item > 2, [1, 2, 3, 4])
print(res) # 迭代器
print(list(res)) #例二
salary_dict = {
'nick': 3000,
'jason': 100000,
'tank': 5000,
'sean': 2000,
'z': 1000
} res = filter(lambda item: salary_dict[item] > 3000, salary_dict)
print(list(res))

(4)map 返回映射

  • 使用方法:map(function,iterable)
def function1(item):
return item + 2 res = map(function1, [1, 2, 3, ])
print(res) # <map object at 0x00000000029C6E80>
print(list(res)) # [3, 4, 5]

(5)sorted 排序并生成一个新的列表

  • 使用方法:sorted(iterable,key = function,reverse = ?)

def function2(item):

return salary_dict[item]

salary_dict = {

'nick': 3000,

'jason': 100000,

'tank': 5000,

'sean': 2000,

'z': 1000

}

res = sorted([2,3,4,1,0,5],key=lambda k:k,reverse=True)

res = sorted(salary_dict, key=function2, reverse=True)

print(res) # sorted 返回的就是一个列表类型,不是像上面的方法一样返回一个迭代器

print(list(res)) # 这里不用在强制类型转换了


#### (6)reduce 累积 - **reduce()** 函数会对参数序列中元素进行累积, 返回函数计算结果。
- 函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。
- `reduce(function, iterable, [initializer])`
- function -- 函数,有两个参数
- iterable -- 可迭代对象
- initializer -- 可选,初始参数,不写默认是0,写了会先把这个数和容器类型的第一个元素运算,得到的结果再与第二个元素运算。 - ```python
>>>def add(x, y) : # 两数相加
... return x + y
...
>>> reduce(add, [1,2,3,4,5]) # 计算列表和:1+2+3+4+5
15
>>> reduce(lambda x, y: x+y, [1,2,3,4,5]) # 使用 lambda 匿名函数
15 res1 = reduce(lambda x,y:x+y,[1,2,3,4],100)
print(res1) # 110 res2 = reduce(lambda x,y:x+y,[1])
print(res2) # 1

2. python解释器内置方法

方法名 使用方法 实例
bytes 转化为二进制码 res = bytes('中国', encoding='utf8') # b'\xe4\xb8\xad\xe5\x9b\xbd'
chr/ord 将字母数字互转 print(chr(97))print(ord('a')) # a 97
divmod 取整和取余 print(divmod(10, 4)) # (2,2)
enumerate 同时取索引和值 lt = [1, 2, 3] for ind, val in enumerate(lt): print(ind, val)
eval 把字符串的引号去掉,留下来的是什么就是什么 s = '"abc"'print(type(eval(s)), eval(s)) #<class 'str'> abc
hash 求哈希值 print(hash(123123)) #123123
abs 绝对值 print(abs(-1)) # 1
all 可迭代对象内的元素全部为True则为True print(all([1, 2, 3, 3])) #True
any 可迭代对象内的元素有一个为True则为True print(any([0, 1, ])) #True
bin/oct/hex 10进制转化为2/8/16进制 print(bin(123)) # 0b1111011
dir 列出模块(库)的所有方法 import time print(dir(time))
frozenset 不可变化的集合,类似于元组 s = frozenset({1,2,3}) #frozenset({1,2,3})
globals/locals 列出所有全局变量/列出所有当前位置的变量 print(globals()) / print(locals())
pow print(pow(3,2)) # 9
slice 切片 s = slice(1, 5, 2) lt = [1, 2, 3, 4, 5, 6, 7] print(lt[s])
sum 求和sum(iterable) sum([1,2,3]) # 6
__import__ 通过字符串导入模块 time = __import__('time')
  • 其他进制转十进制:

    int('进制数',n) # n表示前面的是几进制

3. 异常处理

  • 语法:

    try:
    code1
    except Exception as e:
    print(e) #可加可不加
    code2
    finally: # 可加可不加
    code3
  • 异常处理就是当程序报了错,进行处理

  • 报错之后,不执行下面的代码

  • 异常捕捉只能捕捉逻辑错误

  • finally 方法的作用是无论你报不报错,都执行其缩进下的代码

    dic = {'a': 1}
    try:
    print(dic['b']) # KeyError
    1 / int(num) # 报错之后,不运行下面的代码 except Exception as e: # 万能异常,只要有错误,就捕捉
    print(e) # e存储的是错误的内容,而不是错误的类型
    print('傻逼,不知道什么错误')
    finally:
    print('asdasf')
  • assert +条件 ( 断言 +条件) 现在这种方法已经被淘汰

    条件成立不报错,不成立报错

    num = input('num:')
    assert 1 == int(num)
  • raise 主动报错误 (就是主动报错,没什么用处)

    x = 1
    raise(x = 1) # 报错

面向过程编程

  • 面条版 --》 面向过程编程 --》 思想 --》面向对象编程

  • 面向(代词--》使用) 过程(流程--》步骤) 编程(写代码,写文件)

  • IPO编程

    I input 输入(定义的变量) P Process 过程(控制变量的改变) O output(新的变量) 输出编程 == 面向过程编程

  • 面向过程编程:类似于流水线,一步一步往下走

  • 一个步骤就是一个函数

  • 面向过程编程

    优点:逻辑非常清晰

    缺点:上一步错了,下一步就跟着一起错

匿名函数 python内置方法(max/min/filter/map/sorted/reduce)面向过程编程的更多相关文章

  1. 匿名函数python内置高阶函数以及递归

    匿名函数 python定义一个函数通常使用def关键词,后面跟函数名,然后是注释.代码块等. def func(): '''注释''' print('from func') 这样就在全局命名空间定义了 ...

  2. python基础知识15---三元表达式、列表推导式、生成器表达式、递归、匿名函数、内置函数

    阅读目录 一 三元表达式.列表推导式.生成器表达式 二 递归与二分法 三 匿名函数 四 内置函数 五 阶段性练习 一. 三元表达式.列表推导式.生成器表达式 1 三元表达式 name=input('姓 ...

  3. Python 入门基础12 --函数基础5 匿名函数、内置函数

    今日内容: 1.三元表达式 2.列表.元组生成式 | 字典生成式 3.递归 4.匿名函数 5.内置函数 一.三元表达式 三元运算符:就是 if...else... 语法糖 前提:if 和 else # ...

  4. python协程函数、递归、匿名函数与内置函数使用、模块与包

    目录: 协程函数(yield生成器用法二) 面向过程编程 递归 匿名函数与内置函数的使用 模块 包 常用标准模块之re(正则表达式) 一.协程函数(yield生成器用法二) 1.生成器的语句形式 a. ...

  5. python之三元表达式、列表推导、生成器表达式、递归、匿名函数、内置函数

    目录 一 三元表达式 二 列表推到 三 生成器表达式 四 递归 五 匿名函数 六 内置函数 一.三元表达式 def max(x,y): return x if x>y else y print( ...

  6. day15(生成器send方法,递归,匿名函数,内置函数)

    一,复习 ''' 1.带参装饰器 - 自定义 | wraps def wrap(info) def outer1(func): from functools import wraps @wraps(f ...

  7. python基础-匿名函数和内置函数

    匿名函数和内置函数 匿名函数:没有名字,使用一次即被收回,加括号就可以运行的函数. 语法:lambda 参数:返回值 使用方式: 将匿名函数赋值给变量,给匿名函数一个名字,使用这个变量来调用(还不如用 ...

  8. python函数知识六 内置函数二、匿名函数与内置函数三(重要)

    19.内置函数二 abs():绝对值 lst = [1,2,-3,1,2,-5] print([abs(i) for i in lst]) enumerate("可迭代对象",&q ...

  9. Python中匿名函数与内置高阶函数详解

    大家好,从今天起早起Python将持续更新由小甜同学从 初学者的角度 学习Python的笔记,其特点就是全文大多由 新手易理解 的 代码与注释及动态演示 .刚入门的读者千万不要错过! 很多人学习pyt ...

随机推荐

  1. 细数EDM营销中存在的两大盲点

    国庆节了,祝大家国庆快乐,转眼博客至今已有三年了.下面博主为大家介绍EDM营销中存在的两大盲点,供大家参考. 一是忽略用户友好.用户友好策略是Email营销成功的关键要素,具体包括内容友好策略.方式友 ...

  2. 使用 circleci 自动部署 vuepress 到 github

    概述 今天我想把博客什么的搬到 github 的 vuepress 上面.但是每次提交 md 文件需要手动打包然后再提交到 github 的 gh-pages,非常麻烦.所以我去研究了一下用 circ ...

  3. Spring Cloud的几个组件

    在微服务架构中,需要几个基础的服务治理组件,包括服务注册与发现.服务消费.负载均衡.断路器.智能路由.配置管理等,由这几个基础组件相互协作,共同组建了一个简单的微服务系统.一个简答的微服务系统如下图: ...

  4. symbol,iterator,generator

    1.symbol是在ES6中引入的一种基本数据类型,因为symbol是不重复.唯一的数据特性,symbol设计是被用来表示对象内部的私有属性的.     symbol.for与symbol.keyfo ...

  5. Centos 安装 FTP

    安装教程:   基于 CentOS 搭建 FTP 文件服务 搭建完成后,使用windows文件夹访问FTP报错,请确保输入的文件名是否正确,并且您有权访问此文件. 先确认ftp服务正常 修改:   设 ...

  6. node.js ffmpeg-concat 命令行形式处理多个视频的过度效果

    ffmpeg-concat 是利用 gl-transitions 处理多个视频的过度效果.详细说明参见 https://github.com/transitive-bullshit/ffmpeg-co ...

  7. 深入理解java:2.2. 同步锁Synchronized及其实现原理

    同步的基本思想 为了保证共享数据在同一时刻只被一个线程使用,我们有一种很简单的实现思想,就是 在共享数据里保存一个锁 ,当没有线程访问时,锁是空的. 当有第一个线程访问时,就 在锁里保存这个线程的标识 ...

  8. python+selenium浏览器截图

    from selenium import webdriverfrom time import sleep driver = webdriver.Firefox() # 指定和打开浏览器driver.g ...

  9. fastjson @JSONField

    此文来源于:https://blog.51cto.com/xiaok007/2164029 1.作用在FIELD(成员变量上) 注意:1.若属性是私有的,必须有set*方法.否则无法反序列化. pac ...

  10. Linux-Maven部署

    一.Maven是什么 二.Maven部署 1.环境信息: (1)centos7.3 (2)jdk1.8 (3)maven3.5.3 2.安装jdk (1)下载地址[http://www.oracle. ...