python--实验7 函数(1)
知识点
函数的定义与调用
- 函数分类:内置函数和自定义函数。

- 函数定义:使用
def关键字定义函数,包括函数名、参数列表和函数体。 - 注意:
- (1)即使该函数不需要接收任何参数,也必须保留一对空的圆括号。
- (2)python的参数不需要声明数据类型
- (3)括号后面的冒号不能省略。
- (4)函数体相对于def关键字必须保持一定的空格缩进。
- (5)return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。强调了即使函数不需要参数,也必须保留空括号,参数不需要声明数据类型,函数体需要适当的缩进,以及
return语句的使用。
- 无参函数与有参函数:无参数
和有参数
的函数。 - 空函数:使用
pass关键字定义空函数的情况
。 - 函数调用:如何调用函数,包括无参数和有参数的情况。
- 如果调用的是无参数函数,则实参列表省略。 通常将函数定义和函数调用都放在一个程序文件中,然后运行程序文件。
- 嵌套调用

递归函数
- 递归定义:指一个函数的函数体中又直接或间接地调用该函数本身的函数。
- 递归出口与递归体:如何设置递归的终止条件(出口)和递归的计算过程(体)。

- 实例:提供了计算阶乘和求和的递归函数示例。

函数参数的传递
- 参数传递:Python中参数传递的机制,区分了不可变对象和可变对象的传递方式。在 python 中,strings, tuples, 和 numbers 是不可更改的对象,而 list,dict 等则是可以修改的对象。当参数类型为固定数据类型(如整数、浮点数、字符串、元组等)时,类似 C++ 的值传递,在函数内部直接修改形参的值不会影响实参。当参数类型为可变数据类型(如列表、字典、集合等)时,类似 C++ 的引用传递。在函数内部使用下标或其他方式为其增加、删除元素或修改元素值时,修改后的结果是可以反映到函数之外的,即实参也会得到相应的修改。
- 不可变参数类型:变量赋值 a=5 后再赋值 a=10,这里实际是新生成一个 int 值对象 10,再让 a 指向它,而 5 被丢弃,不是改变 a 的值,相当于新生成了 a。展示了在函数内部修改不可变类型参数不会影响外部变量。


- 可变参数类型:变量赋值 la=[1,2,3,4] 后再赋值 la[2]=5 则是将 list la 的第三个元素值更改,本身la没有动,只是其内部的一部分值被修改了。展示了可变类型参数在函数内部的修改会影响到外部变量。


参数的类型
- 位置参数:调用函数时实参和形参的顺序和数量必须一致。
- 关键字参数:如何使用关键字参数来指定实参对应的形参,允许参数的顺序不固定。
- 关键字参数的形式为: 形参名=实参值

- 通过形式参数的名称来指示为哪个形参传递什么值,这可以跳过某些参数或脱离参数的顺序。(实参名来自形参的名字)
- 默认值参数:展示了如何为函数参数设置默认值,以及相关的规则。
- 默认值参数的形式为: 形参名=默认值

- 注意: (1)默认值参数必须出现在形参表的最右端。也就是说,第一个形参使用默认值参数后,它后面的所有形参也必须使用默认值参数,否则会出错。 (2)所有的位置参数必须在默认参数前,包括函数定义和调用
- 可变长度参数(形参):使用
*和**来接受不定数量的参数,分别将它们存储在元组和字典中。可变长度参数永远放在参数的最后面。- 在形参名前面加*,用来接受任意多个实参并将其放在一个元组中。


- 元组可变长度形参
- 在形参名前面加**,可以接受任意多个 关键字=实参值 形式的实参。关键字参数和实参值参数被放入一个字典,分别作为字典的关键字和字典的值


- 字典可变长度形参
- 参数的解包裹传递:如何使用
*和**来解包裹元组和字典,将它们作为参数传递给函数。包裹和解包裹并不是相反操作,是两个相对独立的过程。- 调用函数时,若函数接收的实参为元组或字典类型,可以对函数参数进行解包裹:
- 使用* 可以解压待传递到函数中的元组、列表、字符串等类型,并按位置传递到函数入口参数中

- 使用**可以解压待传递到函数的字典,并按关键字传递到函数入口参数中

代码部分
- 实验目的:
- 熟练python编辑器pycharm的使用。
- 掌握python的函数的定义
- 掌握python的函数结构,参数位的设计,如何灵活使用不定长参数
- 理解python参数传递的过程
- 熟练并理解使用函数优化编程结构以及思路
二、实验环境
本次实验需使用实验室提供的Windows主机环境+pycharm
三、实验内容
说明:基础题为必做题,提高题为选做题
- (基础题)对于一个十进制的正整数, 定义函数f(n)为其各位数字的平方和,如:
f(13) : 10
f(207) : 53
代码:
def f(n):return sum(int(digit)**2 for digit in str(n))# 测试代码
print(f(13)) # 输出: 10
print(f(207)) # 输出: 53
- (基础题)编写一个函数, 接收字符串参数, 返回一个元组,元组的第一个值为大写字母的个数, 第二个值为小写字母个数,‘hello WROLD’,返回:(5,5)
代码:
def count_letters(s):upper_count = sum(1 for char in s if char.isupper())lower_count = sum(1 for char in s if char.islower())return (upper_count, lower_count)# 测试代码
print(count_letters('helloWROLD')) # 输出: (5, 5)
提示:已知有字符串ls
ls.isupper() #判断是否为大写字母,若是,返回True
ls.islower() #判断是否为小写字母,若是,返回True
- (基础题) 定义一个函数,能够获取任意多个数(1-100以内)中的最大值
代码:
def max_value(*args):return max(args)# 测试代码
print(max_value(10, 20, 30, 40)) # 输出: 40
- (提高题)编写一个函数calcuate_ave, 可以接收任意多个数,返回的是一个元组.元组的第一个值为所有参数的平均值, 第二个值是大于平均值的所有数
例如:calcuate_ave(10,13,14,15) 返回(13,[14,15])
calcuate_ave(10,11,14,15,12) 返回(12.4,[14,15])
代码:
def calculate_ave(*args):total = sum(args)average = total / len(args)above_average = [num for num in args if num > average]return (average, above_average)# 测试代码
print(calculate_ave(10, 13, 14, 15)) # 输出: (12.75, [13, 14, 15])
print(calculate_ave(10, 11, 14, 15, 12)) # 输出: (12.4, [14, 15])
总结
本节深入探讨了函数的基础知识,包括其定义、如何进行调用、不同参数传递机制以及装饰器的概念和使用,同时解释了变量的作用域。在Python编程语言中,函数不仅仅是数学概念中的函数映射,它更是一种执行特定运算或处理数据的程序单元。通过将代码封装进函数中,可以在程序的多个地方重复利用这段代码,而无需每次都重新编写,这正是函数带来的便利和效率。
相关文章:
python--实验7 函数(1)
知识点 函数的定义与调用 函数分类:内置函数和自定义函数。函数定义:使用def关键字定义函数,包括函数名、参数列表和函数体。注意: (1)即使该函数不需要接收任何参数,也必须保留一对空的圆括号…...
【力扣】数组中的第K个最大元素
一、题目描述 给定整数数组 nums 和整数 k,请返回数组中第 k 个最大的元素。 请注意,你需要找的是数组排序后的第 k 个最大的元素,而不是第 k 个不同的元素。 你必须设计并实现时间复杂度为 O(n) 的算法解决此问题。 示例 1: 输入: [3,2,1,5,…...
WTM的项目中EFCore如何适配人大金仓数据库
一、WTM是什么 WalkingTec.Mvvm框架(简称WTM)最早开发与2013年,基于Asp.net MVC3 和 最早的Entity Framework, 当初主要是为了解决公司内部开发效率低,代码风格不统一的问题。2017年9月,将代码移植到了.Net Core上&…...
互联网3.0时代的变革者:华贝甄选大模型创新之道
在当今竞争激烈的商业世界中,华贝甄选犹如一颗璀璨的明星,闪耀着独特的光芒。 华贝甄选始终将技术创新与研发视为发展的核心驱动力。拥有先进的研发团队和一流设施,积极探索人工智能、大数据、区块链等前沿技术,为用户提供高性能…...
Tomcat的安全配置
1、生产环境优化 2、部分漏洞修复 转载自风险评估:Tomcat的安全配置,Tomcat安全基线检查加固-CSDN博客...
[笔记] 卷积 - 01 变速箱需要放置多少个加速度传感器?
1.讨论范围 本帖主要对卷积运算的过程和物理意义进行基本的展开,不涉及具体的验算过程。 最终所要达成的目标是,能够自然地判断某种物理现象或者某个测量目标是否与卷积运算有关,以及如何进行测量,搜集数据,调用三方…...
Maya崩溃闪退常见原因及解决方案
Autodesk Maya 是一款功能强大的 3D 计算机图形程序,被电影、游戏和建筑等各个领域的设计师广泛使用。然而,Maya 就像任何其他软件一样可能会发生崩溃问题。在前文中,小编给大家介绍了3ds Max使用V-Ray渲染时的崩溃闪退解决方案: …...
编码与梦想:我的CSDN创作5周年
五年前的今天,我带着对技术的热爱和对知识的渴望,踏上了CSDN的创作之旅。这个平台对于我来说,不仅仅是一个分享和学习的场所,更是我成长和自我实现的见证。 机缘 记得那时,我正为了一个编程难题而苦恼,偶…...
Vue2 基础十Vuex
代码下载 Vuex 概述 组件之间共享数据的方式: 父组件向子组件传值,是以属性的形式绑定值到子组件(v-bind),然后子组件用属性props接收。子组件向父组件传值,子组件用 $emit() 自定义事件,父组…...
【大模型】驾驭未知领域:LLM如何处理域外或无意义的提示
驾驭未知领域:LLM如何处理域外或无意义的提示 引言一、概念解析1.1 域外提示1.2 无意义提示二、LLM处理策略2.1 上下文推断2.2 缺省回答2.3 模糊处理2.4 求助于常识三、实例对比3.1 域外提示实例3.2 无意义提示实例四、挑战与局限五、未来展望六、结语附录:术语解释与参考资料…...
Docker容器 为MySQL创建新用户和授权
当您需要为 MySQL 数据库创建一个新用户并配置其访问权限时,可以按照以下步骤操作。我将创建一个名为 newuser 的新用户,并为其授予在任何主机上访问所有数据库的权限。 创建新用户和授权步骤: 登录到 MySQL 服务器 首先,使用具有…...
openssh9.8p1更新 修复漏洞(CVE-2024-6387)
2024 年 7 月,互联网公开披露了一个 OpenSSH 的远程代码执行漏洞(CVE-2024-6387)。鉴于该漏洞虽然利用较为困难但危害较大,建议所有使用受影响的企业尽快修复该漏洞。 centos7 为例 yum -y install gcc make openssl-devel zlib…...
超市收银系统源码
今天给大家分享一套线上线下打通的收银系统,安卓/win双端线下收银台,可DIY、多模板的三端线上小程序商城,除此之外ERP进销存管理、商品管理、会员营销都很完善。 重点是系统支持OEM贴牌独立部署和全开源源码,非常适合一些正在寻找…...
word 使用手册
word 文档中如何将下行的指定文字退格到上行中 就像是这样的 编号:111 密码:222 编号:123 密码:321 编号:124 密码:331 变成 编号:111密码:222 编号:123密码࿱…...
vue学习day03-指令修饰符、v-bind对于样式控制的增强、v-model应用于其他表单元素
7、指令修饰符 (1)概念: 通过“.”指明一些指令后缀,不同后缀封装了不同的处理操作->简化代码 (2)按键修饰符 keyup.enter->键盘回车监听 (3)v-model修饰符 v-model.tri…...
JRE、JVM、JDK分别是什么。
JDK JDK的英文全称是Java Development Kit。JDK是用于制作程序和Java应用程序的软件开发环境。JDK 是 Java 开发工具包,它是 Java 开发者用来编写、编译、调试和运行 Java 程序的集合。JDK 包括了 Java 编译器(javac)、Java 运行时环境&…...
台灯护眼是真的吗?台灯怎么选对眼睛好?一文带你读懂!
近视问题,这一现代社会的“视力杀手”,正悄然影响着越来越多的人群,尤其是青少年群体。长时间面对电子屏幕和书本,加上不正确的用眼习惯,使得视力下降成为普遍现象。在此背景下,一款优质的护眼台灯显得尤为…...
【学术会议征稿】第五届计算机工程与智能控制学术会议(ICCEIC 2024)
第五届计算机工程与智能控制学术会议(ICCEIC 2024) 2024 5th International Conference on Computer Engineering and Intelligent Control 第五届计算机工程与智能控制学术会议(ICCEIC 2024)将于2024年10月18日至22日在广州举办࿰…...
【Golang】slice切片
slice Go语言的切片是对数组的抽象。 数组的使用 package mainimport ("fmt" )// 传递固定长度的数组还是值传递的方式 func printArray(myArray [5]int) {for index, value : range myArray {fmt.Println("index:", index, "value:", value)…...
开源网安模糊测试平台SFuzz全新升级,从标准到实践助力车企安全出海
开源网安模糊测试平台SFuzz全新升级,参照各国相关标准要求进行针对性建设,可为智能网联汽车信息安全测试提供更为强大的工具支持。SFuzz向被测系统输入大量随机数据,模拟各种异常情况,可以发现被测系统内潜在的缺陷和漏洞…...
CTF show Web 红包题第六弹
提示 1.不是SQL注入 2.需要找关键源码 思路 进入页面发现是一个登录框,很难让人不联想到SQL注入,但提示都说了不是SQL注入,所以就不往这方面想了 先查看一下网页源码,发现一段JavaScript代码,有一个关键类ctfs…...
.Net框架,除了EF还有很多很多......
文章目录 1. 引言2. Dapper2.1 概述与设计原理2.2 核心功能与代码示例基本查询多映射查询存储过程调用 2.3 性能优化原理2.4 适用场景 3. NHibernate3.1 概述与架构设计3.2 映射配置示例Fluent映射XML映射 3.3 查询示例HQL查询Criteria APILINQ提供程序 3.4 高级特性3.5 适用场…...
深入理解JavaScript设计模式之单例模式
目录 什么是单例模式为什么需要单例模式常见应用场景包括 单例模式实现透明单例模式实现不透明单例模式用代理实现单例模式javaScript中的单例模式使用命名空间使用闭包封装私有变量 惰性单例通用的惰性单例 结语 什么是单例模式 单例模式(Singleton Pattern&#…...
Java入门学习详细版(一)
大家好,Java 学习是一个系统学习的过程,核心原则就是“理论 实践 坚持”,并且需循序渐进,不可过于着急,本篇文章推出的这份详细入门学习资料将带大家从零基础开始,逐步掌握 Java 的核心概念和编程技能。 …...
实现弹窗随键盘上移居中
实现弹窗随键盘上移的核心思路 在Android中,可以通过监听键盘的显示和隐藏事件,动态调整弹窗的位置。关键点在于获取键盘高度,并计算剩余屏幕空间以重新定位弹窗。 // 在Activity或Fragment中设置键盘监听 val rootView findViewById<V…...
基于TurtleBot3在Gazebo地图实现机器人远程控制
1. TurtleBot3环境配置 # 下载TurtleBot3核心包 mkdir -p ~/catkin_ws/src cd ~/catkin_ws/src git clone -b noetic-devel https://github.com/ROBOTIS-GIT/turtlebot3.git git clone -b noetic https://github.com/ROBOTIS-GIT/turtlebot3_msgs.git git clone -b noetic-dev…...
GitFlow 工作模式(详解)
今天再学项目的过程中遇到使用gitflow模式管理代码,因此进行学习并且发布关于gitflow的一些思考 Git与GitFlow模式 我们在写代码的时候通常会进行网上保存,无论是github还是gittee,都是一种基于git去保存代码的形式,这样保存代码…...
[大语言模型]在个人电脑上部署ollama 并进行管理,最后配置AI程序开发助手.
ollama官网: 下载 https://ollama.com/ 安装 查看可以使用的模型 https://ollama.com/search 例如 https://ollama.com/library/deepseek-r1/tags # deepseek-r1:7bollama pull deepseek-r1:7b改token数量为409622 16384 ollama命令说明 ollama serve #:…...
django blank 与 null的区别
1.blank blank控制表单验证时是否允许字段为空 2.null null控制数据库层面是否为空 但是,要注意以下几点: Django的表单验证与null无关:null参数控制的是数据库层面字段是否可以为NULL,而blank参数控制的是Django表单验证时字…...
提升移动端网页调试效率:WebDebugX 与常见工具组合实践
在日常移动端开发中,网页调试始终是一个高频但又极具挑战的环节。尤其在面对 iOS 与 Android 的混合技术栈、各种设备差异化行为时,开发者迫切需要一套高效、可靠且跨平台的调试方案。过去,我们或多或少使用过 Chrome DevTools、Remote Debug…...
