Python 函数的学习笔记

news/2024/4/23 2:05:06

Python 函数的学习笔记

  • 0. Python 函数的概要说明
  • 1. 自定义函数示例
  • 2. 匿名函数示例
  • 3. 内置函数示例
    • 3-1. filter() 示例
    • 3-2. map() 示例
    • 3-3. reduce() 示例
  • 4. 可变长参数`*args`和`**kwargs`示例
    • 4-1. `*args`(Positional Variadic Arguments)
    • 4-2. `**kwargs`(Keyworded Variadic Arguments)
    • 4-3. 结合使用`*args`和`**kwargs`
    • 4-4. 解包参数

0. Python 函数的概要说明

在Python中,函数是一块组织好的、可重复使用的代码,用于执行单一、相关的动作。函数可以接受输入参数,也可以返回结果。使用函数可以让你编写更整洁、更可读、更易于维护的代码,同时也能够减少代码重复,提高开发效率。

下面是关于Python函数的一些介绍:

  1. 定义函数
    Python中使用def关键字来定义函数。函数定义包括函数名、参数列表(位于括号内)和冒号。函数体是缩进的代码块。
    def greet(name):"""这是一个简单的问候函数"""return f"Hello, {name}!"
    
    在这个例子中,greet是一个接受一个参数name的函数,它返回一个包含名字的问候语。
  2. 函数参数
    • 位置参数:按照定义时的顺序传递的参数。
    • 关键字参数:通过参数名来指定参数值的参数,这样可以不按照顺序传递参数。
    • 默认参数:在定义函数时可以给参数指定默认值。
    • 可变长参数:函数可以接受任意数量的参数,如*args**kwargs
  3. 返回值
    函数可以使用return语句返回一个或多个值。如果没有return语句,函数会在执行完毕后自动返回None
  4. 文档字符串(Docstrings)
    Python函数通常包含一个文档字符串,这是一个位于函数定义下方第一行的字符串,用于解释函数的作用。可以使用"""'''来定义文档字符串。
  5. 作用域
    函数内的变量作用域是局部的,意味着在函数外部无法访问这些变量。函数可以访问全局作用域的变量,但无法直接修改全局变量。如果需要在函数内部修改全局变量,可以使用global关键字声明。
  6. 匿名函数
    Python支持匿名函数,也称为Lambda函数。Lambda函数可以接受任何数量的参数,但只能有一个表达式。它们通常用于编写简单的、一次性的小函数。
    add = lambda x, y: x + y
    
  7. 递归
    函数可以调用自身,这种操作称为递归。递归函数在处理分而治之的问题时非常有用,如树的遍历、阶乘计算等。
  8. 高阶函数
    Python函数是一等公民,可以作为参数传递给其他函数,也可以从其他函数返回,甚至可以被赋值给变量。能够接受函数作为参数或返回函数的函数称为高阶函数。

1. 自定义函数示例

示例代码,

def square(x):squared = x * xreturn squaredprint(square(2))

输出结果,

4

2. 匿名函数示例

示例代码,

square = lambda x: x * x
print(square(2))

输出结果,

4

3. 内置函数示例

示例代码,

filtered = list(filter(lambda x: x > 2, range(1, 5)))
filtered

输出结果,

[3, 4]

3-1. filter() 示例

示例代码,

filtered = list(filter(lambda x: x > 2, range(1, 5)))
filtered

输出结果,

[3, 4]

3-2. map() 示例

示例代码,

mapped = list(map(lambda x: x * x, range(1, 5)))
mapped

输出结果,

[1, 4, 9, 16]

3-3. reduce() 示例

示例代码,

from functools import reducereduced = reduce(lambda x, y: x + y, range(1, 5))
reduced

输出结果,

10

4. 可变长参数*args**kwargs示例

在Python中,可变长参数允许函数接受任意数量的位置参数和关键字参数。这提供了极大的灵活性,使得函数可以处理不同数量和类型的参数。

4-1. *args(Positional Variadic Arguments)

*args允许你传递任意数量的非关键字参数给一个函数。在函数内部,*args被解释为一个元组。

示例,

def sum_all(*args):"""计算所有传入数字的和"""total = 0for num in args:total += numreturn total# 调用函数
print(sum_all(1, 2, 3, 4, 5))  # 输出: 15

在这个例子中,sum_all函数接受任意数量的参数,并将它们相加。当你调用sum_all(1, 2, 3, 4, 5)时,*args在函数内部被当作(1, 2, 3, 4, 5)这个元组来处理。

4-2. **kwargs(Keyworded Variadic Arguments)

**kwargs允许你传递任意数量的关键字参数给一个函数。在函数内部,**kwargs被解释为一个字典,其中键是参数名,值是参数值。

示例,

def print_info(**kwargs):"""打印所有传入的关键字参数"""for key, value in kwargs.items():print(f"{key}: {value}")# 调用函数
print_info(name='Alice', age=25, job='Engineer')  
# 输出:
# name: Alice
# age: 25
# job: Engineer

在这个例子中,print_info函数接受任意数量的关键字参数,并打印它们。当你调用print_info(name='Alice', age=25, job='Engineer')时,**kwargs在函数内部被当作{'name': 'Alice', 'age': 25, 'job': 'Engineer'}这个字典来处理。

4-3. 结合使用*args**kwargs

你可以在同一个函数中同时使用*args**kwargs,这样可以处理任意数量的位置参数和关键字参数。

示例,

def func(*args, **kwargs):print("Positional arguments:", args)print("Keyword arguments:", kwargs)# 调用函数
func(1, 2, 3, a=4, b=5)  
# 输出:
# Positional arguments: (1, 2, 3)
# Keyword arguments: {'a': 4, 'b': 5}

在这个例子中,func函数接受任意数量的位置参数和关键字参数,并分别打印它们。

4-4. 解包参数

你还可以在调用函数时使用***操作符来解包迭代器和字典,将它们作为参数传递给函数。

示例,

def multiply(x, y):return x * y# 已有元组和字典
numbers = (2, 3)
keywords = {'x': 4, 'y': 5}# 使用*和**解包元组和字典
print(multiply(*numbers))  # 等同于multiply(2, 3)
print(multiply(**keywords))  # 等同于multiply(x=4, y=5)

在这个例子中,multiply函数接受两个参数。通过使用*numbers,元组(2, 3)被解包成两个位置参数;通过使用**keywords,字典{'x': 4, 'y': 5}被解包成两个关键字参数。

完结!

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

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

相关文章

CSS之flex布局

flex布局 CSS的Flex布局(Flexible Box Layout)是一种用于在页面上布置元素的高效方法,特别适合于响应式设计。Flex布局使得元素能够伸缩以适应可用空间,可以简化很多原本需要复杂CSS和HTML结构才能实现的布局设计。 flex布局包括…

MySQL数据库⑧_索引(概念+理解+操作)

目录 1. 索引的概念和价值 1.1 索引的概念 1.2 索引的价值 2. 磁盘的概念 2.1 磁盘的结构 2.2 操作系统与磁盘交互的基本单位 2.3 MySQL与磁盘交互的基本单位 3. 索引的理解 3.1 主键索引现象和推导 3.2 索引采用的数据结构:B树 3.3 聚簇索引和非聚簇索引…

【前端高频面试题--Vue3.0篇】

🚀 作者 :“码上有前” 🚀 文章简介 :前端高频面试题 🚀 欢迎小伙伴们 点赞👍、收藏⭐、留言💬 高频前端面试题--Vue3.0篇 Vue3.0有什么更新defineProperty和proxy的区别Vue3.0 为什么要用 pro…

【JavaWeb】头条新闻项目实现 基本增删改查 分页查询 登录注册校验 业务功能实现 第二期

文章目录 一、为什么使用token口令二、登录注册功能2.1 登录表单提交后端代码: 2.2 根据token获取完整用户信息代码实现: 2.3 注册时用户名占用校验代码实现: 2.4 注册表单提交代码实现: 三、头条首页功能3.1 查询所有头条分类3.2…

如何在 Windows 上恢复已删除的 Excel 文件

许多公司和个人在 Excel 电子表格中保存有价值的信息。当会议需要某个重要的 Excel 文件时,突然意识到您已删除或丢失该文件可能会造成严重问题。不用担心。我们将向您展示在 Windows 计算机上恢复已删除的 Excel 文件的多种方法。 如何在 Windows 上恢复已删除的 E…

双活工作关于nacos注册中心的数据迁移

最近在做一个双活的项目,在纠结一个注册中心是在双活机房都准备一个,那主机房的数据如果传过去呢,查了一些资料,最终在官网查到了一个NacosSync 的组件,主要用来做数据传输的,并且支持在线替换注册中心的&a…