day12“函数”进阶学习让你更上一层楼

函数进阶

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

多函数程序执⾏流程

  • 共用全局变量
python 复制代码
# 1. 定义全局变量
num = 0
def test1():
     global num
	 # 修改全局变量
     num = 100
def test2():
     # 调⽤test1函数中修改后的全局变量
     print(num)
 

test1()

test2() # 100
  • 返回值作为参数传递
python 复制代码
def test1():
    return 50
    
def test2(num):
     print(num)
# 1. 保存函数test1的返回值
result = test1()
# 2.将函数返回值所在变量作为参数传递到test2函数
test2(result) # 50

拆包和交换变量值

  • 拆包-元组
python 复制代码
t1 = (1,2,3)
a,b,c = t1
print(a)
print(b)
print(c)
  • 函数返回多个值
python 复制代码
def return_num():
    return 100, 200
    
num1, num2 = return_num()
print(num1) # 100
print(num2) # 200

递归

  • 函数内部⾃⼰调⽤⾃⼰
  • 必须有出⼝

1,2,3数字的累加和

python 复制代码
def sum_numbers(num):
    if num == 1:
        return 1
    result = num + sum_numbers(num-1)
    return result


print(sum_numbers(3))

执行流程

递归三原则:

  • 递归必须有停止条件
  • 递归必须改变其状态并向停止条件靠近
  • 递归必须递归地调用自己

lambda 表达式

lambda表达式,又名匿名函数

如果⼀个函数有⼀个返回值,并且只有⼀句代码,可以使⽤ lambda简化。

语法

python 复制代码
lambda 参数列表 : 表达式
  • 注意

lambda表达式的参数可有可⽆,函数的参数在lambda表达式中完全适⽤。

lambda函数能接收任何数量的参数,但只能返回⼀个表达式的值

快速上手

python 复制代码
# 函数
def fn1():
    return 200

print(fn1())

# lambda表达式
fn2 = lambda: 100
print(fn2())

夹带参数

python 复制代码
# 函数
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的参数形式

  • 无参数
python 复制代码
fn = (lambda: 100)()
print(fn)
  • 一个参数
python 复制代码
fn = (lambda b: a)("hello python")
print(fn)
  • 默认参数
python 复制代码
fn = (lambda a, b, c=100: a + b + c)(10, 20)
print(fn)
  • 不定长参数
python 复制代码
fn1 = (lambda *args: args)(10, 20, 30)
print(fn1)

fn2 = (lambda **kwargs: kwargs)(name='python', age=20)
print(fn2)
  • 待判断的lambda
python 复制代码
fn = (lambda a, b: a if a > b else b)(1000, 500)
print(fn)
  • 列表数据按字典key的值排序
python 复制代码
students = [
     {'name': '张三', 'age': 20},
     {'name': '李四', 'age': 19},
     {'name': '王五', 'age': 22}
 ]
# 按age值升序排列
students.sort(key=lambda x: x['age'], reverse=True)
print(students)

内置函数

  • abs()

abs() 函数可以完成对数字求绝对值计算。

python 复制代码
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 -- 序列

实例

python 复制代码
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 对象,。如果要转换为列表

python 复制代码
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

相关推荐
小小测试开发19 小时前
给贾维斯加“手势控制”:从原理到落地,打造多模态交互的本地智能助
人工智能·python·交互
Python×CATIA工业智造19 小时前
Python数据汇总与统计完全指南:从基础到高阶实战
python·pycharm
MoRanzhi12031 天前
2. Pandas 核心数据结构:Series 与 DataFrame
大数据·数据结构·人工智能·python·数据挖掘·数据分析·pandas
小钱c71 天前
Python利用ffmpeg实现rtmp视频拉流和推流
python·ffmpeg·音视频
合作小小程序员小小店1 天前
桌面预测类开发,桌面%性别,姓名预测%系统开发,基于python,scikit-learn机器学习算法(sklearn)实现,分类算法,CSV无数据库
python·算法·机器学习·scikit-learn·sklearn
Q26433650231 天前
【有源码】基于Hadoop+Spark的豆瓣电影数据分析与可视化系统-基于大数据的电影评分趋势分析与可视化系统
大数据·hadoop·python·数据分析·spark·毕业设计·课程设计
天特肿瘤电场研究所1 天前
靠谱的肿瘤电场疗法公司
人工智能·python
闲人编程1 天前
2025年,如何选择Python Web框架:Django, Flask还是FastAPI?
前端·后端·python·django·flask·fastapi·web
python开发笔记1 天前
python(77) python脚本与jenkins pipeline交互的5种方式
python·jenkins·交互
vx_dmxq2111 天前
免费领源码-Spring boot的物流管理系统 |可做计算机毕设Java、Python、PHP、小程序APP、C#、爬虫大数据、单片机、文案
java·大数据·python·jupyter·课程设计