当前位置: 首页 > news >正文

【Python函数编程实战】:从基础到进阶,打造代码复用利器

文章目录

      • 🚋前言
      • 🚀一、认识函数
      • 🌈二、函数定义
      • ❤️三、函数调用
      • ⭐四、实参与形参
        • 💥1. 形式参数
        • 🚲2. 实际参数
          • 🔥1. 位置参数
          • ☔2. 关键字参数
          • 🎬3. 默认参数
          • 🔥4. 可变数量参数(不定长参数)
          • 💥5. 不定长位置参数
          • ☔6. 不定长关键字参数
      • 🎬五、了解匿名函数
        • 👊六、 定义匿名函数
        • ☔2. 总结

🚋前言

在这里插入图片描述
函数在Python中扮演着至关重要的角色,它们不仅封装了代码的逻辑单元,提高了代码的复用性和模块化程度,还通过参数传递和返回值,实现了数据和结果的灵活交换。Python函数支持多种定义方式,从最基础的def关键字开始,你就能创建自定义函数,通过return语句指定函数的输出。更进一步,Python引入了匿名函数lambda,允许你在无需命名的情况下定义简短的函数表达式,非常适合处理小规模、一次性使用的功能片段。参数机制是Python函数的另一大亮点,支持位置参数、关键字参数、默认参数、可变参数等多种形式,使得函数设计更为灵活,能够应对多样化的输入需求。同时,函数的局部作用域与全局作用域的概念,以及闭包的运用,为理解和管理变量生命周期提供了清晰的框架。Python还支持高阶函数,即函数可以作为参数传递给其他函数,或是作为其他函数的返回值,这为函数式编程风格打开了大门,极大地拓展了代码的表达力和抽象层次。

🚀一、认识函数

在Python中,函数是一种可重用的代码块,用于执行特定的任务。通过将代码封装在函数中,可以使程序更加模块化、易于维护和扩展。

当我们需要在程序中执行一些重复性的任务时,可以使用函数来封装这些任务代码,然后在需要的地方调用该函数。

优势

  • 函数能够提高代码的可读性和可维护性,因为它们能够将复杂的任务分解成小块,并命名好每个部分。
  • 函数可以节省时间和减少出错率,因为它们能够避免重复编写相同的代码,从而提高开发效率。
  • 函数可以使程序更模块化,使得代码更加清晰和容易组织。

🌈二、函数定义

# Python 中定义函数的基本语法如下:
def 函数名(参数1, 参数2, ...):# 函数体return 返回值

def 是定义函数的关键字;函数名 是自己取的函数名称,应符合变量命名规则,以便调用函数时使用该名称;

参数1, 参数2, … 是需要传递给函数的零个或多个参数,多个参数之间用逗号分隔;

函数体中是实现具体功能的代码;

return 返回值: 是返回函数结果的关键字和表达式。return 后面的表达式可以是常量、变量、运算表达式等,也可以没有返回值(即不带表达式直接使用 return)。

# 计算两个数的和的函数
def add(x, y):result = x + yreturn resultprint(add(3, 4))   # 7

在这里插入图片描述

# 实现了一个计算平均数和和值的函数
def calculate(numbers):"""计算给定列表的平均数和和值参数:numbers: 一个包含数字的列表返回值:一个由两个元素组成的元组:和值和平均数"""total = sum(numbers)mean = total / len(numbers)return (total, mean)

❤️三、函数调用

函数名(参数)
def add(x, y):result = x + yreturn resultprint(add(3, 4))   # 7"""
定义了一个名为 add 的函数,接受两个参数 x 和 y,并将它们相加得到 result,最后返回结果。通过调用 add(3, 4),我们可以打印出 7。
"""

在这里插入图片描述

def calculate(numbers):"""计算给定列表的平均数和和值参数:numbers: 一个包含数字的列表返回值:一个由两个元素组成的元组:和值和平均数"""total = sum(numbers)mean = total / len(numbers)return (total, mean)"""
定义了一个名为 calculate 的函数,接受一个列表 numbers 并计算它的和值和平均数。
函数的返回值是一个由两个元素组成的元组,即和值和平均数。
同时,我们还添加了文档字符串(Docstring)来描述函数的功能、参数和返回值,以便其他开发人员更容易地理解函数的作用和使用方法。
"""numbers = [1, 2, 3, 4, 5]
total, mean = calculate(numbers)
print("总和:", total)
print("平均数:", mean)"""
总和: 15
平均数: 3.0首先定义了一个列表 numbers,然后将它作为参数传递给 calculate 函数,并使用两个变量 total 和 mean 分别接收返回的和值和平均数。最后打印出这两个变量的值。
"""

在这里插入图片描述

⭐四、实参与形参

函数参数分为实际参数(实参)和形式参数(形参),它们用于在函数定义和调用中传递数据。

在 Python 中,有三种传递实参的方式:位置参数、关键字参数和可变数量参数(不定长参数)。
位置参数是指按照形参的顺序传递实参;
关键字参数是指通过使用实参的名称将它们传递给函数;
可变数量参数(不定长参数)允许我们传递任意数量的实参。
💥1. 形式参数

形式参数也称为形参,是指在函数定义中声明的变量。即,在定义函数时使用的变量名。形参只有在函数内部可见,因此函数外部无法直接访问它们。

def greet(name):print(f"Hello, {name}!")greet("Alice")  # 输出:Hello, Alice!# 函数 greet() 中,我们定义了一个形参 name。当函数被调用时,它将使用调用语句中提供的实参将该值设置为实参。

在这里插入图片描述

🚲2. 实际参数

实际参数也称为实参,是指在函数调用中提供给函数的值。实参可以是字面常量值、变量、表达式或其他函数调用的返回值。

def add(a, b):result = a + bprint(f"The sum of {a} and {b} is {result}")add(2, 3)  # 调用函数并传入实参 2 和 3# add() 中,我们接受两个形式参数,即 a 和 b。当函数被调用时,它们将使用传递的实际参数进行赋值。

在这里插入图片描述

🔥1. 位置参数

在函数定义时,可以指定一些位置参数,这些参数的值由函数调用者提供,在函数内部通过参数名来访问它们。
位置参数的顺序很重要,因为 Python 根据其在函数定义中的位置来确定它们具有哪些值。

def add(a, b):return a + bresult = add(2, 3)  # 调用函数并传入位置参数 2 和 3
print(result)       # 输出 5

在这里插入图片描述

add() 接受两个位置参数,即 a 和 b。调用该函数时,我们需要按照函数定义中参数的顺序传递实参。在上面的示例中,我们将整数 2 和 3 作为实参传递给 add() 函数。

☔2. 关键字参数

关键字参数与位置参数不同,不需要按照函数定义中的位置传递它们。
相反,你可以通过指定参数名来将实参传递给函数。

def greet(name, message):print(f"{name}, {message}")greet(message="Hello", name="Alice")  # 通过指定参数名传递实参

在这里插入图片描述

函数 greet() 中,我们定义了两个参数:name 和 message。然后,我们调用该函数时,通过指定参数名来传递实参,不需要按照函数定义中的位置进行。在上面的示例中,我们首先将字符串 "Hello" 作为 message 参数传递,然后将字符串 "Alice" 作为 name 参数传递。

🎬3. 默认参数

在 Python 中,还可以使用默认参数来指定在调用函数时未传递参数的默认值。如果函数被调用时没有指定可选参数的值,则自动使用默认值。

def greet(name, message="Hello"):print(f"{name}, {message}")greet("Alice")                    # 使用默认参数值
greet("Bob", message="Hi there!") # 覆盖默认值

在这里插入图片描述

greet()中,我们使用默认参数来指定 message 参数的默认值为字符串 "Hello"。当函数被调用时,如果未传递 message 参数,则默认使用该值。在第一个示例中,我们仅传递了 name 参数,并且 message 参数自动使用默认值。在第二个示例中,我们通过指定参数名来覆盖默认值。

🔥4. 可变数量参数(不定长参数)

函数的可变数量参数允许我们传递任意数量的实参。有两种类型的可变数量参数:不定长位置参数不定长关键字参数

💥5. 不定长位置参数

不定长位置参数使用星号(*)表示,它允许我们传递任意数量的位置实参给函数,并将这些实参封装到一个元组中。

def add(*args):result = 0for arg in args:result += argreturn resultprint(add(2, 3))         # 输出:5
print(add(2, 3, 4, 5))   # 输出:14# 函数 add() 中,我们将参数 *args 声明为不定长位置参数。当函数被调用时,Python 将所有传递的位置实参封装到一个元组中,并将该元组分配给变量 args。
# 在函数内部,我们可以像操作普通元组一样迭代元组中的每个值,并使用它们来执行特定操作。

在这里插入图片描述

☔6. 不定长关键字参数

不定长关键字参数使用两个星号(**)表示,它允许我们传递任意数量的关键字实参给函数,并将这些实参封装到一个字典中。(注意:该字典的键是参数名,值是对应的参数值。)

def greet(**kwargs):for name, message in kwargs.items():print(f"{name}, {message}")greet(Alice="Hello", Bob="Hi there!")# 函数 greet() 中,我们将参数 **kwargs 声明为不定长关键字参数。当函数被调用时,Python 将所有传递的关键字实参封装到一个字典中,并将该字典分配给变量 kwargs。# 在函数内部,我们可以像操作普通字典一样访问字典中的每个键值对,并使用它们来执行特定操作。

在这里插入图片描述

🎬五、了解匿名函数

可以使用lambda关键字创建匿名函数。匿名函数也称为“lambda函数”,因为它们没有显示的函数名称。
Lambda函数是一种快速定义简单函数的方式,它不需要使用def关键字来定义函数,而是通过一个表达式来实现函数功能,并使用lambda关键字将其包装起来。Lambda函数通常用于需要临时定义函数的场合。

# 基本语法:
lambda arguments: expressionarguments是函数的参数,可以有多个,用逗号隔开;
expression是函数的一个表达式,用于计算返回值。
Lambda函数只能包含一个表达式,该表达式的运算结果即为该函数的返回值。
👊六、 定义匿名函数
# 使用Lambda函数求平方和
sum = lambda x, y: x**2 + y**2
print(sum(3, 4))  # 输出:25

在这里插入图片描述

☔2. 总结

ython中的匿名函数,通常被称为lambda函数,是一种简洁的函数定义方式,无需使用def关键字声明函数名。Lambda函数的名称源自λ演算,这是一种用于函数式编程的基础理论。在Python中,lambda函数主要用于定义简短的、单行表达式式的函数,通常在需要小范围、即时使用的函数场合下发挥其独特优势。

相关文章:

【Python函数编程实战】:从基础到进阶,打造代码复用利器

文章目录 🚋前言🚀一、认识函数🌈二、函数定义❤️三、函数调用⭐四、实参与形参💥1. 形式参数🚲2. 实际参数🔥1. 位置参数☔2. 关键字参数🎬3. 默认参数🔥4. 可变数量参数(不定长参…...

ZooKeeper 应用场景深度解析

✨✨谢谢大家捧场,祝屏幕前的小伙伴们每天都有好运相伴左右,一定要天天开心哦!✨✨ 🎈🎈作者主页: 喔的嘛呀🎈🎈 目录 引言 1.…...

动手学深度学习(Pytorch版)代码实践 -计算机视觉-41目标检测数据集

41目标检测数据集 import os import pandas as pd import torch import torchvision import matplotlib.pylab as plt from d2l import torch as d2l# 数据集下载链接 # http://d2l-data.s3-accelerate.amazonaws.com/banana-detection.zip# 读取数据集 #save def read_data_b…...

2.2章节python的变量和常量

在Python中,变量和常量有一些基本的概念和用法,但需要注意的是,Python本身并没有内置的“常量”类型。然而,程序员通常会遵循一种约定,即使用全部大写的变量名来表示常量。 一、变量 在Python中,变量是一…...

豆包文科成绩超了一本线,为什么理科不行?

卡奥斯智能交互引擎是卡奥斯基于海尔近40年工业生产经验积累和卡奥斯7年工业互联网平台建设的最佳实践,基于大语言模型和RAG技术,集合海量工业领域生态资源方优质产品和知识服务,旨在通过智能搜索、连续交互,实时生成个性化的内容…...

Java多线程编程实践中的常见问题与解决方案

Java多线程编程实践中的常见问题与解决方案 大家好,我是免费搭建查券返利机器人省钱赚佣金就用微赚淘客系统3.0的小编,也是冬天不穿秋裤,天冷也要风度的程序猿! **1. **引言 Java多线程编程是现代软件开发中不可或缺的一部分&a…...

WebStorm配置路径别名(jsconfig.json)

项目是 ViteVueTs 新建一个 jsconfig.json文件 {"compilerOptions": {"baseUrl": ".","paths": {"/*": ["./src/*"]}},"exclude": ["node_modules", "dist"] }然后在 vite.confi…...

[吃瓜教程]南瓜书第4章决策树

1.决策树的算法原理 从逻辑角度,条件判断语句的组合;从几何角度,根据某种准则划分特征空间; 是一种分治的思想,其最终目的是将样本约分约纯,而划分的核心是在条件的选择或者说是**特征空间的划分标准 ** …...

Redis 面试题完整指南:深度解析基础、进阶与高级功能

基础知识 1. 什么是Redis? Redis(Remote Dictionary Server)是一个开源的、基于内存的数据结构存储系统,既可以用作数据库、缓存,也可以用作消息中间件。它支持多种数据结构,如字符串、哈希、列表、集合、…...

spring 枚举、策略模式、InitializingBean初使化组合使用示例

实现一个简单的文本处理系统。 在这个系统中,我们将定义不同类型的文本处理策略,比如大小写转换、添加前缀后缀等,并使用工厂模式来管理这些策略。 1 定义一个枚举来标识不同的文本处理类型 public enum TextProcessTypeEnum {UPPER_CASE,LO…...

嵌入式学习——硬件(IIC、ADC)——day56

1. IIC 1.1 定义(同步串行半双工通信总线) IIC(Inter-Integrated Circuit)又称I2C,是是IICBus简称,所以中文应该叫集成电路总线。是飞利浦公司在1980年代为了让主板、嵌入式系统或手机用以连接低速周边设备…...

vCenter VXR01405C ALARM Certificate is about to expire

vCenter VXR01405C ALARM Certificate is about to expire 需要更新证书 步骤如下 ===vCenter=== root@vc [ ~ ]# for i in $(/usr/lib/vmware-vmafd/bin/vecs-cli store list); do echo STORE $i; sudo /usr/lib/vmware-vmafd/b STORE MACHINE_SSL_CERT Alias : __MACHINE…...

安装和微调大模型(基于LLaMA-Factory)

打开终端(在Unix或macOS上)或命令提示符/Anaconda Prompt(在Windows上)。 创建一个名为lora的虚拟环境并指定Python版本为3.9。 https://github.com/echonoshy/cgft-llm/blob/master/llama-factory/README.mdGitHub - hiyouga/…...

使用docker搭建squid和ss5

docker run -d --name squid-container -e TZAsia/Shanghai -p 自定义端口并记得开放:3128 ubuntu/squid docker exec -it squid-container /bin/bash apt update && apt install vim # 修改 http_port 3128 为 http_port 0.0.0.0:3128 # 修改 http_access deny all 为…...

大数据面试题之Flink(1)

目录 Flink架构 Flink的窗口了解哪些,都有什么区别,有哪几种?如何定义? Flink窗口函数,时间语义相关的问题 介绍下Flink的watermark(水位线),watermark需要实现哪个实现类,在何处定义?有什么作用? Flink的…...

策略模式、工厂模式和模板模式的应用

1、策略模式、工厂模式解决if else Cal package com.example.dyc.cal;import org.springframework.beans.factory.InitializingBean;public interface Cal extends InitializingBean {public Integer cal(Integer a, Integer b); }Cal工厂 package com.example.dyc.cal;impo…...

在postman中调试supabase的API接口

文章目录 在supabase中获取API地址和key知道它的restfull风格在postman中进行的设置1、get请求调试2、post新增用户调试3、使用patch更新数据,不用put!4、delete删除数据 总结 在supabase中获取API地址和key 首先登录dashboard后台,首页- 右…...

微信小程序毕业设计-英语互助系统项目开发实战(附源码+论文)

大家好!我是程序猿老A,感谢您阅读本文,欢迎一键三连哦。 💞当前专栏:微信小程序毕业设计 精彩专栏推荐👇🏻👇🏻👇🏻 🎀 Python毕业设计…...

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第49课-机器人自动跳舞

【WEB前端2024】3D智体编程:乔布斯3D纪念馆-第49课-机器人自动跳舞 使用dtns.network德塔世界(开源的智体世界引擎),策划和设计《乔布斯超大型的开源3D纪念馆》的系列教程。dtns.network是一款主要由JavaScript编写的智体世界引擎…...

【LLM教程-llama】如何Fine Tuning大语言模型?

今天给大家带来了一篇超级详细的教程,手把手教你如何对大语言模型进行微调(Fine Tuning)!(代码和详细解释放在后文) 目录 大语言模型进行微调(Fine Tuning)需要哪些步骤? 大语言模型进行微调(Fine Tuning)训练过程及代码 大语言…...

基于算法竞赛的c++编程(28)结构体的进阶应用

结构体的嵌套与复杂数据组织 在C中,结构体可以嵌套使用,形成更复杂的数据结构。例如,可以通过嵌套结构体描述多层级数据关系: struct Address {string city;string street;int zipCode; };struct Employee {string name;int id;…...

聊聊 Pulsar:Producer 源码解析

一、前言 Apache Pulsar 是一个企业级的开源分布式消息传递平台,以其高性能、可扩展性和存储计算分离架构在消息队列和流处理领域独树一帜。在 Pulsar 的核心架构中,Producer(生产者) 是连接客户端应用与消息队列的第一步。生产者…...

镜像里切换为普通用户

如果你登录远程虚拟机默认就是 root 用户,但你不希望用 root 权限运行 ns-3(这是对的,ns3 工具会拒绝 root),你可以按以下方法创建一个 非 root 用户账号 并切换到它运行 ns-3。 一次性解决方案:创建非 roo…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互

引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...

是否存在路径(FIFOBB算法)

题目描述 一个具有 n 个顶点e条边的无向图,该图顶点的编号依次为0到n-1且不存在顶点与自身相连的边。请使用FIFOBB算法编写程序,确定是否存在从顶点 source到顶点 destination的路径。 输入 第一行两个整数,分别表示n 和 e 的值(1…...

在web-view 加载的本地及远程HTML中调用uniapp的API及网页和vue页面是如何通讯的?

uni-app 中 Web-view 与 Vue 页面的通讯机制详解 一、Web-view 简介 Web-view 是 uni-app 提供的一个重要组件,用于在原生应用中加载 HTML 页面: 支持加载本地 HTML 文件支持加载远程 HTML 页面实现 Web 与原生的双向通讯可用于嵌入第三方网页或 H5 应…...

免费PDF转图片工具

免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...

ArcPy扩展模块的使用(3)

管理工程项目 arcpy.mp模块允许用户管理布局、地图、报表、文件夹连接、视图等工程项目。例如,可以更新、修复或替换图层数据源,修改图层的符号系统,甚至自动在线执行共享要托管在组织中的工程项。 以下代码展示了如何更新图层的数据源&…...

【汇编逆向系列】六、函数调用包含多个参数之多个整型-参数压栈顺序,rcx,rdx,r8,r9寄存器

从本章节开始,进入到函数有多个参数的情况,前面几个章节中介绍了整型和浮点型使用了不同的寄存器在进行函数传参,ECX是整型的第一个参数的寄存器,那么多个参数的情况下函数如何传参,下面展开介绍参数为整型时候的几种情…...

标注工具核心架构分析——主窗口的图像显示

🏗️ 标注工具核心架构分析 📋 系统概述 主要有两个核心类,采用经典的 Scene-View 架构模式: 🎯 核心类结构 1. AnnotationScene (QGraphicsScene子类) 主要负责标注场景的管理和交互 🔧 关键函数&…...