python第3天之函数

深入理解 Python 中的函数

简介

        在编程中,函数是组织和复用代码的基本单元。Python 作为一门高级编程语言,提供了丰富的函数特性来帮助开发者编写清晰、模块化和高效的代码。在本文中,我们将深入探讨 Python 函数的定义、调用、参数、返回值、作用域等关键概念。

定义函数

        函数通过 def 关键字定义。函数体开始于冒号(:)后面,并且缩进的代码块表示函数内部的语句。

def function_name(parameters):"""函数文档字符串(docstring)"""# 函数体...

调用函数

        一旦定义了函数,就可以通过函数名以及括号内的实际参数来调用它。

# 调用之前定义的函数 
function_name(arguments) 

参数和实参

        函数参数是定义函数时列出的变量,而实际参数(实参)是在函数调用时传递给函数的值。Python 支持位置参数、关键字参数、默认参数、可变参数列表和可变关键字参数。

默认参数

        默认参数允许你为参数指定默认值,如果调用函数时没有传递该参数,则会使用默认值。

def greet(name='World'): print(f"Hello, {name}!") greet() # 输出: Hello, World! 
greet("Alice") # 输出: Hello, Alice! 

        注意:多个参数时在默认值参数右侧不能出现没有默认值的参数

def display(a,b=1,c=2):print(a,b,c)dispaly(1)#输出结果4

可变参数

位置参数

        函数传参时,形参和实参需要一 一对应

def show(n,s):for c in s:print(f'{n}--{c}')
#函数调用
show(1,'hello')#输出结果
1 -- h
1 -- e
1 -- l
1 -- l
1 -- o

        不定长位置参数:通过在参数名前加星号(*),可以让函数接收不定数量的位置参数,这些参数被存储为一个元组。

def add(*args): return sum(args) print(add(1, 2, 3)) # 输出: 6 
关键字参数

        关键字参数解决了参数传递时的顺序问题,通过使用关键字和参数一一对应,可以实现无序传递

def show(n,s):for c in s:print(f'{n} -- {c}')show(s='hello',n=1)

        不定长关键字参数:通过在参数名前加两个星号(**),可以接收不定数量的关键字参数,这些参数被存储为一个字典。

def profile(**kargs): for key, value in kargs.items(): print(f"{key}: {value}") profile(name="Alice", age=30, job="Developer") 

参数综合

一、定义一个可以接收任何参数的函数

def display(*args,**kwargs):print(f'args:{args}')print(f'kwargs:{kwargs}')
display()
display(1,2,3)
display(a=1,b=2)
display(1,2,3,4,a=1,b=2)#位置参数不能放在关键字参数后面  因为你定义的时候把不定长位置参数放在不定长关键字参数前面的
display(a=1,b=2,2,3,4)#这行代码会报错

二、混合写法(先把abcde赋值然后关键字参数前面的都是不定长位置参数,随后定长关键字参数随后不定长关键字参数)

def func(a, b, c, d, e, *args, f=1, g=2, **kwargs):print(a,b,c,d,e)print(args)print(f,g)print(kwargs)
func(1,2,3,4,5,5,6,7,8,9,f=11,g=22,h=333,i=444)

返回值

  return 语句用于从函数中返回值。如果没有 return 语句或者 return 后面没有任何值,函数将返回 None。遇见return直接结束函数执行。

def square(number): return number**2 
result = square(4) 
print(result) # 输出: 16 

作用域

        在 Python 中,变量的作用域是由变量定义的位置决定的。函数中定义的变量拥有局部作用域,而在函数外定义的变量则拥有全局作用域。

        解释器在执行代码时,发现return 后成如果有多个值 ,那么就会将这多个值 ,直接组包成一个元组。然后将这个元组返回。

x = "global" 
def func(): y = "local" print(y) # 输出: local print(x) # 输出: global func() 
print(x) # 输出: global 
# print(y) # 错误: y 在此不可用,因为它是局部变量

文档字符串

        每个函数都可以有一个文档字符串(docstring),它通常用三引号括起来。文档字符串用于解释函数的目的和如何使用它。

def greet(name): 
"""向用户发出问候""" print(f"Hello, {name}!") 

总结

        Python 中的函数是编程中不可或缺的工具,它们帮助我们以结构化和高效的方式组织代码。通过深入了解函数的各种特性,我们可以更好地管理代码的复杂性,编写出易于阅读和维护的程序。掌握 Python 函数的使用将使你在编程路上更进一步。

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

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

相关文章

接口响应时长几十秒问题排查以及解决

目录 背景 解决方案 总结 背景 线上系统运行几年后,被项目上提bug,有些接口响应很慢,加载页面要几十秒 解决方案 1、步骤一,加索引 性能优化成本高,需要开发周期,临时方案先分析慢sql,通过增…

目标检测——Faster R-CNN算法解读

论文:Faster R-CNN: Towards Real-Time Object Detection with Region Proposal Networks 作者:Shaoqing Ren, Kaiming He, Ross Girshick, and Jian Sun 链接:https://arxiv.org/abs/1506.01497 代码:https://github.com/rbgirsh…

Docker diff 命令

docker diff:检查容器里文件结构的更改。 语法 docker diff [OPTIONS] CONTAINER实例 查看容器mymysql的文件结构更改: docker diff mymysql##效果如下: A /logs A /mysql_data C /run C /run/mysqld A /run/mysqld/mysqld.pid A /run/my…

(C)一些题(7)

1.若要说明一个类型名STP,使得定义语句STP s;等价于char *s;, 以下选项中正的是( )。 A.typedef STP char *s B.typedef *char STP C.typedef STP *char Dhypeder char *STP 分析:(1)先按定义变量的方法写出定义体(char *s;) ②将变量名换成…

二叉树链式结构的实现——C语言

目录 一、提前说明 二、二叉树的遍历 2.1前序遍历 2.2中序遍历 2.3后序遍历 2.4代码 三、二叉树结点个数 3.1整体思路 3.2代码 四、二叉树叶子结点个数 4.1整体思路 4.2代码 五、二叉树的高度(深度) 5.1整体思路 5.2代码 六、二叉树第k层节点个数 6.1整体…

免费采集工具推荐,好文章值得收藏

采集工具的作用 在互联网的海洋中,有许多强大的免费采集工具,它们为用户提供了便捷、高效的方式,帮助用户从各种网站中收集、整理所需的信息。这些工具不仅广泛应用于市场研究、竞争情报等商业领域,同时也服务于学术研究、个人兴…

使用Libevent创建TCP连接的入门指南

文章目录 介绍安装Libevent创建TCP连接TCP服务器TCP客户端 应用场景 介绍 Libevent是一个用于事件驱动编程的开源库,它提供了跨平台的事件处理和网络编程功能。在本篇博文中,我们将重点介绍如何使用Libevent来创建TCP连接。通过这个简单的入门指南&…

04-模板方法模式-C语言实现

代码实现&#xff1a; #include <stdio.h>// 定义抽象基类 typedef struct {void (*step1)(void);void (*step2)(void);void (*step3)(void); } AbstractClass;// 具体实现类1 void concreteStep1() {printf("Concrete Step 1\n"); }void concreteStep2() {pr…

Embedding And Word2vec

Embedding与向量数据库&#xff1a; Embedding 简单地说就是 N 维数字向量&#xff0c;可以代表任何东西&#xff0c;包括文本、音乐、视频等等。要创建一个Embedding有很多方法&#xff0c;可以使用Word2vec&#xff0c;也可以使用OpenAI 的 Ada。创建好的Embedding&#xff…

什么是先验知识和后验知识

在概率论和统计学中&#xff0c;先验知识&#xff08;Prior knowledge&#xff09;和后验知识&#xff08;Posterior knowledge&#xff09;是贝叶斯推断的两个基本概念。 先验知识&#xff08;先验概率&#xff09;&#xff1a; 先验知识指的是在观察到数据之前&#xff0c;关…

【开源】基于JAVA的超市账单管理系统

项目编号&#xff1a; S 032 &#xff0c;文末获取源码。 \color{red}{项目编号&#xff1a;S032&#xff0c;文末获取源码。} 项目编号&#xff1a;S032&#xff0c;文末获取源码。 目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块三、系统设计3.1 总体设计3.2 前端设计3…

Beta冲刺总结随笔

这个作业属于哪个课程软件工程A这个作业要求在哪里beta冲刺事后诸葛亮作业目标Beta冲刺总结随笔团队名称橘色肥猫团队置顶集合随笔链接Beta冲刺笔记-置顶-橘色肥猫-CSDN博客 文章目录 一、Beta冲刺完成情况二、改进计划完成情况2.1 需要改进的团队分工2.2 需要改进的工具流程 三…

js校验多个时间段的时间是否有交叉

参考博客&#xff1a; Java日期时间API系列37-----时间段是否有重叠&#xff08;交集&#xff09;的计算方法 Java 最优雅方式校验时间段重叠 判断是否有交叉数据 let timePeriod [{start: dateList[0].value, //时间段1的开始时间 时间格式为1130&#xff08;代表11&#xf…

基于ASP的购物网站设计

摘 要 随着计算机科学的不断发展和网络的迅速普及&#xff0c;Internet 的应用已经涉及到人们生活的方方面面&#xff0c;越来越多的现代企业也意识到了这一点&#xff0c;如何在当前的网络大发展的背景下开拓市场已经成为了企业关注的重中之重。总的来说&#xff0c;互联网的…

从零开始搭建博客网站-----登陆页面

登录按钮以及背景图设置 安装element-plus和css插件 npm install element-plus --save npm install sass --save npm install sass-loader --save在main.js里引用 寻找背景图存入assets文件下&#xff0c;并且在Login.vue里设置背景图和登录按钮 设置的背景图的大小没有起…

智慧安防三大信息技术:云计算、大数据及人工智能在视频监控EasyCVR中的应用

说到三大信息技术大家都很清楚&#xff0c;指的是云计算、大数据和人工智能&#xff0c;在人工智能&#xff08;AI&#xff09;快速发展的当下&#xff0c;例如常见的大数据分析、人工智能芯片生产的智能机器人等等&#xff0c;在工作、生活、教育、金融、科技、工业、农业、娱…

Unity 与 虚拟机ROS连接

Unity 与 虚拟机ROS连接 知识储备前期准备ROS部分Unity部分 连接测试 知识储备 unity官方教程&#xff1a; https://github.com/Unity-Technologies/Unity-Robotics-HubWin11家庭版开启HyperV&#xff1a; https://zhuanlan.zhihu.com/p/577980646HyperV安装Ubuntu: https://b…

找出数组里最大元素和最小元素

必应出来的一段参考代码&#xff08;ref&#xff1a;How to Use Hypothesis and Pytest for Robust Property-Based Testing in Python | Pytest With Eric&#xff09;&#xff1a; def find_largest_smallest_item(input_array: list) -> tuple: """ Fu…

可视化开源编辑器Swagger Editor本地部署并实现远程访问管理编辑文档

最近&#xff0c;我发现了一个超级强大的人工智能学习网站。它以通俗易懂的方式呈现复杂的概念&#xff0c;而且内容风趣幽默。我觉得它对大家可能会有所帮助&#xff0c;所以我在此分享。点击这里跳转到网站。 文章目录 Swagger Editor本地接口文档公网远程访问1. 部署Swagge…

【Android面试|华为|广播类】-Local Broaddcasts 能接收到系统广播么?

华为面试官问了其中一个问题 Q: Local Broaddcasts 能接收到系统广播么&#xff1f; A: 本地广播&#xff08;Local Broaddcasts&#xff09; 只在本App发送和接收的广播。注册为本地广播的接收器无法收到标准广播。 Android应用可以通过广播从系统或其他App接收或发送消息。类…