Python教学入门:函数

news/2024/5/3 4:17:40

在这里插入图片描述

在 Python 中,def 关键字用于定义函数。函数是一段可重用的代码块,用于执行特定的任务或操作。通过定义函数,可以将一段代码封装起来,使其可以在程序中被多次调用,提高代码的复用性和可维护性。
在这里插入图片描述
下面是 def 函数定义的基本语法结构:

def function_name(parameters):"""Docstring"""# Function body# 可能包含多条语句return value

def:关键字用于声明函数的开始。
function_name:函数的名称,用于标识函数。
parameters:函数的参数列表,可以是零个或多个参数,多个参数之间用逗号分隔。
“”“Docstring”“”:函数的文档字符串(docstring),用于描述函数的作用、参数和返回值等信息。
return value:return 语句用于从函数中返回值,可以选择性地指定返回值。如果函数不需要返回值,可以省略 return 语句。
在这里插入图片描述

下面是一个简单的示例,演示了如何定义一个函数并调用它:

def greet(name):"""This function greets the person with the given name."""print("Hello, " + name + "!")# 调用函数
greet("Alice")  # 输出:Hello, Alice!

函数的参数传递

位置参数:
位置参数是最常见的参数传递方式,它按照定义时的顺序将参数传递给函数。调用函数时,传递的参数数量和顺序必须与函数定义时的参数数量和顺序一致。
在这里插入图片描述

def greet(name, message):print(f"{message}, {name}!")# 调用函数
greet("Alice", "Hello")  # 输出:Hello, Alice!

关键字参数:
关键字参数允许在调用函数时使用参数名来传递参数,可以无需考虑参数的顺序。在函数定义时,可以使用 **kwargs 来表示一个字典,其中包含了所有额外的关键字参数。
在这里插入图片描述

def greet(**kwargs):for name, message in kwargs.items():print(f"{message}, {name}!")# 调用函数
greet(Alice="Hello", Bob="Hi", Charlie="Hey")  # 输出:Hello, Alice! Hi, Bob! Hey, Charlie!

默认参数:
默认参数允许在定义函数时为参数指定默认值,如果调用函数时未提供该参数的值,则会使用默认值。
在这里插入图片描述

def greet(name, message="Hello"):print(f"{message}, {name}!")# 调用函数
greet("Alice")  # 输出:Hello, Alice!
greet("Bob", "Hi")  # 输出:Hi, Bob!

可变数量参数:
可变数量参数允许函数接受任意数量的参数。在函数定义时,可以使用 *args 来表示一个元组,其中包含了所有额外的位置参数。
可变数量参数也被称为不定长参数,因为它们允许函数接受任意数量的参数,而不需要事先确定参数的数量。在 Python 中,可变数量参数使用 *args 来表示,它将额外的位置参数收集到一个元组中。这使得函数能够处理不同数量的参数,而不必为每种情况都定义不同的函数签名。
在这里插入图片描述

def greet(*names):for name in names:print(f"Hello, {name}!")# 调用函数
greet("Alice", "Bob", "Charlie")  # 输出:Hello, Alice! Hello, Bob! Hello, Charlie!

什么是变量的作用域?

局部作用域(Local Scope):局部作用域是指在函数内部定义的变量,只能在函数内部被访问。这意味着它们的生命周期仅限于函数的执行期间。
在这里插入图片描述

def my_function():x = 10  # x 是局部变量print(x)my_function()  # 输出:10
print(x)  # 报错,x 在函数外部不可访问

全局作用域(Global Scope):全局作用域是指在模块顶层定义的变量,可以在模块中的任何地方被访问。
在这里插入图片描述

x = 10  # 全局变量def my_function():print(x)  # 函数中可以访问全局变量my_function()  # 输出:10
print(x)  # 输出:10

嵌套作用域(Enclosing Scope):嵌套作用域是指在嵌套函数中访问的变量,例如一个函数内部包含另一个函数。内部函数可以访问外部函数中的变量,但外部函数无法访问内部函数的变量。

def outer_function():x = 10  # 外部函数的局部变量def inner_function():print(x)  # 内部函数可以访问外部函数的变量inner_function()outer_function()  # 输出:10

内置作用域(Built-in Scope):内置作用域是指 Python 中预先定义的一些内置函数和对象,例如 print()、len() 等。这些内置函数和对象可以在任何地方被访问。

print("Hello, world!")  # 内置函数在任何地方都可以访问

函数的特殊形式

匿名函数(lambda 函数):
匿名函数是一种特殊的函数形式,它使用 lambda 关键字来创建,通常用于简单的函数操作。它们可以在需要函数对象的任何地方使用,并且通常用于作为参数传递给高阶函数。

在这里插入图片描述

# lambda 函数的语法:lambda parameters: expression
# 创建一个简单的匿名函数,计算两个数的和
add = lambda x, y: x + y
print(add(3, 5))  # 输出:8# 在排序函数中使用 lambda 函数
pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda pair: pair[1])  # 按元组中的第二个元素排序
print(pairs)  # 输出:[(4, 'four'), (1, 'one'), (3, 'three'), (2, 'two')]

生成器函数:
生成器函数是一种特殊的函数形式,它使用 yield 关键字来生成一个值序列。当调用生成器函数时,它会返回一个生成器对象,可以逐个地产生值而不必一次性生成所有值,从而节省内存空间。

# 定义一个简单的生成器函数,生成斐波那契数列
def fibonacci():a, b = 0, 1while True:yield aa, b = b, a + b# 调用生成器函数,返回一个生成器对象
fib_gen = fibonacci()# 逐个生成斐波那契数列的值
for i in range(10):print(next(fib_gen))  # 通过 next() 函数获取下一个值

递归函数
递归是一种常见的问题解决技巧,通常用于解决可以被拆解为更小相同问题的问题。递归函数在问题的解决过程中,通过逐步缩小问题的规模,最终达到一个简单的基本情况,然后开始回溯,将所有解决子问题的结果合并为最终的解决方案。
在这里插入图片描述

def factorial(n):if n == 0:  # 基本情况:0 的阶乘为 1return 1else:return n * factorial(n - 1)  # 递归调用自身,缩小问题规模# 调用递归函数
result = factorial(5)
print(result)  # 输出:120

http://www.mrgr.cn/p/31826071

相关文章

2024.4.13 Python 爬虫复习day01

目录 day01_HTTP协议HTML页面web服务器 各类名词解释 URL统一资源定位符 HTTP协议 HTML页面 知识点: 第一个页面 标题标签和图片标签 注册页面 登录页面 WEB服务器 安装fastapi和uvicorn 原始命令方式 镜像源命令方式 工具方式 快速搭建web服务器 知识点: 示例…

设计模式———单例模式

单例也就是只能有一个实例,即只创建一个实例对象,不能有多个。 可能会疑惑,那我写代码的时候注意点,只new一次不就得了。理论上是可以的,但在实际中很难实现,因为你无法预料到后面是否会脑抽一下~~因此我们…

Codes 重新定义 SaaS 模式的研发项目管理平台开源版 4.5.3 发布

Codes 是一个 开源、高效、简洁、轻量的一站式研发项目管理平台。包含需求管理,任务管理,测试管理,缺陷管理,自动化测试,cicd 等功能; Codes 重新定义 SaaS 模式 = 云端认证 + 程序及数据本地安装 + 不限功能 + 30 人免费一:简介Codes 重新定义 SaaS 模式 = 云端认证 …

【微信小程序】解决分页this.setData数据量太大的限制问题

1、原始方法,每请求一页都拿到之前的数据concat一下后整体再setData loadData() {let that thislet data {}data.page this.data.pagedata.size this.data.sizefindAll(data).then(res > {if (res.data.code 1) {this.setData({dataList: this.data.dataLi…

synchronization(同步)

并发进程之间的关系在内存中同时存在的若干个进程/线程,由操作系统的调度程序采用适当的策略将他们调度至cpu上运行,同时维护他们的状态队列。多个并发进程/线程从宏观上是同时在运行; 从微观的角度看,他们的运行过程是走走停停; 并发的进程/线程是交替执行(Interleaving…

修改中文、英文参考文献在文末列表中的顺序:EndNote

本文介绍在EndNote软件中,使得参考文献按照语种排列,中文在前、英文在后的方法~本文介绍在EndNote软件中,使得参考文献按照语种排列,中文在前、英文在后的方法。前期我们在EndNote参考文献格式Output Styles界面介绍一文中,详细介绍了文献管理软件EndNote的引用格式自定义…

网络编程ServerSocketChannel

ServerSocketChannel 1 非阻塞 vs 阻塞1.1 阻塞1.2 非阻塞1.3 多路复用 2 Selector2.1 创建2.2 绑定 Channel 事件2.3 监听 Channel 事件2.4 💡 select 何时不阻塞 3 处理 accept 事件💡 事件发生后能否不处理 4 处理 read 事件4.1 💡 为何要…

蓝桥杯2024年第十五届省赛真题-宝石组合

思路:参考博客,对Ha,Hb,Hc分别进行质因数分解会发现,S其实就等于Ha,Hb,Hc的最大公约数,不严谨推导过程如下(字丑勿喷): 找到此规律后,也不能枚举Ha&#xff…

SURE:增强不确定性估计的组合拳,快加入到你的训练指南吧 | CVPR 2024

论文重新审视了深度神经网络中的不确定性估计技术,并整合了一套技术以增强其可靠性。论文的研究表明,多种技术(包括模型正则化、分类器改造和优化策略)的综合应用显着提高了图像分类任务中不确定性预测的准确性 来源:晓飞的算法工程笔记 公众号论文: SURE: SUrvey REcipes…

基于face_recognition实现的人脸识别功能

环境Python 3.11.8 dlib == 19.24.4 opencv-python == 4.9.0.80 numpy == 1.26.4 face_recognition == 1.3.0通过本地图片采集人脸编码 import os import cv2 import face_recognition encode_list = [] image_field_path = os.path.join(., images) images_file_list = os.lis…

Spring Boot 目前还是最先进的吗?

当谈到现代Java开发框架时,Spring Boot一直处于领先地位。它目前不仅是最先进的,而且在Java生态系统中拥有着巨大的影响力。 1. 什么是Spring Boot? Spring Boot是由Spring团队开发的开源框架,旨在简化基于Spring的应用程序的开…

4.10 + (double)(rand()%10)/100.0

机房是我家黑色星期四 坏消息: 没有奥赛课,所以大概率调不出来 CF1479D 好消息: 5k 回来了,调题有望 🥰 中午起床直接来的机房,有学科自习就说我不知道 结果被叫回去了 😢 而且今天班里没水了,趁着大课间跑操又去了一趟机房,赢 奥赛大会 老规矩颁奖典礼打头 不一样的…

RAG 2.0架构详解:构建端到端检索增强生成系统

关于检索增强生成(RAG)的文章已经有很多了,如果我们能创建出可训练的检索器,或者说整个RAG可以像微调大型语言模型(LLM)那样定制化的话,那肯定能够获得更好的结果。但是当前RAG的问题在于各个子模块之间并没有完全协调,就像一个缝合怪一样,虽然能够工作但各部分并不和…

东方博宜 1157. 最小数

东方博宜 1157. 最小数 今天不想写思路&#xff0c;乱糟糟的&#xff0c;能运行就拉倒了 #include <iostream> using namespace std; int main() {int n ;int a[201] ;cin >> n ;for(int i 1 ; i < n ; i){cin >> a[i] ; } int j ;j 1 ;for(int i 1…

Java对接第三方接口C#语言 请求是xml格式方式

文章目录 目录 文章目录 安装流程 小结 概要写法流程技术细节小结 概要 实现方式通过标签方式获取一个Body内标签的信息一步一步解析到需要获取到的数据信息 写法流程 技术细节 先和对面对接项目的开发拿到postman接口数据信息&#xff0c;然后再本地跑通接口&#xff0c;再进…

荣誉

荣誉 个人 学习委员 国防教育先锋队 朋辈导师 优秀团员 省级三好学生 职业技能大赛网络安全 河南省第七届御网杯信息安全大赛三等奖第二十届全国大学生信息安全对抗技术竞赛 ​ 数通 H3C认证路由交换网络工程师.pdf H3CSE-RS-IPv6.pdf 华为ICT网络赛道三等奖华为 HarmonyOS应用…

Windows10中多屏显示器型号获取并与Screen对应

需求:标识某块屏,不参与窗口快速移动 @@@codepublic class Monitor{/// <summary>/// DeviceID,如: \\.\DISPLAY17/// </summary>public String DeviceName { get; set; } /// <summary>/// 名称,如: Default_Monitor/// </summary>public…

制作适用于openstack平台的win10镜像

1. 安装准备 从MSDN下载windows 10的镜像虚拟机开启CPU虚拟化的功能。从Fedora 网站下载已签名的 VirtIO 驱动程序 ISO 。 创建15 GB 的 qcow2 镜像&#xff1a;qemu-img create -f qcow2 win10.qcow2 15G 安装必要的软件 yum install qemu-kvm qemu-img virt-manager libvir…

ubuntu20 解决网线不能联网 RTL8111/8168/8411

这种问题一般是驱动没有正确安装。 ----RTL8111/8168/8411是一块比较坑的网卡。 1、 查看网卡信息 lspci |grep Ethernet2、 对于高版本的Ubuntu&#xff0c;能直接使用命令安装驱动。下面的r8168-dkms需根据网卡信息修改&#xff0c;上面的网卡信息还有8111&#xff0c;但逐个…

【云原生】Spring Cloud微服务学习路线汇总

【云原生】Spring Cloud微服务学习路线汇总Spring Cloud是什么?简单来说Spring Cloud是一系列框架的组成集合。主要利用的我们现在主流应用的Spring Boot框架开发便利性、巧妙地简化了分布式系统基础设施的开发,如服务发现注册、配置中心、消息总线、负载均衡、断路器、数据监…