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

news2024/11/23 13:24:22

欢迎进入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变量。

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

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

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

相关文章

算法日记 32 day 动态规划(完全背包)

同样是背包问题,但01背包和完全背包是两个类型的问题。 完全背包: 完全背包与01背包的区别在于物品的个数是否是无限的。除此之外,在解决01背包的时候dp的背包遍历的顺利是倒序,为的是保证物品只被添加一次,而完全背包…

实用功能,觊觎(Edge)浏览器的内置截(长)图功能

Edge浏览器内置截图功能 近年来,Edge浏览器不断更新和完善,也提供了长截图功能。在Edge中,只需点击右上角的“...”,然后选择“网页捕获”->“捕获整页”,即可实现长截图。这一功能的简单易用,使其成为…

计算机网络:应用层知识点概述及习题

网课资源: 湖科大教书匠 1、概述 习题1 1 在计算机网络体系结构中,应用层的主要功能是 A. 实现进程之间基于网络的通信 B. 通过进程之间的交互来实现特定网络应用 C. 实现分组在多个网络上传输 D. 透明传输比特流 2 以下不属于TCP/IP体系结构应用层范畴…

【LSTM实战】跨越千年,赋诗成文:用LSTM重现唐诗的韵律与情感

本文将介绍如何使用LSTM训练一个能够创作诗歌的模型。为了训练出效果优秀的模型,我整理了来自网络的4万首诗歌数据集。我们的模型可以直接使用预先训练好的参数,这意味着您无需从头开始训练,即可在自己的电脑上体验AI作诗的乐趣。我已经为您准…

鸿蒙网络编程系列50-仓颉版TCP回声服务器示例

1. TCP服务端简介 TCP服务端是基于TCP协议构建的一种网络服务模式,它为HTTP(超文本传输协议)、SMTP(简单邮件传输协议)等高层协议的应用程序提供了可靠的底层支持。在TCP服务端中,服务器启动后会监听一个或…

基于 SpringBoot 的作业管理系统【附源码】

基于 SpringBoot 的作业管理系统 效果如下: 系统注册页面 学生管理页面 作业管理页面 作业提交页面 系统管理员主页面 研究背景 随着社会的快速发展,信息技术的广泛应用已经渗透到各个行业。在教育领域,课程作业管理是学校教学活动中的重要…

怎么只提取视频中的声音?从视频中提取纯音频技巧

在数字媒体的广泛应用中,提取视频中的声音已成为一项常见且重要的操作。无论是为了学习、娱乐、创作还是法律用途,提取声音都能为我们带来诸多便利。怎么只提取视频中的声音?本文将详细介绍提取声音的原因、工具、方法以及注意事项。 一、为什…

Java多态的优势和弊端

1. public class text {public static void main(String[] args) {animal dnew dog();d.eat();// dog a (dog) d;//类似强制转换//a.lookhome();/* if(d instanceof dog){dog a(dog)d;a.lookhome();}else if(d instanceof cat){cat c(cat) d;c.work();}else{System.out.print…

FPGA 14 ,硬件开发板分类详解,FPGA开发板与普通开发板烧录的区别

目录 前言 在嵌入式系统开发中,硬件开发板是工程师常用的工具之一。不同类型的开发板有不同的特点和用途,其中最常见的两大类是普通开发板和FPGA开发板。这里分享记录,这两类开发板的分类,并深入探讨它们在烧录过程中的具体区别…

冲破AI 浪潮冲击下的 迷茫与焦虑

在这个科技日新月异的时代,人工智能如汹涌浪潮般席卷而来,不断改变我们的生活。你是否对 AI 充满好奇,却不知它将如何改变你的工作与生活?又是否会在 AI 浪潮的冲击下陷入迷茫与焦虑?《AI 时代:弯道超车新思…

时序论文23|ICML24谷歌开源零样本时序大模型TimesFM

论文标题:A DECODER - ONLY FOUNDATION MODEL FOR TIME - SERIES FORECASTING 论文链接:https://arxiv.org/abs/2310.10688 论文链接:https://github.com/google-research/timesfm 前言 谷歌这篇时间序列大模型很早之前就在关注&#xff…

Redis的基本使用命令(GET,SET,KEYS,EXISTS,DEL,EXPIRE,TTL,TYPE)

目录 SET GET KEYS EXISTS DEL EXPIRE TTL redis中的过期策略是怎么实现的(面试) 上文介绍reids的安装以及基本概念,本章节主要介绍 Redis的基本使用命令的使用 Redis 是一个基于键值对(KEY - VALUE)存储的…

大疆上云api开发

目前很多公司希望使用上云api开发自己的无人机平台,但是官网资料不是特别全,下面浅谈一下本人开发过程中遇到的一系列问题。 本人使用机场为大疆机场2,飞机为M3TD,纯内网使用 部署 链接: 上云api代码. 首先从github上面拉去代码 上云api代码github. 后…

实现管易云到金蝶云星空的数据无缝集成

管易云数据集成到金蝶云星空:案例分享 在企业信息化系统中,数据的高效流动和准确对接是业务顺利运行的关键。本文将聚焦于一个具体的系统对接集成案例——通过轻易云数据集成平台实现管易云数据到金蝶云星空的无缝迁移,方案名称为“wk_店铺_…

Ubuntu上安装MySQL并且实现远程登录

目录 下载网络工具 查看网络连接 更新系统软件包; 安装mysql数据库 查看mysql数据库状态 以数字ip形式显示mysql的监听状态。(默认监听端口是3306) 查看安装mysql数据库时系统创建的目录信息。 根据查询到的系统用户名以及随机密码&a…

卷积神经网络各层介绍

目录 1 卷积层 2 BN层 3 激活层 3.1 ReLU(Rectified Linear Unit) 3.2 sigmoid 3.3 tanh(双曲正切) 3.4 Softmax 4 池化层 5 全连接层 6 模型例子 1 卷积层 卷积是使用一个卷积核(滤波器)对矩阵进…

LVS

一、 lvs简介 LVS:Linux Virtual Server ,负载调度器,内核集成,章文嵩,阿里的四层 SLB(Server LoadBalance) 是基 于 LVSkeepalived 实现 LVS 官网 : http://www.linuxvirtualserver.org/ LVS 相关术语 VS: Virtual Serve…

使用 Elastic AI Assistant for Search 和 Azure OpenAI 实现从 0 到 60 的转变

作者:来自 Elastic Greg Crist Elasticsearch 推出了一项新功能:Elastic AI Assistant for Search。你可以将其视为 Elasticsearch 和 Kibana 开发人员的内置指南,旨在回答问题、引导你了解功能并让你的生活更轻松。在 Microsoft AI Services…

掺铒光纤激光器

一、光纤激光器的特点 实现灵活的激光光源(窄线宽、可调谐、多波长、超短光脉冲源)易获得高功率、高的光脉冲能量激光波长与光纤通信传输窗口相匹配采用激光器泵浦形式(半导体激光器泵浦)热稳定性、价格低廉、易小型化 二、放大…

AP+AC组网——STA接入

扫描 主动扫描:STA发送Probe Request帧,AP收到回复Probe Response 可以带着SSID扫描寻找指定WIFI,也可以带着空SSID扫描进入周围可用WLAN 被动扫描: 客户端通过侦听AP定期发送的Beacon帧(100TUs,1TU1024…