python函数讲解进阶

news2024/9/30 5:28:30

关于python函数的基本知识可以点击“python函数讲解”

目录

一.函数多返回值

思考

 二.函数参数种类

1.位置参数

2.关键字参数

3.缺省参数

4.不定长参数

位置传递

关键字传递

 总结

三.匿名函数

函数作为参数传递

lambda匿名函数


 

一.函数多返回值

思考

运行之后,会输出1,只会执行第一个return,原因是因为return可以退出当前函数,导致return下方的代码不执行

多个返回值

如果一个函数要有多个返回值,该如何书写代码?

答:按照返回值的顺序,写对应顺序的多个变量接收即可,变量之间用逗号隔开,
支持不同类型的数据return

演示

def my_test():
    return 1,2
x,y = my_test()
print(x,y)
print(x)
print(y)

结果是

 二.函数参数种类

使用方式上的不同,函数有4中常见参数使用方式:

  • 位置参数
  • 关键字参数
  • 缺省参数
  • 不定长参数

1.位置参数

调用函数时根据函数定义的参数位置来传递参数

演示

 注意

传递的参数和定义的参数的顺序及个数必须一致(位置参数是最常用的)

2.关键字参数

关键字参数:函数调用时通过“键=值”形式传递参数
作用:可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求

演示

def my_test(name,age,gender):
    print(f"姓名是{name},年龄是{age},性别是{gender}")
my_test(name="张三",age=12,gender="男")#关键字传参
my_test(gender="女",name="李四",age=23)#可以不按照固定顺序
my_test("王五",age=43,gender="男")#可以和位置参数混用,位置参数必须在前,且匹配参数顺序

结果是

注意

函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序

3.缺省参数

 缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)
作用:当调用函数时没有传递参数,就会使用默认是用缺省参数对应的值

演示

 注意

函数调用时,如果为缺省参数传值则修改默认参数值,否则使用这个默认值

4.不定长参数

不定长参数:不定长参数也叫可变参数.用于不确定调用的时候会传递多少个参数(不传参也可以)的场景
作用:当调用函数时不确定参数个数时,可以使用不定长参数

类型

  • 位置传递
  • 关键字传递

位置传递

 注意

传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就位置传递

关键字传递

 注意

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

演示

def my_test(*args):
    print(f"args的类型是{type(args)},内容是{args}")

my_test("张三",12)

def my_test1(**args):
    print(f"args的类型是{type(args)},内容是{args}")
my_test1(name="李四",age=22,gender="男")

结果是

 总结

1.掌握位置参数
        根据参数位置来传递参数
2.掌握关键字参数
        通过“键=值”形式传递参数,可以不限参数顺序-可以和位置参数混用,位置参数需在前
3.掌握缺省参数
        不传递参数值时会使用默认的参数值-默认值的参数必须定义在最后
4.掌握不定长参数
        位置不定长传递以*号标记一个形式参数,以元组的形式接受参数,形式参数一般命名为args
        关键字不定长传递以**号标记一个形式参数,以字典的形式接受参数,形式参数一般命名为kwargs

三.匿名函数

  • 函数作为参数传递
  • lambda匿名函数

函数作为参数传递

在前面的函数学习中,我们一直使用的函数,都是接受数据作为参数传入:
数字、字符串、字典、列表、元组等
其实,函数本身,也可以作为参数传入另一个函数内。

 函数compute,作为参数,传入了test_func函数中使用。
test_func需要一个函数作为参数传入,这个函数需要接收2个数字进行计算,计算逻辑由这个被传入函数决定
compute函数接收2个数字对其进行计算,compute函数作为参数,传递给了test_func函数使用
最终,在test_func函数内部,由传入的compute函数,完成了对数字的计算操作
所以,这是一种,计算逻辑的传递,而非数据的传递。
就像上述代码那样,不仅仅是相加,相减、相除、等任何逻辑都可以自行定义并作为函数传入。 

演示

def my_test(compute):
    result = compute(1,2)
    print(result)
def compute(x,y):
    return x+y
my_test(compute)

def my_test1(compute1):
    result = compute1(1,2)
    print(result)
def compute1(x,y):
    return x-y
my_test1(compute1)

结果是

lambda匿名函数

函数的定义中

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

有名称的函数,可以基于名称重复使用。无名称的匿名函数,只可临时使用一次。

匿名函数定义语法:
lambda 传入参数:函数体(一行代码)

  • lambda是关键字,表示定义匿名函数
  • 传入参数表示匿名函数的形式参数,如:x,y表示接收2个形式参数
  • 函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码

演示

 也可以通过lambda关键字,传入一个一次性使用的lambda匿名函数

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

 

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

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

相关文章

Python抓取电商平台数据 / 采集商品评论 / 可视化展示 词云图...

前言 大家早好、午好、晚好吖 ❤ ~ 我给大家准备了一些资料,包括: 2022最新Python视频教程、Python电子书10个G (涵盖基础、爬虫、数据分析、web开发、机器学习、人工智能、面试题)、Python学习路线图等等 直接在文末名片自取即可&#x…

[附源码]Node.js计算机毕业设计公交电子站牌管理系统软件Express

项目运行 环境配置: Node.js最新版 Vscode Mysql5.7 HBuilderXNavicat11Vue。 项目技术: Express框架 Node.js Vue 等等组成,B/S模式 Vscode管理前后端分离等等。 环境需要 1.运行环境:最好是Nodejs最新版,我…

多模态在医疗中的应用

多模态是把要检索的模态融合起来,做整体的检索,查询和检索的必须至少有一个模态是相同的,也就是要查询和检索的模态都已经在融合模态里了。 跨模态是检索结果和查询的模态是不同,如图像检索文本,视频和音频。跨模态检索…

2022-12-17 TCP/IP 协议栈_2

TCP/IP 协议栈_2前言一、TCP/IP协议栈四层协议系统二、封装和分用总结前言 既然要学习计算机网络编程, 就不得不提计网祖师爷 W Richard Stevens, 天妒英才, 先生于1999年就早早陨落. 不知多少人凭着先生所著 “TCP/IP详解” 以及 “UNIX网络编程” 吃的盆满钵满. 而至今可说还…

深入浅出 - Rust 所有权与内存管理机制

一、从变量说起 fn main() {// 基本数据类型let a 5;let b a;// 指针let ptr_a &a;let ptr_b &b;println!("a value {}", a);println!("b value {}", b);println!("ptr_a value {:p}", ptr_a);println!("ptr_b value {:p}…

未来笔试重点(1)

一起成为更优秀的人 1.数组笔试重点考察 1.1整型数组与sizeof 1.2字符数组与sizeof 1.3sizeof与字符串 1.4strlen与字符串 2.指针笔试重点考察 2.1指针与sizeof 2.2指针与strlen sizeof与整型数组 int a[] { 1,2,3,4 };printf("%d\n", sizeof(a));printf(…

NMS与Soft NMS算法解析以及numpy实现

1. NMS算法 1.1 什么是NMS算法 NMS全称为Non Maximum Suppression,中文意思是非极大值抑制,字面意思就是不是极大值的元素被抑制掉,其实就是筛选出局部最大值得到最优解。NMS算法被广泛运用于目标检测算法处理网络输出的边界框。 1.2 为什…

浅谈Linux内核页面换入换出

【推荐阅读】 浅谈linux 内核网络 sk_buff 之克隆与复制 深入linux内核架构--进程&线程 了解Docker 依赖的linux内核技术 怎么在Windows下使用Makefile文件 浅析linux内核网络协议栈--linux bridge 0x00内存页面分类与换入换出规则 内存页面分为用户页面和内核页面。…

GDT践行(第一期):起床---运动--阅读

这里记录每周GDT践行记录.【2022】年第【51】周的第【6】天 封面图 第三部分:起床---运动--阅读 ❝ 小贴士: 在学校,出租房,宾馆,工位很多因素导致 学习区,运动区 卧室 都是同一个地方 环境导致你彻底彻底糊…

[附源码]Python计算机毕业设计Django课程在线测评系统

项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等等。 环境需要 1.运行环境:最好是python3.7.7,…

JVM部分知识点

目录 JVM主要组成部分及其作用? JAVA程序运行机制详情 JVM运行时的数据区 堆和栈的区别? Java垃圾回收机制 Java中有哪些引用类型? 如何判断对象是否可以被回收? JVM中的永久代会发生垃圾回收吗? JVM有哪些垃圾…

我国航空煤油行业发展趋势:燃油附加费复收 或将缓解企业经营压力

根据观研报告网发布的《中国航空煤油市场现状深度研究与投资前景分析报告(2022-2029年)》显示,航空煤油是石油产品之一,别名无臭煤油,主要由不同馏分的烃类化合物组成。航空煤油密度适宜,热值高&#xff0c…

【C语言】浮点型的存储方式

目录 一、浮点型和整型存储方式一样吗? 二、浮点型的存储规则 2.1 S,M,E求法 2.2 如何存放S,M,E 2.2.1 IEEE 754规定 2.2.2 特别的规定 2.2.3 验证 2.3 取出规则 2.3…

改造冰蝎马,实现免杀之default_aes php

本专栏是笔者的网络安全学习笔记,一面分享,同时作为笔记 文章目录 文章目录文章目录前文链接前言效果目标密码验证功能免杀后话前文链接 WAMP/DVWA/sqli-labs 搭建burpsuite工具抓包及Intruder暴力破解的使用目录扫描,请求重发,漏…

[附源码]Python计算机毕业设计黑格伯爵国际英语贵族学校官网Django(程序+LW)

该项目含有源码、文档、程序、数据库、配套开发软件、软件安装教程 项目运行 环境配置: Pychram社区版 python3.7.7 Mysql5.7 HBuilderXlist pipNavicat11Djangonodejs。 项目技术: django python Vue 等等组成,B/S模式 pychram管理等…

5G无线技术基础自学系列 | 单站点验证概述

素材来源:《5G无线网络规划与优化》 一边学习一边整理内容,并与大家分享,侵权即删,谢谢支持! 附上汇总贴:5G无线技术基础自学系列 | 汇总_COCOgsta的博客-CSDN博客 单站点验证是指在基站硬件安装调试完成…

RNA-seq 详细教程:可视化(12)

学习内容 了解如何为可视化准备数据了解如果利用可视化来探索分析结果火山图可视化热图可视化可视化结果 当我们处理大量数据时,以图形方式显示该信息以获得更多信息,可能很有用。在本课中,我们将让您开始使用探索差异基因表达数据时常用的一…

【数电实验】移位寄存器与计数器

实验四 移位寄存器与计数器 一 实验目的 1 掌握任意进制计数器的构成方法; 2 熟悉双向移位寄存器的使用方法。 二 实验内容 1 任意进制计数器的构成方法: 用中规模集成计数器74HC161和与非门74LS00,构成十进制计数器。要求分别使用同步预…

精华推荐 | 【深入浅出RocketMQ原理及实战】「性能原理挖掘系列」透彻剖析贯穿RocketMQ的事务性消息的底层原理并在分析其实际开发场景

什么是事务消息 事务消息(Transactional Message)是指应用本地事务和发送消息操作可以被定义到全局事务中,要么同时成功,要么同时失败。RocketMQ的事务消息提供类似 X/Open XA 的分布事务功能,通过事务消息能达到分布式事务的最终一致。 事务消息所对应的场景 在一些对…

docker学习笔记(五)单个服务镜像部署

引言 当前微服务项目已经大面积普及,对于新需求迭代上线有许多疑惑的部分,比如线上的某些功能不能重启,在这种情况下我们需要部署和启动项目就不能搞大范围重启或干脆重新制作镜像,这种方式都是不可取的,这时候就需要…