Python第二语言(三、Python函数def)

目录

1. Python函数(def 函数名():)

1.1 sorted对容器进行排序:无法指定排序规则

1.2 sort对容器自定义排序:可以指定排序规则

1.3 获取变量长度函数(len)

1.4 函数的定义

1.5 函数-传参定义

1.6 函数的说明文档(阅读代码效率低下,使用注释)

1.7 函数的嵌套调用(函数中,再次调用其他函数)

1.8 变量作用域

2. Python函数进阶

2.1 函数的多返回值

2.2 函数的多种传参方式

2.3 匿名函数lambda关键字


1. Python函数(def 函数名():)

1.1 sorted对容器进行排序:无法指定排序规则
arr = [5, 4, 3, 2, 1]
# 默认按照从小到大的方式进行排序
print(sorted(arr))

1.2 sort对容器自定义排序:可以指定排序规则
  • 使用方式:

    列表.sort(key=选择排序依据的函数,reverse=TruelFalse)

    • 参数key,是要求传入一个函数,表示将列表的每一个元素都传入函数中,返回排序的依据;
    • 参数reverse,是否反转排序结果,True表示降序,False表示升序;

列表的sort方法: 

my_list = [["a", 33], ["b", 11], ["c", 55]]def choose_sort_key(element):return element[1]# 按照choose_sort_key的值reverse=True降序来排序,False为升序
my_list.sort(key=choose_sort_key, reverse=True)
print(my_list)

lambda简写形式: 

# 简写
my_list = [["a", 33], ["b", 11], ["c", 55]]
# 按照choose_sort_key的值reverse=True降序来排序,False为升序
my_list.sort(key=lambda element: element[1], reverse=True)
print(my_list)

1.3 获取变量长度函数(len)

print(len("张三你好"))

1.4 函数的定义
def fun_name(parm):parm = 1return parmdef 函数名(传入参数):函数体return 返回值

调用函数: 

1.5 函数-传参定义
  • 函数定义中,提供的x和y,称之为:形式参数(形参),表示函数声明将要使用2个参数:
    • 参数之间使用逗号进行分隔;
  • 函数调用中,提供的5和6,称之为:实际参数(实参),表示函数执行时真正使用的参数值:
    • 传入的时候,按照顺序传入数据,使用逗号分隔;

def(param)函数传参:

def add(x, y):  # 形参print(x + y)return x + y# 函数调用传参 实参
add(5, 5)

return返回值: 

  1. 函数在执行完后,返回给调用者的结果;
  2. 使用return关键之来返回结果;
  3. 函数体中在遇到return后就结束了,所以写在return之后的代码不会执行;

None(函数中没有写return,那么就默认是None类型的)

  1. None是类型'NoneType'的字面量,用于表示:空的,无意义的;
  2. 函数在不适用return语句时就返回None,或主动使用return None;
  3. 场景:变量定义;函数返回值;if判断;
# 1.None用于声明无初始内容的变量
name = Nonedef add(num):if num > 3:return numreturn None  # 2.函数返回值# 函数调用传参
result = add(2)if not result:# 3.进入if表示result是None值,也就是Falseprint("函数体处于None")

1.6 函数的说明文档(阅读代码效率低下,使用注释)
def add(num):""":param num::return:"""if num > 3:return numreturn None

1.7 函数的嵌套调用(函数中,再次调用其他函数)
# 内嵌函数
def add1():print(1)add2()def add2():print(2)add3()def add3():print(3)# 调用函数
add1()

1.8 变量作用域

局部变量: 

变量作用域指的是变量的作用范围;(变量在哪里可用,在哪里不可用)

主要分为两类:局部变量和全局变量:

1. 局部变量:是定义在函数体内部的变量,即只在函数体内部生效:

  • 局部变量的作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量;

2. 全局变量:指的是在函数体内、外都能生效的变量;

num = 10  # 定义全局变量def test_a():print(num)  # 访问全局变量def test_b():print(num)  # 访问全局变量test_a()
test_b()

        变量使用的时候,如果在函数内又重置了一个变量,那此时这个变量又变成了局部变量,仅在当前函数中可用,并不会改变全局的变量;

num = 10  # 定义全局变量def test_a():num = 20  # num现在是个局部变量,不会影响到全局变量print(num)  # 访问全局变量test_a()
print("全局变量:" + str(num))

global将局部变量定义成全局变量: 

在函数内部定义了global全局变量,那么最终结果会被改变;

num = 10  # 定义全局变量def test_a():global num  # global声明num是个全局变量num = 20print(num)  # 访问全局变量test_a()
print("全局变量:" + str(num))

2. Python函数进阶

2.1 函数的多返回值
def test_return():return 1, 2x, y = test_return()
print(x)  # 结果1
print(y)  # 结果2

2.2 函数的多种传参方式

1. 函数的多种传参方式: 

  1. 位置参数;
  2. 关键字参数;
  3. 缺省参数;
  4. 不定长参数;

2. 位置传参(根据参数的位置传参)

  • 注意:传递的参数和定义的参数的顺序及个数必须一致;
# 位置参数:调用函数时根据函数定义的参数位置来传递参数
def user_info(name, age, gender):print(f'我的名字是{name}, 年龄是{age}, 性别是{gender}')user_info('yiyi', 20, '男')

3. 关键字传参(根据参数的名字传参,也可与位置传参 混合传参)

  • 注意:函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序;
# 关键字参数:函数调用时通过"键=值"形式传递参数
def user_info(name, age, gender):print(f'我的名字是{name}, 年龄是{age}, 性别是{gender}')# 关键字传参
user_info(name="yiyi", age=20, gender="男")
# 可以不按照固定顺序
user_info(age=20, gender="男", name="yiyi")
# 可以和位置参数混用,位置参数必须在前,且匹配参数顺序
user_info("yiyi", age=20, gender="男")

4. 默认参数 || 缺省参数 (默认给参数传递一个值,如若不传参默认是原本的参数)

  • 注意:函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值;
def user_info(name, age, gender="男"):print(f'我的名字是{name}, 年龄是{age}, 性别是{gender}')user_info("yiyi", 20)
user_info("zhangsan", 18, "女")

5. 不定长参数(可通过*(*默认位置传参) 或者 ** (**字典传参,需要键值对)不定义长度的参数传递)

  • 不定长参数:不定长参数也叫可变参数,用于不确定调用的时候会传递多个参数(不传参也可以)的场景;
  • 作用:当调用函数时不确定参数个数时,可以使用不定长参数;
  • 不定长参数的类型:
  1. 位置传递;
  2. 关键字传递;

位置传递不定长参数 *args (需要传递的形式为元组tuple形式): 

  • 传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是位置传递;
# 不定长参数
def user_info(*args):print(args)user_info('yiyi')
user_info('zhangsan', 18)

关键字传递不定长参数(需要传递的形式为字典dict()形式)

参数是"键=值"形式的情况下,所有的"键=值"都会被kwargs接受,同时会根据"键=值"组成字典;

def user_info(**kwargs):print(kwargs)# {'name': 'yiyi', 'age': 18, 'id': 120}
user_info(name='yiyi', age=18, id=120)

2.3 匿名函数lambda关键字

1. 函数作为参数传递(可以将函数当作参数一样,传递给其它函数)

  • 函数本身是可以作为参数,传入另一个函数中进行使用的;
  • 将函数传入的作用在于:传入计算逻辑,而非传入数据;
  • 在代码中,不仅仅是相加,相减、相除等如何逻辑都可以自定义并作为函数传入;

案例:

def test_func(compute):result = compute(1, 2)print(result)# 将函数当作参数传入到函数中
def compute(x, y):return x + ytest_func(compute)

2. lambda匿名函数(lamdba 参数,参数 : 逻辑代码,只能写一行)临时函数,只可写一次的匿名函数;

  • 定义:
    • def关键字,可以定义带有名称的函数;
    • lambda关键字,可以定义匿名函数(无名称)

有名称的函数,可以基于名称重复使用;

无名称的匿名函数,只可临时使用一次;

使用def和使用lambda,定义的函数功能完全一致,只是lambda关键字定义的函数是匿名的,无法二次使用;

  • 注意:
    • 匿名函数用于临时构建一个函数,只用一次的场景;
    • 匿名函数的定义中,函数体只能写一行代码,如果函数体要写多行代码,不可用lambda匿名函数,应使用def定义带名函数;
# 通过def关键字,定义一个函数,并传入
def test_func(compute):result = compute(1, 2)print(result)# 通过lambda关键字,传入一个一次性使用的lambda匿名函数
test_func(lambda x, y: x + y)  # 结果为3

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/pingmian/23193.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

OpenCV如何判断一张图片是否有过高的明暗变化

操作系统:ubuntu22.04OpenCV版本:OpenCV4.9IDE:Visual Studio Code编程语言:C11 前言 判断一张图片是否有过高的明暗变化,可以通过分析图像的亮度分布一致性来实现。一种常见的做法是计算图像的亮度标准差(Standard …

免费,C++蓝桥杯等级考试真题--第7级(含答案解析和代码)

C蓝桥杯等级考试真题--第7级 答案:D 解析:步骤如下: 首先,--a 操作会使 a 的值减1,因此 a 变为 3。判断 a > b 即 3 > 3,此时表达式为假,因为 --a 后 a 并不大于 b。因此,程…

ElementUI的Table组件在无数据情况下让“暂无数据”文本居中显示

::v-deep .el-table__empty-block {width: 100%;min-width: 100%;max-width: 100%; }

如何在npm上发布自己的包

如何在npm上发布自己的包 npm创建自己的包 一、一个简单的创建 1、创建npm账号 官网:https://www.npmjs.com/创建账号入口:https://www.npmjs.com/signup 注意:需要进入邮箱验证 2、创建目录及初始化 $ mkdir ufrontend-test $ cd ufron…

今日科普:了解、预防、控制高血压

高血压,常被称为“隐形的健康威胁”,许多患者可能在毫无预警的情况下发病,且患病率逐年攀升,同时患者群体逐渐年轻化,高血压虽然难以根治,但并不可怕,真正可怕的是血压长期居高不下,…

STM32(七):ADC电位检测 (标准库函数)

前言 上一篇文章已经介绍了如何用STM32单片机中的定时器的PWM波来实现LED的“呼吸”。这篇文章我们来介绍一下如何用STM32单片机中ADC进行电位检测,并发送到XCOM串口中显示。 一、实验原理 1.ADC模数转换的介绍 首先,我们先介绍一下AD模数模块&#…

arcpy批量导出图且图名为shp属性值

1.打开arcmap加载需要导出的图。需求是逐村显示“村界内图斑”并导出为图,在导出每个村时不显示周围的村和“村界内图斑” 2.arcmap上方空白处右键打开“数据驱动页面” 3.在“数据驱动页面”工具条点击第一个图标,打开“设置数据驱动页面” 4.在“设置…

Oracle触发器的用途

0.DDL和DML DDL:data manipulation language,数据操作语言,主要命令有select,update,insert,delete,主要用于对数据库中的数据进行操作 DDL:data definition language,数据定义语言,主要命令有create,alter&#xff…

Java1.8全套家政上门服务+springboot+ mysql +Thymeleaf 技术架构开发,家政APP系统在线派单,师傅入驻全套商业源码

Java1.8全套家政上门服务springboot mysql Thymeleaf 技术架构开发,家政APP系统在线派单,师傅入驻全套商业源码 家政预约上门小程序的实用性? 家政预约上门小程序的实用性主要体现在以下几个方面: 一、方便快捷的预约体验&#…

尚硅谷2024新版3小时速通Docker教程

尚硅谷2024新版3小时速通Docker教程 百度网盘:https://pan.baidu.com/s/1SncgHbdJehvZspjcrrbLSw?pwd6c27

【数据结构与算法 经典例题】随机链表的复制(图文详解)

💓 博客主页:倔强的石头的CSDN主页 📝Gitee主页:倔强的石头的gitee主页 ⏩ 文章专栏:《数据结构与算法 经典例题》C语言 期待您的关注 ​ 目录 一、问题描述 二、解题思路 三、代码实现 1. 原链表中节点的数据拷…

采用JWT令牌和Filter进行登录拦截认证

原理描述: 1、第一次登录的时候,生成JWT令牌,并JWT令牌存放在localStorage。 localStorage.setItem(token, token); 2、每次通过axios发送请求的时候,都将这个令牌获取,并放于header中发送。 也就是JWT令牌只在登录…

PCL 抛物线回归拟合(Quadratic,二维)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 这里仍然是最小二乘法的应用,其推导过程如下所述: 1.二次函数模型: 其中,a、b 和 c 是需要确定的参数。 2.最小二乘法 假设我们有一组数据点 ( x 1 ​ , y

实用软件分享---中医自学宝典(安卓)

专栏介绍:本专栏主要分享一些实用的软件(Po Jie版); 声明1:软件不保证时效性;只能保证在写本文时,该软件是可用的;不保证后续时间该软件能一直正常运行;不保证没有bug;如果软件不可用了,我知道后会第一时间在题目上注明(已失效)。介意者请勿订阅。 声明2:本专栏的…

usb设备在主机和VMWare虚拟机中切换连接

操作:点击菜单栏虚拟机(M)>可移动设备>选择自己的usb设备>连接(断开与 主机 的连接)

【Vue】路由介绍

一、引入 思考 单页面应用程序,之所以开发效率高,性能好,用户体验好 最大的原因就是:页面按需更新 比如当点击【发现音乐】和【关注】时,只是更新下面部分内容,对于头部是不更新的 要按需更新&#xff…

上海亚商投顾:沪指震荡下跌 两市成交不足7000亿元

上海亚商投顾前言:无惧大盘涨跌,解密龙虎榜资金,跟踪一线游资和机构资金动向,识别短期热点和强势个股。 一.市场情绪 沪指昨日震荡调整,创业板指冲高回落。车路云概念股持续活跃,万通智控、鸿泉物联、华体…

【Vue】异步更新 $nextTick

文章目录 一、引出问题二、解决方案三、代码实现 一、引出问题 需求 编辑标题, 编辑框自动聚焦 点击编辑,显示编辑框让编辑框,立刻获取焦点 即下图上面结构隐藏,下面结构显示,并且显示的时候让它自动聚焦。 代码如下 问题 “…

【Multi-Feature FAS】《Face Anti-Spoofing Based on Multi-Feature Fusion》

文章目录 原文贡献 / 相关工作作者的方法评价 原文 [1]杨敏.基于多特征融合的人脸防伪技术研究[D].武汉大学,2019. 贡献 / 相关工作 针对攻击对象存在背景依赖和非刚性运动造成的深度信息缺失问题,采用边缘信息放大差异 各种 loss 数据库 评价指标 本节将会对…

Java——Stream流(2/2):Stream流的中间方法、终结方法(方法、案例演示)

目录 Stream流的中间方法 方法 案例演示 Stream流的终结方法 方法 案例演示1 收集 案例演示2 Stream流的中间方法 方法 中间方法指的是调用完成后会返回新的Stream流&#xff0c;可以继续使用(支持链式编程)。 Stream提供的常用中间方法说明Stream<T> filter(P…