Python 函数类型

  1. 普通函数
  2. 匿名函数(Lambda函数)
  3. 高阶函数
  4. 内置函数
  5. 递归函数
  6. 闭包函数
  7. 装饰器函数
  8. 方法
    8.1. 实例方法
    8.2. 类方法
    8.3. 静态方法

1. 普通函数

最基本的函数类型,通过 def 关键字定义。

def add(a, b):return a + bprint(add(3, 5))  	# 输出: 8

2. 匿名函数(Lambda函数)

使用 lambda 关键字定义的函数,与普通函数不同,Lambda 函数通常是一次性使用的,通常用于定义简单的、短小的函数。

add = lambda a, b: a + bprint(add(3, 5))  	# 输出: 8

无参数的 Lambda 函数

greet = lambda: "Hello, World!"
print(greet())  	# 输出: Hello, World!

Lambda 函数的局限性
只包含一个表达式: Lambda 函数只能包含一个表达式,不适合处理复杂的逻辑。
可读性: 由于 Lambda 函数没有名字,如果逻辑稍微复杂一些,会影响代码的可读性。
调试困难: 匿名函数在调试时不容易定位问题。

3. 高阶函数

高阶函数具备以下特征之一:

  1. 接受一个或多个函数作为参数。
  2. 返回一个函数。
    可以接受函数作为参数或返回值的函数。高阶函数广泛应用于各种场景,如数据处理、事件处理和回调等。
def apply_function(func, x, y):return func(x, y)print(apply_function(add, 3, 5))  	# 输出: 8

4. 内置函数

Python 提供的一些内置函数,例如 len(), max(), min(), print() 等。

5. 递归函数

一个递归函数通常包含以下两部分:
基准情形: 处理简单的、直接可解决的情况,防止无限递归。
递归调用: 将问题分解为一个或多个子问题,并调用自身来解决这些子问题。
在函数内部调用自身的函数,通常用于解决递归问题。

def factorial(n):if n == 1:return 1else:return n * factorial(n - 1)print(factorial(5))  	# 输出: 120

6. 闭包函数(函数内定义的函数)

闭包(Closure)是指一个函数内部定义的函数,这个内部函数可以引用外部函数的变量。闭包不仅可以捕获这些变量,还可以在外部函数返回后继续使用它们。闭包常用于需要封装一些状态或行为的场景中。
闭包由以下三个部分构成:
外部函数: 包含内嵌函数的函数。
内嵌函数: 定义在外部函数内部并且引用外部函数的变量。
自由变量: 内嵌函数引用的、定义在外部函数中的变量。
一个函数可以返回另一个函数,返回的函数可以访问到外部函数的变量。
通过闭包实现一个简单的计数器:

def make_counter():		# 外部函数count = 0			# 自由变量def counter():		# 内嵌函数nonlocal countcount += 1return countreturn counter# 创建计数器实例
counter1 = make_counter()
print(counter1())  	# 输出: 1
print(counter1())  	# 输出: 2counter2 = make_counter()
print(counter2())  	# 输出: 1

counter 是一个闭包,它保存了 make_counter 中的 count 变量,并且通过 nonlocal 关键字可以修改这个变量。
内部工作机制
创建闭包: 当 make_counter 函数被调用时,count 变量和 counter 函数被创建。counter 函数形成一个闭包,捕获 count 变量的引用。
返回闭包: make_counter 函数执行完毕,但 counter 函数和 count 变量仍然存在,因为 counter 函数持有对 count 的引用。
修改和访问状态: 每次调用 counter1 时,都会访问和修改 count 变量,从而实现了一个持续的状态。

7. 装饰器函数

装饰器函数(Decorator functions)在 Python 中是一种强大的工具,用于修改或扩展函数或类的功能。它们允许在不改变原始函数或类代码的情况下,通过添加额外的功能来改变它们的行为。通常情况下,装饰器是一个函数,它接受一个函数作为输入,并返回一个新的函数作为输出。
用于修改或增强其他函数功能的函数。

# 假设我们有一个函数 add_numbers,它用于计算两个数字的和。
# 我们希望在调用这个函数之前,检查传入的参数是否都是数字。如果不是,我们希望提示用户参数无效。
# 可以使用装饰器来实现这个功能:def validate_numbers(func):def wrapper(*args, **kwargs):# 检查所有参数是否都是数字if all(isinstance(arg, (int, float)) for arg in args):return func(*args, **kwargs)else:print("参数无效,必须是数字。")return wrapper@validate_numbers
def add_numbers(a, b):return a + b# 测试函数
print(add_numbers(10, 20))  	# 输出: 30
print(add_numbers(10, '20'))  	# 输出: 参数无效,必须是数字。

装饰器函数可以用于很多场景,比如缓存、日志记录、权限验证等,它们使得代码更加模块化和易于维护。

8. 方法

方法是属于对象的函数,也就是定义在类内部的函数。方法在调用时会隐式地接收一个对象实例作为第一个参数(通常是 self)。方法可以访问对象的属性和其他方法,并对对象的状态进行修改。
在类中定义的函数。包括实例方法、类方法和静态方法。

8.1. 实例方法

需要一个类的实例来调用的方法。

class MyClass:def instance_method(self):return "This is an instance method"obj = MyClass()
print(obj.instance_method())  	# 输出: This is an instance method

8.2. 类方法

使用 @classmethod 装饰器定义的方法,第一个参数是类本身。

class MyClass:@classmethoddef class_method(cls):return "This is a class method"print(MyClass.class_method())  	# 输出: This is a class method

8.3. 静态方法

使用 @staticmethod 装饰器定义的方法,不依赖于类或实例。

class MyClass:@staticmethoddef static_method():return "This is a static method"print(MyClass.static_method())  # 输出: This is a static method

参考:
https://blog.csdn.net/Lzcsfg/article/details/140720452

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

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

相关文章

移远通信推出八款天线新品,覆盖5G、4G、Wi-Fi和LoRa领域

近日,全球领先的物联网整体解决方案供应商移远通信宣布,再次推出八款高性能天线新品,进一步丰富其天线产品阵容,更好地满足全球客户对高品质天线的更多需求。具体包括5G超宽带天线YECT005W1A和YECT004W1A、5G天线YECT028W1A、4G天…

【设计模式系列】桥接模式(十三)

一、什么是桥接模式 桥接模式(Bridge Pattern)是一种结构型设计模式,其核心目的是将抽象部分与实现部分分离,使它们可以独立地变化。这种模式主要用于处理那些在设计时无法确定实现细节的场合,或者需要在多个实现之间…

Java多态和继承(下篇)

今天接着学习多态和继承 目录 1 继承1.1 再谈初始化1.2 protect关键字1.3 继承方式1.4 final 关键字1.5 组合 2 多态2.1 多态的概念2.2 多态实现条件2.3 重写2.4 向上转型和向下转型2.4.1 向上转型2.4.2 向下转型 2.5 多态的优缺点2.6 避免在构造方法中使用重写的方法 总结 1 继…

动态规划理论基础和习题【力扣】【算法学习day.25】

前言 ###我做这类文档一个重要的目的还是给正在学习的大家提供方向(例如想要掌握基础用法,该刷哪些题?)我的解析也不会做的非常详细,只会提供思路和一些关键点,力扣上的大佬们的题解质量是非常非常高滴&am…

数据结构之顺序表(C语言)

1 线性表 线性表是n个具有相同特性的数据元素的有限序列,是一种在实际中广泛应用的数据结构,常见的线性表有:顺序表、链表、栈、队列、字符串等。 线性表在逻辑上是线性结构,也就说是连续的一条直线。但是在物理结构上并不一定是…

Qt——窗口

一.窗口概述 Qt 窗口是通过 QMainWindow 类来实现的。 QMainWindow是一个为用户提供主窗口程序的类,继承QWidget类,并且提供一个预定义的布局。包含一个菜单栏(menu bar),多个工具栏(tool bars&#xff0…

长亭那个检测能力超强的 WAF,出免费版啦

告诉你们一个震撼人心的消息,那个检测能力超强的 WAF——长亭雷池,他推出免费社区版啦,体验地址见文末。 八年前我刚从学校毕业,在腾讯做安全研究,看到宇森在 BlackHat 上演讲的议题 《永别了,SQL 注入》 …

漏洞分析 | Spring Framework路径遍历漏洞(CVE-2024-38816)

漏洞概述 VMware Spring Framework是美国威睿(VMware)公司的一套开源的Java、JavaEE应用程序框架。该框架可帮助开发人员构建高质量的应用。 近期,网宿安全演武实验室监测到Spring Framework在特定条件下,存在目录遍历漏洞&…

tp接口 入口文件 500 错误原因

一、描述 二、可能的原因 1、runtime目录没权限 2、关闭了Tp记录日志的功能 3、关闭debug调试模式 4、关闭了debug模式还是报错 一、描述 Thinkphp项目本地正常,上传到线上后静态文件访问正常,访问tp接口报500错误。 经调试发现,在php入…

第07章 运算符的使用

一、算数运算符 算术运算符主要用于数学运算,其可以连接运算符前后的两个数值或表达式,对数值或表达式进行加 ()、减(-)、乘(*)、除(/)和取模(%&a…

十七 MyBatis的注解式开发

十七、MyBatis的注解式开发 mybatis中也提供了注解式开发方式,采用注解可以减少Sql映射文件的配置。 当然,使用注解式开发的话,sql语句是写在java程序中的,这种方式也会给sql语句的维护带来成本。 官方是这么说的: 使…

用 Python 写了一个天天酷跑(附源码)

Hello,大家好,给大家说一下,我要开始装逼了 这期写个天天酷跑玩一下叭! 制作一个完整的“天天酷跑”游戏涉及很多方面,包括图形渲染、物理引擎、用户输入处理、游戏逻辑等。由于Python是一种高级编程语言,…

Kettle——CSV文件转换成excel文件输出

1.点击—文件—新建—转换 拖入两个组件: 按shift+鼠标左击建立连接,并点击主输出步骤, 点击CSV文件输入,选择浏览的csv文件,然后点击确定 同样,Excel也同上,只是要删除这个xls 并…

高效管理iPhone存储:苹果手机怎么删除相似照片

在使用iPhone的过程中,我们经常会遇到存储空间不足的问题,尤其是当相册中充满了大量相似照片时。这些照片不仅占用了宝贵的存储空间,还可能使iPhone出现运行卡顿的情况。因此,我们迫切需要寻找苹果手机怎么删除相似照片的方法&…

用示例来看C2Rust工具的使用和功能介绍

C2Rust可以将C语言的源代码转换成Rust语言的源代码。下面是一个简单的C语言代码示例&#xff0c;以及使用c2Rust工具将其转换为Rust安全代码的过程。 C语言源代码示例 // example.c #include <stdio.h>int add(int a, int b) {return a b; }int main() {int result a…

赛普EAP平台 Download.aspx 任意文件读取漏洞复现

0x01 产品描述&#xff1a; ‌赛普EAP平台‌是一款专门为房地产企业打造的数字化管理系统&#xff0c;旨在帮助企业实现业务流程的优化、管理效率的提升和客户体验的改善。该系统集成了项目管理、销售管理、客户关系管理、财务管理、报表分析等多个模块&#xff0c;能够满足企业…

前端三件套-css

一、元素选择器 元素选择器&#xff1a;利用标签名称。p,h1-h6...... 行内样式&#xff08;内联样式&#xff09;&#xff1a;例如<p style"color:red;font-size:50px"> id选择器&#xff1a;针对某一个特定的标签来使用。以#定义。 class&#xff08;类&a…

服务器被攻击排查记录

起因 我的深度学习的所有进程突然被killed&#xff0c;我以为是检修&#xff0c;后面发现好像简单的python代码可以正常运行。但是我的训练进程一启动就会被killed 第一时间没有用htop查看cpu&#xff0c;用top看着挺正常的&#xff0c;但是后面看htop&#xff0c;全是绿的&a…

项目实战:基于Linux的Flappy bird游戏开发

一、项目介绍 项目总结 1.按下空格键小鸟上升&#xff0c;不按小鸟下落 2.搭建小鸟需要穿过的管道 3.管道自动左移和创建 4.小鸟撞到管道游戏结束 知识储备 1.C语言 2.数据结构-链表 3.Ncurses库 4.信号机制 二、Ncurses库介绍 Ncurses是最早的System V Release 4.0 (SVr4)中…

抖音小程序看广告变现秘籍:构建用户粘性与点击收益长期价值解析

在抖音小程序看广告变现的宏伟蓝图中&#xff0c;构建用户粘性和挖掘用户长期价值是核心环节&#xff0c;这是实现丰厚收益和打造高效盈利新引擎的重要保障。 要构建用户粘性&#xff0c;首先要提供优质且持续更新的内容。以一个知识科普类小程序为例&#xff0c;需要不断推出新…