day12“函数”进阶学习让你更上一层楼
函数进阶
- 多函数程序执⾏流程
- 拆包
- 递归
- 可变和不可变类型
多函数程序执⾏流程
- 共用全局变量
# 1. 定义全局变量
num = 0
def test1():
global num
# 修改全局变量
num = 100
def test2():
# 调⽤test1函数中修改后的全局变量
print(num)
test1()
test2() # 100
- 返回值作为参数传递
def test1():
return 50
def test2(num):
print(num)
# 1. 保存函数test1的返回值
result = test1()
# 2.将函数返回值所在变量作为参数传递到test2函数
test2(result) # 50
拆包和交换变量值
- 拆包-元组
t1 = (1,2,3)
a,b,c = t1
print(a)
print(b)
print(c)
- 函数返回多个值
def return_num():
return 100, 200
num1, num2 = return_num()
print(num1) # 100
print(num2) # 200
递归
- 函数内部⾃⼰调⽤⾃⼰
- 必须有出⼝
1,2,3数字的累加和
def sum_numbers(num):
if num == 1:
return 1
result = num + sum_numbers(num-1)
return result
print(sum_numbers(3))
执行流程
递归三原则:
- 递归必须有停止条件
- 递归必须改变其状态并向停止条件靠近
- 递归必须递归地调用自己
lambda 表达式
lambda表达式,又名匿名函数
如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化。
语法
lambda 参数列表 : 表达式
- 注意
lambda表达式的参数可有可⽆,函数的参数在lambda表达式中完全适⽤。
lambda函数能接收任何数量的参数,但只能返回⼀个表达式的值
快速上手
# 函数
def fn1():
return 200
print(fn1())
# lambda表达式
fn2 = lambda: 100
print(fn2())
夹带参数
# 函数
def add(a, b):
return a + b
result = add(1, 2)
print(result)
# lambda表达式
fn = (lambda a, b: a + b)(1, 2)
print(fn)
lambda的参数形式
- 无参数
fn = (lambda: 100)()
print(fn)
- 一个参数
fn = (lambda b: a)("hello python")
print(fn)
- 默认参数
fn = (lambda a, b, c=100: a + b + c)(10, 20)
print(fn)
- 不定长参数
fn1 = (lambda *args: args)(10, 20, 30)
print(fn1)
fn2 = (lambda **kwargs: kwargs)(name='python', age=20)
print(fn2)
- 待判断的lambda
fn = (lambda a, b: a if a > b else b)(1000, 500)
print(fn)
- 列表数据按字典key的值排序
students = [
{'name': '张三', 'age': 20},
{'name': '李四', 'age': 19},
{'name': '王五', 'age': 22}
]
# 按age值升序排列
students.sort(key=lambda x: x['age'], reverse=True)
print(students)
内置函数
- abs()
abs() 函数可以完成对数字求绝对值计算。
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-1, 2)
print(result) # 3
- map(function, iterable),
将传⼊的函数变量function作⽤到iterable变量的每个元素中,并将结果组成新的列表
- function -- 函数
- iterable -- 序列
实例
list1 = [1, 2, 3, 4, 5]
def func(x):
return x ** 2
result = map(func, list1)
print(result)
print(list(result))
- filter()
filter(func, lst)函数⽤于过滤序列, 过滤掉不符合条件的元素, 返回⼀个 fifilter 对象,。如果要转换为列表
list1 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func(x):
return x % 2 == 0
result = filter(func, list1)
print(result)
print(list(result))
作业
定义一个模拟ATM存款的函数和取钱的函数, 并将每次操作后余额打印出来
你身上有100元,存了60后,你身上还剩40,这时候ATM机有60
你取了20块,这时候ATM机有40
递归:求1-20的阶乘1x2x3x4x5x...x20
day12“函数”进阶学习让你更上一层楼的更多相关文章
- python函数基础学习
函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定 义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...
- python学习笔记:第10天 函数进阶和作用域
目录 1. 函数进阶 2. 命名空间 3. 关键字global和nonlocal 1. 函数进阶 动态接收位置参数 之前写的函数都是固定参数的,假设有个函数需要的参数由几十个,一个个写在形参的位置会非 ...
- Matlab 进阶学习记录
最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal = proposal_config('image_means', ...
- 09-Python之路---函数进阶
Python之路---函数进阶️ 程序员三大美德: 懒惰 因为一直致力于减少工作的总工作量. 缺乏耐性 因为一旦让你去做本该计算机完成的事,你将会怒不可遏. 傲慢 因为被荣誉感冲晕头的你会把程序写得让 ...
- 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战
前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...
- 【C++】近期C++特性进阶学习总结(一)
前言 C++的特性多的数不胜数,语言标准也很多,所以不定期对近期所学的C++知识进行总结,是对自身知识体系检查的良好机会,顺便锻炼一下写博客的文笔 三/五/零之法则 三之法则:如果某个类需要用户定义的 ...
- PHP程序员进阶学习书籍参考指南
PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18 [初阶](基础知识及入门) 01. <PHP与MySQL程序设计(第4版)> ...
- Hive自定义函数的学习笔记(1)
前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...
- (转载)prepare函数的学习,我要学习php第二天
(转载)http://www.boyuan78.com/htm/company/2012_1030_60.html prepare函数的学习,我要学习php第二天 $mysqli = new mysq ...
- QT QObject::connect函数的学习
从Qobject(QObject.h)源码中可以看到QObject::connect的定义是这样的: static bool connect(const QObject *sender, cons ...
随机推荐
- linux内核 list_for_each_entry
1. linux内核中的list用法 在linus内核中,list一般这样使用: struct list_head { struct list_head *priv; struct list_head ...
- SpringBoot启动源码分析
- delphi中实现http请求和提交
在对接本地的一个药械监管系统使用实现的代码,编译环境delphi Xe7 ,使用类TIdHTTP实现网络的get请求和post提交 //设置组件的属性 procedure TfrmMain.SetHt ...
- 五. Redis 配置内容(详细配置说明)
五. Redis 配置内容(详细配置说明) @ 目录 五. Redis 配置内容(详细配置说明) 1. Units 单位配置 2. INCLUDES (包含)配置 3. NETWORK (网络)配置 ...
- 虚拟化技术 - CPU虚拟化
本文分享自天翼云开发者社区<虚拟化技术 - CPU虚拟化>,作者:谢****悦 物理机器是由CPU,内存和I/O设备等一组资源构成的实体.虚拟机也一样,由虚拟CPU,虚拟内存和虚拟I/O设 ...
- CDN与前端技术
本文分享自天翼云开发者社区<CDN与前端技术>,作者:张****亮 CDN(Content Delivery Network)是一种广泛应用于网络加速和内容分发的技术.它通过在全球各地部署 ...
- 文本处理命令head tail more less tr cut paste wc
文本处理命令 命令**head tail more less tr cut paste wc** 磁盘分区利用率 df|tr -s ' ' :|cut -d : -f5 df|tr -s ' ' :| ...
- Java中的输出格式化
在Java中,输出格式化是一个非常重要的功能,尤其是在需要精确控制输出格式的场景下. 以下是对代码中输出部分的详细解释: 原代码中的输出: System.out.printf("%.6f\n ...
- GridControl 给选中的行添加边框显示
实现方式,通过自定义 RowControl 的样式实现. 参考:https://supportcenter.devexpress.com/ticket/list?searchString=RowCel ...
- 莫托曼机器人GP110B操作手柄故障维修全攻略
莫托曼机器人GP110B操作手柄故障机器人维修全攻略 一.前言 莫托曼机器人GP110B操作手柄是机器人控制系统的重要组成部分,它允许操作人员对机 ...