5.函数

本文深入解析Python函数的概念,包括函数的定义、参数类型、局部变量、递归函数及高阶函数等核心内容,同时介绍了map、reduce和filter等内置高阶函数的使用方法。

函数介绍

定义:  函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。

特性:减少重复代码、使程序变的可扩展、使程序变得易维护

1.函数五要素:关键字,函数名,参数,函数体和返回值

关键字:def
函数名:在以def关键字命名的函数中必须有
参数:可以写,可以不写
函数体:需要执行的代码块
return:作用:可以返回值,也可以结束函数。但return可以写也可以不写。有没有return函数都有返回值,只有一个return或者不写返回None,xiereturn返回一个值,直接返回该值,写return返回多个值,返回的是一个元组。
View Code

2.无参函数

def jige():
      pass
View Code

3.函数参数的两种类型

    形参:在函数的定义阶段 括号内写的变量名 叫做该函数的形式参数 简称 形参
    实参:在函数的调用阶段 括号内实际传入的值 叫做实际参数 简称 实参
    
    形参与实参的关系
        形参就相当于变量名,而实参就相当于变量的值
        函数调用传参的过程 就是给形参变量名赋值的过程
    
    注意:形参和实参的绑定关系只在函数的调用阶段有效,函数运行结束关系自动解除
    只在函数内部有效 函数外部无任何影响
    

4.普通参数

def func(name):     #name是形式参数
    print(name)      #函数体

func('derek')       #执行函数,'derek'是传入的实参

5.默认参数

定义了默认参数后,在函数调用时不需要再传入,默认参数放在最后面

复制代码
def info(name,age,country = 'CN'):   #country定义了一个默认参数
    print('姓名:',name)
    print('年龄:',age)
    print('国籍:',country)

info('derek',22)     #调用时,没穿实参countrty,就用默认的参数
复制代码

6.关键参数

 正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后

复制代码
def info(name,age,country = 'CN'):
    print('姓名:',name)
    print('年龄:',age)
    print('国籍:',country)

info(age=22,name='derek')   #使用关键参数,可以不按顺序
复制代码

7.*args

def info(name,age,*args):     #*args会把多传入的参数变成一个元祖形式
    print(name, age,args)

info("derek","22","CN","Python")     #derek 22 ('CN', 'Python')

8.**kwargs

def info(name, *args, **kwargs):  # **kwargs 会把多传入的参数变成一个dict形式
    print(name, args)    #derek (22, 'CN', 'Python')
    print(kwargs)        #{'sex': 'Male', 'province': 'HeBei'}

info("derek", 22, "CN", "Python", sex="Male", province="HeBei")

9.局部变量

作用域在函数内部,不影响外部

复制代码
name = 'derek1'

def change_name(name):
    print('before change:',name)
    name = 'derek2'
    print('after change:',name)

change_name(name)
print('最后还是没改',name)


结果:
before change: derek1
after change: derek2
最后还是没改 derek1
复制代码

递归函数

如果一个函数在内部调用自身,那么这个函数就叫做递归函数。

1. 必须有一个明确的结束条件;

2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少;

3.递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出

复制代码
#递归实现阶乘n! = (n-1)! × n
def factorial(n):
    if n == 1:
        return 1
    else:
        return n * factorial(n-1)
print(factorial(5))

结果:120

过程:
factorial(5)                        # 第 1 次调用使用 5
5 * factorial(4)                    # 第 2 次调用使用 4
5 * (4 * factorial(3))              # 第 3 次调用使用 3
5 * (4 * (3 * factorial(2)))        # 第 4 次调用使用 2
5 * (4 * (3 * (2 * factorial(1))))  # 第 5 次调用使用 1 
5 * (4 * (3 * (2 * 1)))             # 从第 5 次调用返回
5 * (4 * (3 * 2))                   # 从第 4 次调用返回
5 * (4 * 6)                         # 从第 3次调用返回
5 * 24                              # 从第 2 次调用返回
120                                 # 从第 1 次调用返回
复制代码

高阶函数

满足下列条件之一就可称函数为高阶函数

  • 某一函数当做参数传入另一个函数中

  • 函数的返回值包含一个或多个函数

复制代码
#简单的高阶函数

def
func(): print('in the func') return foo() def foo(): print('in the foo()') return 666 res = func() print(res) 结果: in the func in the foo() 666
复制代码

 map()函数

map()是 Python 内置的高阶函数,它接收一个函数 f 和一个list,并通过把函数 f 依次作用在 list 的每个元素上,得到一个新的 list 并返回

复制代码
def func(x):
    return x * x
a= map(func,range(1,10))
print(list(a))

结果:
[1, 4, 9, 16, 25, 36, 49, 64, 81]
复制代码

reduce()函数

reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值

复制代码
from functools import reduce
def f(x,y):
    return x + y
a = reduce(f,[1,3,5,7,9,10])
print(a)

结果:
35
复制代码

filter()函数

filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list

复制代码
def is_odd(x):
    return x % 2 == 1
a = filter(is_odd,[1,2,3,4,5,6,7,8])
print(list(a))

结果:[1, 3, 5, 7]
复制代码

转载于:https://www.cnblogs.com/cmd61/p/11094200.html

(1)普通用户端(全平台) 音乐播放核心体验: 个性化首页:基于 “听歌历史 + 收藏偏好” 展示 “推荐歌单(每日 30 首)、新歌速递、相似曲风推荐”,支持按 “场景(通勤 / 学习 / 运动)” 切换推荐维度。 播放页功能:支持 “无损音质切换、倍速播放(0.5x-2.0x)、定时关闭、歌词逐句滚动”,提供 “沉浸式全屏模式”(隐藏冗余控件,突出歌词与专辑封面)。 多端同步:自动同步 “播放进度、收藏列表、歌单” 至所有登录设备(如手机暂停后,电脑端打开可继续播放)。 音乐发现与管理: 智能搜索:支持 “歌曲名 / 歌手 / 歌词片段” 搜索,提供 “模糊匹配(如输入‘晴天’联想‘周杰伦 - 晴天’)、热门搜索词推荐”,结果按 “热度 / 匹配度” 排序。 歌单管理:创建 “公开 / 私有 / 加密” 歌单,支持 “批量添加歌曲、拖拽排序、一键分享到社交平台”,系统自动生成 “歌单封面(基于歌曲风格配色)”。 音乐分类浏览:按 “曲风(流行 / 摇滚 / 古典)、语言(国语 / 英语 / 日语)、年代(80 后经典 / 2023 新歌)” 分层浏览,每个分类页展示 “TOP50 榜单”。 社交互动功能: 动态广场:查看 “关注的用户 / 音乐人发布的动态(如‘分享新歌感受’)、好友正在听的歌曲”,支持 “点赞 / 评论 / 转发”,可直接点击动态中的歌曲播放。 听歌排行:个人页展示 “本周听歌 TOP10、累计听歌时长”,平台定期生成 “全球 / 好友榜”(如 “好友中你本周听歌时长排名第 3”)。 音乐圈:加入 “特定曲风圈子(如‘古典音乐爱好者’)”,参与 “话题讨论(如‘你心中最经典的钢琴曲’)、线上歌单共创”。 (2)音乐人端(创作者中心) 作品管理: 音乐上传:支持 “无损音频(FLAC/WAV)+ 歌词文件(LRC)+ 专辑封面” 上传,填写 “歌曲信息
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值