阅读目录

    内容回顾

    生成器的send方法

    递归

    匿名函数

    内置函数

  ##内容回顾

#1.带参装饰器 - 自定义 | wraps

def wrap(info)
def outer1(func):
from functools import wraps
@wraps(func)
def inner(*args, **kwargs):
# 需要外界的参数
return func(*args, **kwargs)
return inner
def outer2(func):
def inner(*args, **kwargs):
# 需要外界的参数
return func(*args, **kwargs)
return inner
if info == '':
return outer1
return outer2 # outer = wrap('1')
# @outer
@wrap('')
def fn():pass #2.可迭代对象:有__iter__()方法的对象,并且调用__iter__()方法得到迭代器对象 #3.迭代器对象:有__next__()方法的对象,并且调用__next__()方法从前往后逐一取值
# 不依赖索引取值,但必须从前往后依次取值(无法获取索引,也无法计算长度) #4.for循环迭代器
1)得到操作对象的迭代器对象
2)通过__next__()进行取值
3)自动处理StopIteration异常,结束循环 #5.枚举对象:为被迭代的对象添加迭代索引 #6.生成器:语法同函数,内部包含yield关键字,函数名() 不是函数调用,而是得到生成器对象 -> 就是自定义的迭代器对象 with open('abc.txt', 'r', encode='utf-8') as f:
for line in f:
pass def fn():
# ...
yield 1
# ...
yield 2
obj = fn()
res = next(obj) #
fn().__next__() #
fn().__next__() #
fn().__next__() #

  ##生成器的send方法

# send的工作原理
# 1.send发生信息给当前停止的yield,所以在send之前就可以发送个send(None)值,或者使用next(obj)方法
# 2.再去调用__next__()方法,生成器接着往下指向,返回下一个yield值并停止 # 案例:
persons = ['张三', '李四', '王五', '赵六', '钱七'] def order(persons):
for i in range(len(persons)):
if i == 0:
print('%s在面试' % persons[0])
else:
print('%s叫%s在面试' % (name, persons[i]))
print('%s面试完毕' % persons[i])
name = yield persons[i] obj = order(persons)
for i in range(len(persons)):
if i == 0:
p = obj.__next__()
else:
p = obj.send(p)
print('=============================')

  ##递归

# 递归:
# 函数直接或间接调用本身,都称之为递归
# 回溯:找寻答案的过程
# 递推:推出结果的过程 # 前提条件:
# 1.递归必须有出口
# 2.递归回溯递推的条件一定有规律 # 案例一:获得第 count 个人的年纪
def get_age(count):
if count == 1:
return 58
# 第 九...一 个人 - 2
age = get_age(count - 1) - 2
return age age = get_age(3)
print(age) # 案例二:求n的阶乘 5! = 5 * 4 * 3 * 2 * 1 = 120
# 5! = 5 * 4!
# 4! = 4 * 3!
# 3! = 3 * 2!
# 2! = 2 * 1!
# 1! = 1
def jiecheng(n):
if n == 1 or n == 0:
return 1
ji = n * jiecheng(n - 1)
return ji
res = jiecheng(5)
print(res)

  ##匿名函数

def fn(*args, **kwargs):
# 函数体
return '返回值' # 匿名函数:
# 1.匿名函数没有函数名
# 2.匿名函数的关键字采用lambda
# 3.关键字 lambda 与标识函数功能体 : 之间一定是参数,所以省略()
# 4.匿名还是没有函数体,只有返回值,所以函数体和返回值的return关键字都省略了 lambda *args, **kwargs: '返回值' # 注意:
# 1.参数的使用和有名函数一样,六种形参都支持
# 2.返回值必须明确成一个值,可以为单个值对象,也可以为一个容器对象
# 3.用变量接收,该变量就存放了匿名函数的函数地址
#       -- 函数又有名字了,用完也不能被回收了,匿名函数匿名也没意义了 a = lambda *args, **kwargs: '返回值1', '返回值2'
print(a) # (<function <lambda> at 0x0000022D0B7E88C8>, '返回值2')
# 返回值1
print(a[0]()) # 正确返回两个值: 主动构成成容器类型
lambda *args, **kwargs: ('返回值1', '返回值2')

  ##内置函数

#max和min内置函数
# max结合内置函数来使用
# max:工作原理
# 1.max内部会遍历iter,将遍历结果一一传给lambda的参数x
# 2.依据lambda的返回值作为比较条件,得到最大条件下的那个遍历值
# 3.对外返回最大的遍历值
max(iter, lambda x: x) # min工作原理一样,得到的是最小值 #示例:
print(max(10, 2000, 300, 5))
print(max('azbd')) dic = {
'owen': (1, 88888),
'zero': (2, 66666),
'tom': (3, 77777),
} def fn(k):
print(k)
# return k
# return dic[k][0]
return dic[k][1]
res = max(dic, key=fn)
print('====================')
print(res) def max(iter, fn)
for v in iter:
res = fn(v)
# 用res作为比较对象
return 用fn提供的返回值作为比较对象,得到最大的v # max结合匿名函数
dic = {
'owen': (1, 88888),
'zero': (2, 66666),
'tom': (3, 77777),
}
print(max(dic, key=lambda k: dic[k][1])) # 求薪资最大的人
print(max(dic, key=lambda k: dic[k][0])) # 求员工号最大的人
print(max(dic, key=lambda k: k)) # 求名字最大
print('=====================')
# min
print(min(dic, key=lambda k: dic[k][1])) # 求薪资最小的人
print(min(dic, key=lambda k: dic[k][0])) # 求员工号最小的人
print(min(dic, key=lambda k: k)) # 求名字最小
# map:映射  把一个列表按照我们自定义的映射规则映射成一个新的列表
# def fn(x):
# return x * 2
# res = map(fn, [3, 1, 4, 2, 5])
# print(list(res)) dic = {
'owen': 3,
'zero': 5
}
res = map(lambda k: (k, dic[k] * 2), dic)
print(list(res)) # [('owen', 6), ('zero', 10)]
# for v in res:
# print(v)
# names=['alex','lxx','wpx','yxx']
# res = map(lambda name:name+'dSB',names)
# print(list(res))
# reduce:合并 把多个值合并成一个结果
from functools import reduce
res = reduce(lambda x, y: x + y, [3, 1, 2, 4, 5]) # 所以元素的和
print(res)
res = reduce(lambda x, y: x * y, [3, 1, 2, 4, 5]) # 所有元素的积
print(res)
print(sum([3, 1, 2, 4, 5])) #filter 过滤
从一个列表中过滤出符合我们过滤的值,工作原理:相当于for循环取出每一个人名,然后传给匿名函数,将调用匿名函数返回值位True的结果留下来
# names=['alex_sb','lxx_sb','wpx','yxx']
# res=filter(lambda name:name.endswith('sb'),names)
# print(list(res))
# 1.与类型相关的
# list() str() ord() chr() bool() int() ... print(ord('A'))
print(chr(97)) # 2.进制转化
print(bin(10)) #
print(oct(10)) #
print(hex(10)) # a print(0b1111) #
print(0o10) #
print(0x11) #
from functools import reduce # 3.常用操作类的
# range() len() iter() next() enumerate() id() type() print() input() open() # 4.原义字符串
print(r'a\nb')
print(ascii('a\nb'))
print(repr('a\nb')) # 5.数学相关运算
# abs() sum() max() min() pow() sorted()
print(abs(-1))
print(pow(2, 3)) # 2**3
print(pow(2, 3, 3)) # 2**3%3 dic = {
'owen': (1, 88888),
'zero': (2, 66666),
'tom': (3, 77777),
}
res = sorted(dic, key=lambda k: dic[k][1])
print(res) # ['zero', 'tom', 'owen'] res = sorted(dic, key=lambda k: dic[k][1], reverse=True)
print(res) # ['owen', 'tom', 'zero'] # 6.获取帮助
# help(dict) # 7.执行字符串: eval() exec() # 8.反射:getattr() setattr() delattr() hasattr() # 9.面向对象的装饰器:classmethod() staticmethod() # 10.面向对象的其他:super() globals() locals()
print(globals()) def fn():
a = 10
b = 20
def inner(): pass
print(globals())
print(locals()) fn()

Python Day 15 递归、匿名函数、内置函数的更多相关文章

  1. Python第七天 函数 函数参数 函数里的变量 函数返回值 多类型传值 函数递归调用 匿名函数 内置函数

    Python第七天   函数  函数参数   函数里的变量   函数返回值  多类型传值     函数递归调用   匿名函数   内置函数 目录 Pycharm使用技巧(转载) Python第一天   ...

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

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

  3. python基础(14)-反射&类的内置函数

    反射 几个反射相关的函数可参考python基础(10)-匿名函数&内置函数中2.2.4反射相关 类的一些内置函数 __str__()&__repr__() 重写__str__()函数类 ...

  4. Python学习笔记014——迭代工具函数 内置函数enumerate()

    1 描述 enumerate() 函数用于将一个可遍历的数据对象(如列表.元组或字符串)组合为一个索引序列,同时列出数据和数据下标,一般用在 for 循环当中. 2 语法 enumerate(sequ ...

  5. Python中字符串String的基本内置函数与过滤字符模块函数的基本用法

    Python中字符串String的基本内置函数与用法 首先我们要明白在python中当字符编码为:UTF-8时,中文在字符串中的占位为3个字节,其余字符为一个字节 下面就直接介绍几种python中字符 ...

  6. python 函数--内置函数

    一.内置函数 内置函数是python自带的一系列常用函数. 二.python3中内置函数     内置功能     abs() delattr() hash() memoryview() set() ...

  7. python学习day11 函数Ⅲ (内置函数与lambda表达式)

    函数Ⅲ(内置函数&lambda表达式) 1.函数小高级 函数可以当做变量来使用: def func(): print(123) func_list = [func, func, func] # ...

  8. Python入门之三元表达式\列表推导式\生成器表达式\递归匿名函数\内置函数

    本章目录: 一.三元表达式.列表推导式.生成器表达式 二.递归调用和二分法 三.匿名函数 四.内置函数 ================================================ ...

  9. Python基础(10)_内置函数、匿名函数、递归

    一.内置函数 1.数学运算类 abs:求数值的绝对值 divmod:返回两个数值的商和余数,可用于计算页面数 >>> divmod(5,2) (2, 1) max:返回可迭代对象中的 ...

  10. Python——day14 三目运算、推导式、递归、匿名、内置函数

    一.三目(元)运算符 定义:就是 if...else...语法糖前提:简化if...else...结构,且两个分支有且只有一条语句注:三元运算符的结果不一定要与条件直接性关系​ cmd = input ...

随机推荐

  1. 将libFM模型变换成tensorflow可serving的形式

    fm_model是libFM生成的模型 model.ckpt是可以tensorflow serving的模型结构 亲测输出正确. 代码: import tensorflow as tf # libFM ...

  2. zabbix 另一种方式取 zabbix-sender

    一,zabbix-sender介绍 这种模式是两主机并没有agent互联 使用zabbix-serder的话适用那种没有固定公网IP的,实时系统数据监控操作 还一个实用为零延迟数据监控, 本省zabb ...

  3. zookeper集群

    1.vi zoo.cfg server.1= ip:2777:3777 server.2= ip:2888:3888 server.3= ip:2999:3999 开启防火墙端口 2.创建myid文件 ...

  4. Angular4+NodeJs+MySQL 入门-01

    有一定的后台开发经验ES6语法.后台没有用框架来,纯自己写.会sql语句 安装NodeJS的安装 从网上下载 https://nodejs.org/en/ 选择自己,我用的是最新版本 Angular ...

  5. Linux下Tomcat如何传入'$'符号

    在实际的工作中,有同事有需求要在Tomcat的启动脚本中添加启动参数,而且启动参数中带有特殊的字符'$',在实际的应用程序中,使用System.getProperty()进行获取设置的值,但是这个字符 ...

  6. 从数组去重这个函数来体验es6的高效率

    前几天碰到一个题目,要求是这样的. 题目描述 为 Array 对象添加一个去除重复项的方法 示例1 输入 [false, true, undefined, null, NaN, 0, 1, {}, { ...

  7. Java 获取当前时间距离当天凌晨的秒数

    原文出自:https://blog.csdn.net/seesun2012 在前期项目中遇到一个客户端与服务器间的时间同步问题,需要获取到当前时间与当天凌晨时间距离的秒数,写这篇文章主要是为了总结一下 ...

  8. java版两人聊天程序

    server.java import java.io.*; import java.net.*; import java.text.SimpleDateFormat; import java.util ...

  9. bootstrap dialog对话框,完成操作提示框

    1. 依赖文件: bootstrap.js bootstrap-dialog.js bootstrap.css bootstrap-dialog.css 2.代码 BootstrapDialog.co ...

  10. oracle UDT 有关数据字典的研究

    1.数据及类型准备 创建了一个自定义类型 create or replace type addr_type as object( street varchar2(30); city varchar2( ...