(7) 探索Python函数的无限可能:从递归到Lambda的奇妙之旅

欢迎进入Python编程的奇幻世界!在这个课程中,我们将一起探索编程的乐趣,通过生动有趣的方式,培养编程的逻辑思维和创造力,该课程适合有一定基础的中学及以上学生及成年人。
以下是我们课程的大纲:
【Python:趣味编程,探索未来】

在这里插入图片描述

目录

  • 1. 前言
  • 2. 认识我们的“魔法咒语”——函数
    • 2.1 函数的定义
    • 2.2 函数的调用
    • 2.3 几个简单的函数定义及调用的小例子
      • 2.3.1 不带参数及返回值的小例子
      • 2.3.2 带参数不带返回值的小例子
      • 2.3.3 带参数及返回值的小例子
    • 2.4 函数的参数
      • 2.4.1 不可变参数
      • 2.4.1 可变参数
    • 2.5 函数的参数类型
      • 2.5.1 位置参数
      • 2.5.2 关键字参数
      • 2.5.3 默认参数
      • 2.5.3 不定长参数(又名:可变参数)
      • 2.5.4 可变的关键字参数
  • 3. 神奇的“无名咒语”——Lambda 函数
  • 4. 自己变出魔法咒语——递归函数
        • 五、让魔法咒语更强大——装饰器

1. 前言

在当今的编程世界中,Python 凭借其简洁的语法、强大的库支持和广泛的应用领域,成为了许多开发者首选的编程语言。

函数作为编程中的核心概念之一,是组织代码、提高代码复用性和可读性的重要手段。

本文将带你深入了解 Python 中的函数编程,从基础到进阶,帮助你掌握这一关键技能。

2. 认识我们的“魔法咒语”——函数

首先,我们要知道什么是函数。函数就像是一个魔法盒子,你给它一些“材料”(参数),它就能帮你变出你想要的东西(返回值)。但是,这个魔法盒子需要你先告诉它怎么做,这就是编写函数的过程。

2.1 函数的定义

函数的定义格式如下:

def 函数名(参数列表):
    函数体

说明:

  • 函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()
  • 圆括号之间用于定义参数,可以传入多个参数,参数之间逗号分隔
  • 函数内容以冒号 : 起始,内容必须缩进
  • 如果有返回值,最后使用 return [表达式] 结束函数;如果没有返回值,return 可以不写 。

2.2 函数的调用

函数的调用可以通过另一个函数调用执行,也可以直接从 Python 命令提示符执行。

  • 通过函数名称进行调用
  • 不调用,函数不执行

2.3 几个简单的函数定义及调用的小例子

2.3.1 不带参数及返回值的小例子

def hello() :
    print("Hello World!")

hello()

结果:

Hello World!

2.3.2 带参数不带返回值的小例子

def greet(name):
    print(f"Hello, {
     name}!")
 
greet("Alice")

结果:

Hello, Alice!

2.3.3 带参数及返回值的小例子

def max(a, b):
    if a > b:
        return a
    else:
        return b
 
a = 4
b = 5
print(max(a, b))

结果:

5

2.4 函数的参数

形参:形参是函数定义中用于接收传入值的变量
实参:实参是在函数调用时实际传递给函数的值或变量。

如:

def greet(name):    # 定义函数greet, name为形式参数
    print(f"Hello, {
     name}!")
 
greet("Alice")    # 调用函数,"Alice"为实际参数

2.4.1 不可变参数

在Python中,不可变参数(immutable parameters)指的是那些一旦赋值后,其值就不能被改变的参数。

Python中的不可变类型包括整数(int)、浮点数(float)、字符串(str)和元组(tuple)等。

当你将一个不可变对象作为参数传递给一个函数时,函数内部接收到的实际上是这个对象的一个引用(或者说是指针)。但是,由于这个对象是不可变的,所以你不能在函数内部改变这个对象的值。如果你尝试这样做,Python会创建一个新的对象,而不是修改原来的对象。

下面是一个简单的例子来说明不可变参数的行为:

def modify_string(s):
    s = "new string"  # 这里并没有改变原来的字符串,而是创建了一个新的字符串对象

original_string = "old string"
modify_string(original_string)
print(original_string)  # 输出:old string,原来的字符串没有被改变

在这个例子中,尽管我们在函数modify_string内部给参数s赋了一个新的字符串值,但是这个改变并没有影响到函数外部的original_string变量。这是因为字符串是不可变的,所以s = "new string"这行代码实际上是在内存中创建了一个新的字符串对象,并将s指向了这个新对象,而原来的字符串对象(“old string”)仍然保持不变。

2.4.1 可变参数

在Python中,可变参数(mutable parameters)指的是那些一旦赋值后,其值可以被改变的参数。与不可变参数(如整数、浮点数、字符串和元组)不同,可变参数允许在函数内部进行修改,并且这些修改会影响到函数外部的原始对象。

Python中的可变类型主要包括列表(list)、字典(dict)、集合(set)以及用户自定义的类实例等。当这些可变对象作为参数传递给函数时,函数内部接收到的是这个对象的引用(或指针),因此可以在函数内部直接修改这个对象的内容或结构。

下面是一个简单的例子来说明可变参数的行为:

def modify_list(lst):
    lst.append(4)  # 修改列表的内容

original_list = [1, 2, 3]
modify_list(original_list)
print(original_list)  # 输出:[1, 2, 3, 4],原来的列表被改变了

在这个例子中,我们在函数modify_list内部使用append方法修改了列表lst的内容。由于列表是可变的,所以这个修改影响到了函数外部的original_list变量。

需要注意的是,虽然你可以在函数内部修改可变对象的内容,但是如果你尝试将函数内部的可变对象重新指向一个新的对象(例如通过赋值操作),那么这种改变不会影响到函数外部的原始对象。这是因为函数内部的可变参数仍然只是一个引用,当你重新赋值时,你只是让这个引用指向了一个新的对象

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【深度学习|目标跟踪】DeepSort 详解

DeepSort详解 1、Sort回顾2、DeepSort的状态向量3、DeepSort的外观特征4、DeepSort的track状态5、DeepSort的代价矩阵以及门控矩阵6、DeepSort的级联匹配 1、Sort回顾 查看这篇博客 2、DeepSort的状态向量 Sort中的卡尔曼滤波使用的目标的状态向量是一个7维的向量&#xff0c…

MetaGPT实现多动作Agent

异步编程学习链接 智能体 LLM观察思考行动记忆 多智能体 智能体环境SOP评审路由订阅经济 教程地址 多动作的agent的本质是react,这包括了think(考虑接下来该采取啥动作)act(采取行动) 在MetaGPT的examples/write_…

重学SpringBoot3-Spring Retry实践

更多SpringBoot3内容请关注我的专栏:《SpringBoot3》 期待您的点赞👍收藏⭐评论✍ 重学SpringBoot3-Spring Retry实践 1. 简介2. 环境准备3. 使用方式3.1 注解方式基础使用自定义重试策略失败恢复机制重试和失败恢复效果注意事项 3.2 编程式使用3.3 监听…

E. Counting Arrays

题意:给定一个长度为n,要求乘积为m,其中组成m的数要求是整数 思路:首先有个很显然的想法:设表示前i个点乘积为j的最小值。因为询问数很多,所以必须离线把所有的东西都处理出来。 转移:&#x…

Leetcode 生命游戏

以下是上述Java代码的算法思想及其逻辑的中文解释: 算法思想 这段代码实现了LeetCode第289题“生命游戏”的解决方案。核心思想是: 利用原地修改的方式(in-place)存储下一状态的变化: 通过引入额外的状态值&#xff0…

文件管理 IV(文件系统)

一、文件系统结构 文件系统(File system)提供高效和便捷的磁盘访问,以便允许存储、定位、提取数据。文件系统有两个不同的设计问题:第一个问题是,定义文件系统的用户接口,它涉及定义文件及其属性、所允许的…

单神经元 PID 解耦控制

单神经元 PID 解耦控制是一种将单神经元自适应控制与解耦控制相结合的方法,适用于多输入多输出(MIMO)系统。其核心是利用单神经元的自适应能力实现 PID 参数在线调整,同时通过解耦策略减少变量之间的相互影响,提高控制…

【青牛科技】电流模式PWM控制器系列--D4870

概述: D4870是用于开关电源的电流模式PWM(PWM)控制器系列产品。 该电路待机功耗低,启动电流低。在待机模式下,电路进入间歇工作模式,从而有效地降低电路的待机功耗。 电路的开关频率为 65KHz,抖动的振荡频率&…

【8210A-TX2】Ubuntu18.04 + ROS_ Melodic + TM-16多线激光 雷达评测

简介:介绍 TM-16多线激光雷达 在8210A载板,TX2核心模块环境(Ubuntu18.04)下测试ROS驱动,打开使用RVIZ 查看点云数据,本文的前提条件是你的TX2里已经安装了ROS版本:Melodic。 大家好,…

计算机毕设-基于springboot的高校网上缴费综合务系统视频的设计与实现(附源码+lw+ppt+开题报告)

博主介绍:✌多个项目实战经验、多个大型网购商城开发经验、在某机构指导学员上千名、专注于本行业领域✌ 技术范围:Java实战项目、Python实战项目、微信小程序/安卓实战项目、爬虫大数据实战项目、Nodejs实战项目、PHP实战项目、.NET实战项目、Golang实战…

在 macOS 和 Linux 中,波浪号 `~`的区别

文章目录 1、在 macOS 和 Linux 中,波浪号 ~macOS示例 Linux示例 区别总结其他注意事项示例macOSLinux 结论 2、root 用户的主目录通常是 /root解释示例切换用户使用 su 命令使用 sudo 命令 验证当前用户总结 1、在 macOS 和 Linux 中,波浪号 ~ 在 macO…

【SQL Server】华中农业大学空间数据库实验报告 实验九 触发器

1.实验目的 通过实验课程与理论课的学习深入理解掌握的触发器的原理、创建、修改、删除、基本的使用方法、主要用途,并且可以在练习的基础上,熟练使用触发器来进行数据库的应用程序的设计;深入学习深刻理解与触发器相关的T-SQL语句的编写的基…

小程序24-滚动效果:scroll-view组件详解

在微信小程序中如果想实现内容滚动,需要使用 scroll-view 组件 scroll-view:可滚动视图区域,适用于需要滚动展示内容的场景,用户可以通过手指滑动或者点击滚动条滚动内容。 scroll-x允许横向滚动scroll-y允许纵向滚动 实现横向…

Leetcode 分发糖果

这段代码的算法思想是 贪心算法,通过两次遍历,分别从左到右、从右到左调整糖果分配,以满足题目中相邻评分较高的孩子必须获得更多糖果的要求,并最终计算出最少需要分配的糖果总数。 以下是代码的详细思想与执行过程: …

39页PDF | 毕马威_数据资产运营白皮书(限免下载)

一、前言 《毕马威数据资产运营白皮书》探讨了数据作为新型生产要素在企业数智化转型中的重要性,提出了数据资产运营的“三要素”(组织与意识、流程与规范、平台与工具)和“四重奏”(数据资产盘点、评估、治理、共享)…

【Redis_Day5】String类型

【Redis_Day5】String类型 String操作String的命令set和get:设置、获取键值对mset和mget:批量设置、获取键值对setnx/setex/psetexincr和incrby:对字符串进行加操作decr/decrby:对字符串进行减操作incrbyfloat:浮点数加…

linux安装mysql57——笔记

rpm -qa | grep mysql有东西就rpm -e 文件名 下载 wget -i -c http://dev.mysql.com/get/mysql57-community-release-el7-10.noarch.rpm安装 yum -y install mysql57-community-release-el7-10.noarch.rpm安装 yum -y install mysql-community-server如果出现Error: GPG c…

基于Java Springboot高校会议室预订管理系统

一、作品包含 源码数据库设计文档万字PPT全套环境和工具资源部署教程 二、项目技术 前端技术:Html、Css、Js、Vue、Element-ui 数据库:MySQL 后端技术:Java、Spring Boot、MyBatis 三、运行环境 开发工具:IDEA/eclipse 数据…

基于 NCD 与优化函数结合的非线性优化 PID 控制

基于 NCD 与优化函数结合的非线性优化 PID 控制 1. 引言 NCD(Normalized Coprime Factorization Distance)优化是一种用于非线性系统的先进控制方法。通过将 NCD 指标与优化算法结合,可以在动态调整控制参数的同时优化控制器性能。此方法特别…

数据库表设计范式

华子目录 MYSQL库表设计:范式第一范式(1NF)第二范式(2NF)第三范式(3NF)三范式小结巴斯-科德范式(BCNF)第四范式(4NF)第五范式(5NF&…