函数进阶

  • 多函数程序执⾏流程
  • 拆包
  • 递归
  • 可变和不可变类型

多函数程序执⾏流程

  • 共用全局变量
# 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“函数”进阶学习让你更上一层楼的更多相关文章

  1. python函数基础学习

    函数的定义与调用: def 函数名(参数1,参数2): ‘’’函数注释’’’ print(‘函数体’) return 返回值 定  义:def关键字开关,空格之后接函数名和圆括号,最后冒号结尾 def ...

  2. python学习笔记:第10天 函数进阶和作用域

    目录 1. 函数进阶 2. 命名空间 3. 关键字global和nonlocal 1. 函数进阶 动态接收位置参数 之前写的函数都是固定参数的,假设有个函数需要的参数由几十个,一个个写在形参的位置会非 ...

  3. Matlab 进阶学习记录

    最近在看 Faster RCNN的Matlab code,发现很多matlab技巧,在此记录: 1. conf_proposal  =  proposal_config('image_means', ...

  4. 09-Python之路---函数进阶

    Python之路---函数进阶️ 程序员三大美德: 懒惰 因为一直致力于减少工作的总工作量. 缺乏耐性 因为一旦让你去做本该计算机完成的事,你将会怒不可遏. 傲慢 因为被荣誉感冲晕头的你会把程序写得让 ...

  5. 爱了!阿里大神最佳总结“Flutter进阶学习笔记”,理论与实战

    前言 "小步快跑.快速迭代"的开发大环境下,"一套代码.多端运行"是很多开发团队的梦想,美团也一样.他们做了很多跨平台开发框架的尝试:React Native. ...

  6. 【C++】近期C++特性进阶学习总结(一)

    前言 C++的特性多的数不胜数,语言标准也很多,所以不定期对近期所学的C++知识进行总结,是对自身知识体系检查的良好机会,顺便锻炼一下写博客的文笔 三/五/零之法则 三之法则:如果某个类需要用户定义的 ...

  7. PHP程序员进阶学习书籍参考指南

    PHP程序员进阶学习书籍参考指南 @heiyeluren lastmodify: 2016/2/18     [初阶](基础知识及入门)   01. <PHP与MySQL程序设计(第4版)> ...

  8. Hive自定义函数的学习笔记(1)

    前言: hive本身提供了丰富的函数集, 有普通函数(求平方sqrt), 聚合函数(求和sum), 以及表生成函数(explode, json_tuple)等等. 但不是所有的业务需求都能涉及和覆盖到 ...

  9. (转载)prepare函数的学习,我要学习php第二天

    (转载)http://www.boyuan78.com/htm/company/2012_1030_60.html prepare函数的学习,我要学习php第二天 $mysqli = new mysq ...

  10. QT QObject::connect函数的学习

      从Qobject(QObject.h)源码中可以看到QObject::connect的定义是这样的: static bool connect(const QObject *sender, cons ...

随机推荐

  1. 独立开发经验谈:我是如何借助 Docker 环境变量让客户 1 分钟上线客服系统的

    我在业余时间开发了一款自己的独立产品:升讯威在线客服与营销系统.陆陆续续开发了几年,从一开始的偶有用户尝试,到如今线上环境和私有化部署均有了越来越多的稳定用户,在这个过程中,我也积累了不少如何开发运营 ...

  2. 云迁移中的CT-CMS任务操作指南

    本文分享自天翼云开发者社区<云迁移中的CT-CMS任务操作指南>,作者:每日知识小分享 随着企业业务的快速发展和数据量的不断增长,传统的IT架构逐渐面临性能瓶颈.扩展性不足等问题.为了解决 ...

  3. 爬虫无限Debugger解决方案

    爬虫无限Debugger解决方案 在应对网站中的debugger语句以防止爬虫被调试时,一些网站会在代码中插入这些断点以干扰调试行为. 一种极端但直接的方法是通过禁用浏览器的断点激活功能来绕过所有de ...

  4. 数据团队必读:智能数据分析文档(DataV Note)五种高效工作模式

    数据项目,无论是数据分析.可视化,还是数据科学和机器学习相关的项目,通常都非常复杂,涉及多个组成部分,比如代码.数据.运行环境.SQL脚本以及分析报告等:与此同时,随着AI时代的到来,数据科学领域正经 ...

  5. 用python做时间序列预测三:时间序列分解

    在初始概念篇中,我们简单提到了时间序列由趋势.周期性.季节性.误差构成,本文将介绍如何将时间序列的这些成分分解出来.分解的使用场景有很多,比如当我们需要计算该时间序列是否具有季节性,或者我们要去除该时 ...

  6. 湖北电信创维E900-S机顶盒-精简系统装当贝桌面

    一.打开机顶盒进入本地配置,输入密码:6321,然后打开其他设置-管理应用程序,连续按遥控器方向右键5次左右,这时会出现[USB调试]并打开: 二.从电脑里下载好当贝市场(点击立即下载).当贝桌面(点 ...

  7. 如何测试网络是否支持ipv6地址?如何打开ipv6?

    疑难解答加微信机器人,给它发:进群,会拉你进入八米交流群 机器人微信号:bamibot 简洁版教程访问:https://bbs.8miyun.cn 一.什么是IPv6: 1.IPv6简介: IPv6是 ...

  8. 『玩转Streamlit』--缓存机制

    Streamlit 应用在运行时,每次用户交互都会触发整个脚本的重新执行. 这意味着一些耗时操作,如数据加载.复杂计算和模型训练等,可能会被重复执行,严重影响应用响应速度. 本文介绍的缓存机制能够帮助 ...

  9. 大模型本地部署搭建【ollama + deepseek + dify】

    大模型本地部署搭建[在线] 一.ollama的下载.安装.配置 ollama是管理和运行所有开源大模型的平台 下载地址:https://ollama.com/download 或github下载:ht ...

  10. DeepSeek 全套资料pdf合集免费下载(持续更新)

    有很多朋友都关注DeepSeek相关使用的教程资料,本站也一直持续分享DeepSeek 学习相关的pdf资料,由于比较零散,这篇文章主要就是做一个汇总,并且持续更新,让大家可以及时获取下载最新的相关D ...