Python 函数的学习笔记

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.mzph.cn/news/683987.shtml

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

相关文章

多进程面试题汇总

这里写目录标题 一、多进程1、进程的定义:2、单核多任务CPU执行原理3、进程的优点和缺点4、创建进程15、创建进程26、进程池6.1、进程池的作用6.2、原理图6.3、使用进程池的优点 7、进程间的通信(Queue)7.1、需求1:采用多进程将10…

GPIO八种工作模式

目录 一、推挽输出 二、开漏输出 三、复用推挽输出 四、复用开漏输出 五、浮空输入 六、上拉输入 七、下拉输入 八、模拟输入 GPIO八种配置模式,原理和使用场景,硬件原理如下图: 一、推挽输出 1、 原理 当控制栅极为低电平时&#x…

StringUtils 工具类介绍大全 isAnyEmpty isAnyBlank stripToNull 等

StringUtils工具类介绍 基本上常用的介绍了一遍 前言 直接干货 1.isEmpty() 描述:判断是否是真空字符串 StringUtils.isEmpty(null) true StringUtils.isEmpty("") true StringUtils.isEmpty(" ") false StringUtils.isEmpty("bo…

nvm对node版本进行管理及疑难解决,vue项目搭建与启动

一、nvm安装与node版本管理 nvm安装 1、nvm地址:https://github.com/coreybutler/nvm-windows/releases 2、无需配置安装包,nvm-setup-v1.1.10.zip 解压后双击nvm-setup.exe,选择安装路径,一路next即可 打开dos窗口输入nvm vers…

C++ STL: list使用及源码剖析

list使用 list常用函数及使用&#xff08;1&#xff09; #include <iostream> #include <list> #include <algorithm>int main() {// 创建liststd::list<int> myList {5, 2, 9, 1, 5, 6};// 打印liststd::cout << "Original list: &quo…

VS Code添加环境变量

有时候你会发现即使添加了环境变量, 打开VS Code的命令行终端也找不到对应的环境变量。遇到这种情况可以通过给VS Code的终端独立添加对应环境变量解决: 步骤1. 找到设置 步骤2. 找到windows终端环境变量配置 3. 在此处配置然后重新打开一个终端即可 (完)

【leetcode热题100】相同的树

难度&#xff1a; 简单通过率&#xff1a; 49.0%题目链接&#xff1a;力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 题目描述 给定两个二叉树&#xff0c;编写一个函数来检验它们是否相同。 如果两个树在结构上相同&#xff0c;并且节点具有相同的…

ZISUOJ 2022年算法基础公选课练习四(Map)

说明&#xff1a; 博主为了提早预习数据结构和C的一些知识&#xff0c;自己琢磨外加查阅资料所写的代码&#xff0c;题目来源于22年初的学院老师组织的算法基础公选课的练习。我的代码甚至思路肯定存在许多不足和错误&#xff0c;欢迎大家批评指正。 题目列表&#xff1a; 问题…

HCIA-HarmonyOS设备开发认证V2.0-轻量系统内核基础-互斥锁mux

目录 一、互斥锁基本概念二、互斥锁运行机制三、互斥锁开发流程四、互斥锁使用说明五、互斥锁接口六、代码分析&#xff08;待续...&#xff09; 一、互斥锁基本概念 互斥锁又称互斥型信号量&#xff0c;是一种特殊的二值性信号量&#xff0c;用于实现对共享资源的独占式处理。…

(力扣记录)98. 验证二叉搜索树

数据结构&#xff1a;树&#x1f332; 时间复杂度&#xff1a;O(n) 空间复杂度&#xff1a;O(n) 代码实现&#xff1a; class Solution:def isValidBST(self, root: Optional[TreeNode]) -> bool:def dfs(root, l, r):if not root:return Trueif not l < root.val &l…

Serverless里FaaS与BaaS

目录 什么是FaaS&#xff1f; 什么是BaaS&#xff1f; 什么是FaaS&#xff1f; FaaS 即 Functions as a Service&#xff0c;函数即服务&#xff0c;是Serverless架构的一种形态&#xff0c;面向函数编程&#xff0c;基于事件驱动提供云服务之间端到端的解决方案。借助FaaS&a…

华为HCIE课堂笔记第十八章 SR技术

第十八章 SR技术 18.1 简介 SR可以通过控制器实现集中算路&#xff0c;并根据业务的不同下发不同的路径给到头端设备&#xff0c;头端设备将路径标签通过标签栈的形式压入到报文中&#xff0c;沿途的设备不需要维护路径信息&#xff0c;仅按照标签栈中的栈顶进行报文转发即可…

STM32——OLED菜单(二级菜单)

文章目录 一.补充二. 二级菜单代码 简介&#xff1a;首先在我的51 I2C里面有OLED详细讲解&#xff0c;本期代码从51OLED基础上移植过来的&#xff0c;可以先看完那篇文章&#xff0c;在看这个&#xff0c;然后按键我是用的定时器扫描不会堵塞程序,可以翻开我的文章有单独的定时…

Flutter Android开发 梳理Google Material Design颜色体系

前言 做安卓开发&#xff08;Kotlin语言&#xff09;&#xff0c;Flutter开发的人员应该都听说过谷歌一直推崇的Material Design&#xff0c;而Material Design Color是其推崇的颜色体系&#xff0c;具体来说&#xff0c;Material Design Color是一套旨在帮助设计师和开发者创…

Panalog 日志审计系统 libres_syn_delete.php 前台RCE漏洞复现

0x01 产品简介 Panalog是一款日志审计系统,方便用户统一集中监控、管理在网的海量设备。 0x02 漏洞概述 Panalog日志审计系统 libres_syn_delete.php接口处存在远程命令执行漏洞,攻击者可执行任意命令,接管服务器权限。 0x03 影响范围 version <= MARS r10p1Free 0…

vue3-使用 Vue 的多种方式

概览 我们相信在 Web 的世界里没有一种方案可以解决所有问题。正因如此&#xff0c;Vue 被设计成一个灵活的、可以渐进式集成的框架。根据使用场景的不同需要&#xff0c;相应地有多种不同的方式来使用 Vue&#xff0c;以此在技术栈复杂度、开发体验和性能表现间取得最佳平衡。…

java+springboot+vue试题库在线学习系统05umj

技术路线&#xff1a; B/S架构&#xff0c;后端springboot框架&#xff0c;前端Vue.js框架。 主要功能模块&#xff08;至少六大功能&#xff09;&#xff0c;参考任务书并拓展 &#xff08;1&#xff09;用户管理模块&#xff1a;规定不同角色的用户对系统中各个功能模块的使用…

【经验】JLINK无法(单步)调试,JLINK固件的烧写

昨天终于准备开始进行S3C6410的裸机开发&#xff0c;写好了程序&#xff0c;编译生成了.axf文件&#xff0c;一切顺利的准备利用JLINK进行在线调试了&#xff0c;突然有种成功就在前面的感觉&#xff0c;Jlink也能被电脑正常的识别&#xff0c;利用AXD进行Jlink的相关设置也很正…

安卓自定义画板

包含功能&#xff1a; 包含 获取当前画板的截图、设置画笔样式、获取画笔样式、设置画笔宽度、获取画笔宽度、设置画笔颜色、获取画笔颜色、加载图片、获取图片位图对象、设置图片位图对象&#xff0c;并在画布上绘制图片、撤销上一步操作、重做上一步撤销的操作、清空所有绘图…

用机器学习方法重构期货商品板块

用机器学习方法重构期货商品板块 阿岛格 参考专栏:低门槛搭建个人量化平台 https://www.zhihu.com/column/c_1441014235068944386 摘 要 金融市场商品期货的板块分类,通常根据不同交易所、监管机构和证券商标准,按照期货标的属性、或产业链关系等进行分类,各自分类略有差…