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

python中的函数

函数

在Python中,函数是组织好的、可重复使用的代码段,用来实现单一或相关联的功能。函数能提高代码的模块性和重复利用率。

1. 基本函数定义
# 注解没有强制要求的意思
# def 方法名(参数 : 限定条件注解) -> 结果的类型注解:
#     函数体
def greet(name):print(f"Hello, {name}!")
greet("Alice")  # 输出: Hello, Alice!
2. 函数参数

参数:用于传值,主要分为位置参数、默认参数、可变参数、关键字参数几种来使用。

  • 位置参数:最基本的参数传递方式,按照参数定义的顺序依次传递
  • 默认参数:在定义函数时,可以给参数指定默认值,调用时可不传该参数
  • 可变位置参数:用于接收任意数量的位置参数,存储为元组(tuple)
  • 可变关键字参数:用于接收任意数量的关键字参数,存储为字典(dict)
  • 仅限关键字参数:在 args 或 * 之后定义的参数,必须用关键字传递( 表示后面的参数必须用 key=value 形式传递)
  • 仅限位置参数:Python 3.8+ 支持 / 语法,表示前面的参数只能按位置传递(/ 之前的参数只能按位置传递)
# 位置参数a,b
def add(a, b):return a + b
# 默认参数:exponent 和 位置参数:base
def power(base, exponent=2):return base ** exponent
# 可变位置参数 (*args)
def sum_all(*numbers):return sum(numbers)
# 关键字参数 (**kwargs)
def person_info(**details):for key, value in details.items():print(f"{key}: {value}")
# 仅限关键字参数(* 表示后面的参数必须用 key=value 形式传递)
def greet(name, *, message="Hello"):print(f"{message}, {name}!")
greet("Alice")  # 输出:Hello, Alice!
greet("Bob", message="Hi")  # 输出:Hi, Bob!
greet("Charlie", "Hey")  #  错误:message 必须用关键字传递
# 仅限位置参数 (/之前的参数只能按位置传递)
def greet(name, /, message="Hello"):print(f"{message}, {name}!")
greet("Alice")  # 正确
greet(name="Bob", message="Hi")  #  错误:name 不能使用关键字传递

3. 返回值(return)

return :将传入的值经过函数体的一系列变化之后输出的一个值。

def multiply(x, y):return x * y
result = multiply(3, 4)  # 返回12

4. Lambda 函数(匿名函数)

Lambda函数可以接受任何数量的参数,但只能有一个表达式(这个表达式被计算并返回)。Lambda函数通常用于小的、一次性的、匿名的函数场景,如排序或过滤列表中的元素。

# 使用方法:lambda 参数列表: 表达式
square = lambda x: x ** 2
print(square(5))  # 输出: 25

5. 作用域

作用域是在运行时代码中的某些特定部分中变量,函数和对象的可访问性。
分为 全局变量(在全局有用的变量)和局部变量(仅在自己指定的一部分区域有用的变量)

x = 10  # 全局变量,作用于全局
def func():global x  # 声明使用全局变量x = 20
func()
print(x)  # 输出: 20

6. 装饰器

装饰器修饰器是 Python 中一种强大的语法特性,它允许你在不修改原函数代码的情况下,为函数添加额外的功能,它接受一个函数作为参数并返回一个新的函数。一般用@开头。

  • 自定义类修饰器
  • 内置修饰器(@property、 @classmethod 、@staticmethod、@timer、@lru_cache)
def my_decorator(func):def wrapper():print("函数执行前")func()print("函数执行后")return wrapper
@my_decorator # 自定义的类修饰器
def say_hello():print("Hello!")
# @property     使用该修饰方法,将方法转为属性使用,property是只读属性
# @属性名.setter      在property转化为属性后,再在该属性后增加一个可写属性,必须与property搭配使用
# 在使用这两个修饰器时,需要讲get__year和set__year方法全部改成year,方便变成属性使用
# @classmethod  不需要实例化,不需要self参数,返回函数的类方法
# @staticmethod 静态方法,不需要实例化,不强制要求传递参数
# @timer 计时修饰器
# @lru_cache 缓存修饰器say_hello()

函数是 Python 编程的核心概念,合理使用函数可以使代码更模块化、更易读、更易维护。

http://www.xdnf.cn/news/3751.html

相关文章:

  • PMP-第六章 项目进度管理(三)
  • 基于springboot的金院银行厅预约系统的设计及实现(源码+lw+部署文档+讲解),源码可白嫖!
  • Vue中的过滤器知道多少?从是什么、怎么用、应用场景、原理分析、示例解释
  • 第39课 绘制原理图——绘制命令在哪里?
  • C++11(1)
  • 优化高搜索量还是低竞争关键词?SEO策略解析
  • DNAT与SNAT
  • 剖析扩散模型(Denoising Diffusion Probabilistic Models)
  • 【序列贪心】摆动序列 / 最长递增子序列 / 递增的三元子序列 / 最长连续递增序列
  • 黑客学习计划
  • PowerBI企业运营分析——多维度日期指标分析
  • stm32f4 声音传感器采集
  • [UVM]在SoC中用寄存器模型backdoor访问寄存器的案例
  • 存在重复元素II(简单)
  • 用 DuckDB 高效分析 JSON 数据:从入门到实战
  • 机器学习常用评价指标
  • P1004 [NOIP 2000 提高组] 方格取数
  • api补充
  • 在GPU集群上使用Megatron-LM进行高效的大规模语言模型训练
  • 有效的字母异位词(简单)
  • 闭包(Closure)及其作用和影响
  • 《ATPL地面培训教材13:飞行原理》——第5章:升力
  • 【算法应用】基于灰狼算法优化深度信念网络回归预测(GWO-DBN)
  • C# 运算符重载深度解析:从基础到高阶实践
  • MIT6.S081-lab8
  • 十一岁少年叶珉雪用艺术点亮公益之路 个人原创公益演唱会传递大爱与担当
  • C++类_构造函数
  • DBSCAN对比K-means
  • 软件第三方测试报告:从测试背景目的到方法范围全解析?
  • 域名与官网的迷思:数字身份认证的全球困境与实践解方-优雅草卓伊凡