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 ...
随机推荐
- biancheng-Maven依赖
目录http://c.biancheng.net/maven2/profile.html 1Maven简介2Maven安装与配置3Maven POM4创建Maven项目5Maven项目的构建与测试6M ...
- Superset 筛选器理解
免于被筛选器筛选,dashboard中,编辑,高级,"__time_range": {"scope": ["ROOT_ID"], " ...
- VulNyx - Internal
扫描发现有三个端口 basic验证需要用户名密码登录 访问80端口 \URLFinder 发现有个internal的php文件 看看有无任意文件读取漏洞 发现没有回显 但是总感觉怪怪的 应该是有啥东西 ...
- C# WebAPI 插件热插拔
背景 WebAPI 插件热插拔是指在不重启应用程序的情况下,能够动态地加载.更新或卸载功能模块(即插件)的能力.这种设计模式在软件开发中非常有用,尤其是在需要频繁更新或扩展功能的大型系统中.通过实现插 ...
- ARM单片机知识点
1.STM32编译信息 代码占用FLASH 大小为:Code + RO-data, 7420字节(5054+2366),所用的RAM 大小为:RW-data + ZI-data, 8576(372+8 ...
- h5移动端像素适配 postcss-pxtorem和amfe-flexible
Vant 中的样式默认使用px作为单位,如果需要使用rem单位,推荐使用以下两个工具: postcss-pxtorem 是一款 postcss 插件,用于将单位转化为 rem; amfe-flexib ...
- 川崎机器人维修kasawaki维护注意事项
为确保川崎机械臂的正确安全操作.防止人员伤害和财产损失,请遵守下述方框符号表达的安全信息. --注意事项 在进行Kasawaki川崎机器人维修操作前,请注意如下事项以确保安全. 1. 在开始检查之前, ...
- android studio真机调试华为手机
背景 近来开发一个视频通话App,需要在华为手机上调试,按网上一顿操作,开启了USB调试之后,发现手机连上电脑后,android studio没反应,在此记录下解决方法.调试的手机型号是华为 nova ...
- jmeter 压测tcp协议
https://www.cnblogs.com/TestSu/p/10552239.html
- 通过 C# 打印Word文档
Word文档是日常办公和学习中不可或缺的一部分.比如在商务往来中,经常需要打印 Word 文档用于撰写和传递正式的商务信函.合作协议.项目提案等.打印出来的文档便于双方签字盖章,具有法律效力和正式性. ...