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

【Python基础】Python函数

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢!

文章目录

    • 一、前言
    • 二、函数的定义与调用
    • 三、函数参数
        • 3.1 位置参数
        • 3.2 默认参数
        • 3.3 可变数量参数(或不定长参数)
        • 3.4 关键字参数
    • 四、函数的返回值return 语句
    • 五、函数作用域
    • 六、函数的高级用法
        • 6.1 Lambda函数
        • 6.2 嵌套函数和闭包
        • 6.3 文档字符串
    • 七、总结

一、前言

Python是一种功能强大的编程语言,其函数特性极大地增强了代码的可重用性和模块化设计。函数不仅可以帮助开发者组织和简化代码,还能通过参数传递和返回值机制实现灵活的交互。

本文将详细介绍Python函数的定义、调用、参数类型以及一些高级用法,帮助读者全面掌握Python函数的运用。

  • 什么是Python?

    Python是由荷兰人吉多·范罗苏姆于1990年初设计的一门高级编程语言,该语言应用领域非常广泛,尤其在数据科学、人工智能、游戏开发等领域,它已经成为最受欢迎的程序设计语言之一,非常适合新手学习。

    Python语言标准库官方使用手册:https://docs.python.org/zh-cn/3/library/turtle.html#turtle-methods

  • Python语言有哪些特点?

    1.易于学习:Python有相对较少的关键字,结构简单,和一个明确定义的语法,学习起来更加简单。

    2.易于阅读:Python代码定义的更清晰。

    3.易于维护:Python的成功在于它的源代码是相当容易维护的。

    4.丰富的库:Python的最大的优势之一具有丰富的标准库,并且跨平台的,在UNIX,Windows和Mac兼容很好。

    5.面向对象:Python支持面向对象编程,在“面向对象”的语言中,程序是由数据和功能组合而成的对象构建起来的。

    6.可移植:基于其开放源代码的特性,Python已经被移植(也就是使其工作)到许多平台。

    7.可扩展:如果你需要一段运行很快的关键代码,或者是想要编写一些不愿开放的算法,你可以使用C或C++完成那部分程序,然后从你的Python程序中调用。

    8.可嵌入: 你可以将Python嵌入到C/C++程序,让你的程序的用户获得"脚本化"的能力。

    在这里插入图片描述

二、函数的定义与调用

在Python中,使用def关键字定义函数。函数定义包括函数名、函数参数、函数体以及返回值。

在这里插入图片描述

下面是一个简单的函数定义示例:

def greet(name):"""打印问候消息"""print(f"Hello, {name}!")

这个函数名为greet,它接受一个参数name,并在调用时打印一条问候消息。调用该函数的方式如下:

greet("Alice")  # 输出: Hello, Alice!

三、函数参数

Python中的函数参数非常灵活,可以包括位置参数、默认参数、可变参数和关键字参数。

3.1 位置参数

位置参数,即调用函数时,必须按照各个参数的对应位置,顺序的传递参数。

例如:

def add(a, b):return a + bresult = add(3, 4)  # 输出: 7
3.2 默认参数

默认参数,如果在调用函数时没有传递该参数的值,则可以使用默认值。

例如,如下如果不传入参数,则会使用默认参数name。

def greet(name="World"):return f"Hello, {name}!"print(greet())          # 输出: Hello, World!
print(greet("Alice"))   # 输出: Hello, Alice!
3.3 可变数量参数(或不定长参数)

可变数量参数,即用于接受的参数,其数量是变化的、不固定的。这些参数被传递为一个元组或列表。

参数前面加星号,表示可变参数,基本语法如下:

def functionname([formal_args,] *var_args_tuple ):"函数_文档字符串"function_suitereturn [expression]

例如,调用求和函数sum时,分别传入两个参数和三个参数:

def sum(*numbers):return sum(numbers)result = sum(1, 2)  # 传递两个参数,输出: 3print ("result :",result)result = sum(1, 2, 3)  # 传递三个参数,输出: 6print ("result :",result)

加了一个星号 ***** 的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。例如:

#!/usr/bin/python3# 可写函数说明
def printinfo( arg1, *vartuple ):"打印任何传入的参数"print ("输出: ")print (arg1)print (vartuple)# 调用printinfo 函数
printinfo( 70, 60, 50 )输出: 
70
(60, 50) # 以元组类型导入

加了两个星号 ** 的参数会以字典的形式导入。例如:

#!/usr/bin/python3# 可写函数说明
def printinfo( arg1, **vardict ):"打印任何传入的参数"print ("输出: ")print (arg1)print (vardict)# 调用printinfo 函数
printinfo(1, a=2,b=3)输出: 
1
{'a': 2, 'b': 3}  # 以字典类型导入
3.4 关键字参数

关键字参数,即用于接受指定名称的参数。这些参数被传递为字典类型。

关键字参数,格式为:参数名1=参数值1,参数名2=参数值2。例如:

def find_word(text, word):return text.find(word)result = find_word(text='Hello, world!', word='world')  # 输出: 7

PS:使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。

四、函数的返回值return 语句

return [表达式] 语句用于退出函数,选择性地向调用方返回一个表达式。不带参数值的 return 语句返回 None。

例如:

#!/usr/bin/python3# 可写函数说明
def sum( arg1, arg2 ):# 返回2个参数的和."total = arg1 + arg2print ("函数内 : ", total)return total# 调用sum函数
total = sum( 10, 20 )
print ("函数外 : ", total)

五、函数作用域

函数作用域,即函数内部定义的变量是局部变量,函数外部定义的变量是全局变量。

例如:

x = 10  # 全局变量def foo():x = 5  # 局部变量print(f"局部变量 x: {x}")foo()  # 输出: 局部变量 x: 5
print(f"全局变量 x: {x}")  # 输出: 全局变量 x: 10

局部变量的作用范围仅限于该函数内部,在函数外部尝试访问局部变量会导致错误,例如:

def my_function():local_variable = "I am local"print(local_variable)my_function()
# 输出: I am local# 在函数外部尝试访问局部变量会导致错误
# print(local_variable)

在函数外部声明的变量称为全局变量。全局变量的作用范围跨越多个函数,例如:

global_variable = "I am global"def my_function():print(global_variable)my_function()
# 输出: I am global

如果要在函数内部修改全局变量,需要使用global关键字进行声明,例如:

global_variable = "I am global"def my_function():global global_variableglobal_variable = "I have been modified"my_function()
print(global_variable)
# 输出: I have been modified

在函数内部创建的变量,默认为局部变量。如果要在函数内部创建一个全局变量,需要使用global关键字进行声明。

例如:

def my_function():global new_global_variablenew_global_variable = "I am a new global"my_function()
print(new_global_variable)
# Output: I am a new global

总之,局部变量只在其被声明的函数内部有效。全局变量可以在多个函数中共享,但要在函数内部修改全局变量,需要使用global关键字。

六、函数的高级用法

6.1 Lambda函数

Lambda函数是一种匿名函数,通常用于短小的函数定义,而不需要使用def关键字显式地定义函数。

Lambda函数的语法如下:

lambda arguments: expression

下面是一个使用Lambda函数计算两个数之和的例子:

add = lambda x, y: x + y
result = add(3, 4)  # 输出: 7
6.2 嵌套函数和闭包

函数可以嵌套定义,并且内部函数可以访问外部函数的变量。闭包是指内部函数引用了外部函数的变量,并且外部函数返回了这个内部函数。

例如:

def outer():x = 5def inner():print(x)return innerclosure = outer()
closure()  # 输出: 5
6.3 文档字符串

文档字符串(docstring)用于描述函数的用途和参数。使用三重引号(“”")编写文档字符串。

例如:

def greet(name):"""打印问候消息
参数:name -- 要问候的人的名字
"""
print(f"Hello, {name}!")

七、总结

Python中的函数是一种非常重要的编程工具,它可以帮助我们组织代码、提高代码的可重用性和可维护性。通过掌握函数的定义、调用、参数、返回值、作用域以及使用技巧等方面的知识,我们可以更好地使用函数来编写高效的Python程序。

如果您对文章中内容有疑问,欢迎在评论区进行留言,我会尽量抽时间给您回复。如果文章对您有帮助,欢迎点赞、收藏。您的点赞,是对我最大的支持和鼓励,谢谢 :-)

相关文章:

【Python基础】Python函数

本文收录于 《Python编程入门》专栏,从零基础开始,分享一些Python编程基础知识,欢迎关注,谢谢! 文章目录 一、前言二、函数的定义与调用三、函数参数3.1 位置参数3.2 默认参数3.3 可变数量参数(或不定长参数…...

【超简单】1分钟解决ppt全文字体一键设置

省流 ppt的全部字体需要在“幻灯片母版”里面,“自定义字体”去设置好标题与正文的字体之后才算全部设置完毕 “视图”---“幻灯片母版” 找到“字体”---“自定义字体” 设置好中文和西文的字体,都可以按照自己的选择来,保存即可 吐槽 之…...

数组与贪心算法——179、56、57、228(2简2中)

179. 最大数(简单) 给定一组非负整数 nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。 注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 解法一、自定义比较…...

WireShark过滤器

文章目录 一、WireShark过滤器概念1. 捕获过滤器(Capture Filters)2. 显示过滤器(Display Filters)3. 捕获过滤器与显示过滤器的区别4. 过滤器语法结构实际应用场景 二、WireShark捕获数据包列表1. **No.(序号&#xf…...

2024年全新deepfacelive如何对应使用直播伴侣-腾讯会议等第三方软件

# 2024年全新deepfacelive如何对应使用直播伴侣-腾讯会议等第三方软件 前提按照之前的步骤打开deepfacelive正确配置并且在窗口已经输出了换脸后的视频,不懂步骤可以移步 https://doc.youyacao.com/88/2225 ## 首先下载obs并配置 https://obsproject.com/ 通过…...

告别懵逼——前端项目调试与问题排查方法小结

在日常工作中,我们常常会遇到以下两类典型的挑战: 场景一: 接手无文档的老项目 1、情景描述: 你接手了一个历史久远的项目,项目文档缺失,前任开发者已经离开,而你对当前的业务逻辑和代码结构都…...

[数据集][目标检测]肺炎检测数据集VOC+YOLO格式4983张2类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):4983 标注数量(xml文件个数):4983 标注数量(txt文件个数):4983 标注…...

顶层const和底层const

在C中,const修饰符用于声明常量,有两种常见的形式:顶层const和底层const,它们之间的区别在于它们修饰的对象及其在不同场景中的作用。 1. 顶层const (Top-level const) 顶层const用于修饰变量本身,使其成为常量。这意…...

嵌入式Openharmony系统构建与启动详解

大家好,今天主要给大家分享一下,如何构建Openharmony子系统以及系统的启动过程分解。 第一:OpenHarmony系统构建 首先熟悉一下,构建系统是一种自动化处理工具的集合,通过将源代码文件进行一系列处理,最终生成和用户可以使用的目标文件。这里的目标文件包括静态链接库文件…...

锡林郭勒奶酪品牌呼和浩特市大召店盛大开业

礼献中秋,香飘乳都。为进一步拓展锡林郭勒奶酪区域公用品牌产品销售渠道,9月8日,锡林郭勒奶酪区域公用品牌大召店在呼和浩特市大召广场月明楼隆重开业,现场为第三批新授权的39家奶酪生产经营主体代表授牌。至此,锡林郭…...

【Java算法】模拟

🔥个人主页: 中草药 🔥专栏:【算法工作坊】算法实战揭秘 🧣 一.模拟算法 模拟算法和传统的算法有一些不同之处,更多的是对题目要求的理解,通过代码的方式去模拟实现一道题目在现实中的实现方法…...

标准库标头 <filesystem> (C++17)学习之文件类型

本篇介绍filesystem文件库的文件类型API。 文件类型 is_block_file (C17) 检查给定的路径是否表示块设备 (函数) is_character_file (C17) 检查给定的路径是否表示字符设备 (函数) is_directory (C17) 检查给定的路径是否表示一个目录 (函数) is_empty (C17) 检查给定的路径是…...

基于51单片机的自动转向修复系统的设计与实现

文章目录 前言资料获取设计介绍功能介绍设计清单具体实现截图参考文献设计获取 前言 💗博主介绍:✌全网粉丝10W,CSDN特邀作者、博客专家、CSDN新星计划导师,一名热衷于单片机技术探索与分享的博主、专注于 精通51/STM32/MSP430/AVR等单片机设…...

mysql笔记4(数据类型)

数据库的数据类型应该是数据库架构师(DBA)和产品经理沟通后依据公司的项目、业务而定的,而且会不停地变化。数据类型的选择方面没有一个统一的标准,但是应该符合业务、项目的逻辑标准。 菜鸟教程 Mysql 数据类型 文章目录 1. int类型2. 浮点数3. 定点数4…...

电脑开机出现no operation system found错误原因分析及解决方法

最近有网友问我电脑一启动提示:no operation system found,这个提示意思是未找到操作系统。并且出现bios能认别硬盘,快捷启动时找不到硬盘,出现该提示的原因有很多,下面我们来详细分析一下开机出现no operation system…...

数学建模笔记—— 主成分分析(PCA)

数学建模笔记—— 主成分分析 主成分分析1. 基本原理1.1 主成分分析方法1.2 数据降维1.3 主成分分析原理1.4 主成分分析思想 2. PCA的计算步骤3. 典型例题4. 主成分分析说明5. python代码实现 主成分分析 1. 基本原理 在实际问题研究中,多变量问题是经常会遇到的。变量太多,无…...

@vueup/vue-quill使用quill-better-table报moduleClass is not a constructor

quill官方中文文档:https://www.kancloud.cn/liuwave/quill/1434144 扩展表格的使用 注意:想要使用表格 quill的版本要是2.0以后 升级到这个版本后 其他一些插件就注册不了了。 安装: npm install quilllatest 版本需要大于2.0版本 npm…...

gpp.bat,g++编译C++源文件的批处理

今天编写一个gpp.bat文件,是专门编译C源文件的批处理,内容如下: g %1.cpp -o %1.exegpp.bat的文件路径:D:\YcjWork\CppTour\gpp.bat 使用方法,在CMD下运行(//两个斜杠后面的内容是注释): //运行gpp.bat&…...

JDBC:连接数据库

文章目录 报错 报错 Exception in thread “main” java.sql.SQLException: Can not issue SELECT via executeUpdate(). 最后这里输出的还是地址,就是要重写toString()方法,但是我现在还不知道怎么写 修改完的代码,但是数据库显示&#…...

【赵渝强老师】大数据主从架构的单点故障

大数据体系架构中的核心组件都是主从架构,即:存在一个主节点和多个从节点,从而组成一个分布式环境。下图为展示了大数据体系中主从架构的相关组件。   视频讲解如下: 大数据主从架构的单点故障 【赵渝强老师】大数据主从架构的…...

大语言模型如何处理长文本?常用文本分割技术详解

为什么需要文本分割? 引言:为什么需要文本分割?一、基础文本分割方法1. 按段落分割(Paragraph Splitting)2. 按句子分割(Sentence Splitting)二、高级文本分割策略3. 重叠分割(Sliding Window)4. 递归分割(Recursive Splitting)三、生产级工具推荐5. 使用LangChain的…...

定时器任务——若依源码分析

分析util包下面的工具类schedule utils: ScheduleUtils 是若依中用于与 Quartz 框架交互的工具类,封装了定时任务的 创建、更新、暂停、删除等核心逻辑。 createScheduleJob createScheduleJob 用于将任务注册到 Quartz,先构建任务的 JobD…...

Neo4j 集群管理:原理、技术与最佳实践深度解析

Neo4j 的集群技术是其企业级高可用性、可扩展性和容错能力的核心。通过深入分析官方文档,本文将系统阐述其集群管理的核心原理、关键技术、实用技巧和行业最佳实践。 Neo4j 的 Causal Clustering 架构提供了一个强大而灵活的基石,用于构建高可用、可扩展且一致的图数据库服务…...

爬虫基础学习day2

# 爬虫设计领域 工商:企查查、天眼查短视频:抖音、快手、西瓜 ---> 飞瓜电商:京东、淘宝、聚美优品、亚马逊 ---> 分析店铺经营决策标题、排名航空:抓取所有航空公司价格 ---> 去哪儿自媒体:采集自媒体数据进…...

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南

精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...

C#中的CLR属性、依赖属性与附加属性

CLR属性的主要特征 封装性: 隐藏字段的实现细节 提供对字段的受控访问 访问控制: 可单独设置get/set访问器的可见性 可创建只读或只写属性 计算属性: 可以在getter中执行计算逻辑 不需要直接对应一个字段 验证逻辑: 可以…...

无人机侦测与反制技术的进展与应用

国家电网无人机侦测与反制技术的进展与应用 引言 随着无人机(无人驾驶飞行器,UAV)技术的快速发展,其在商业、娱乐和军事领域的广泛应用带来了新的安全挑战。特别是对于关键基础设施如电力系统,无人机的“黑飞”&…...

FFmpeg:Windows系统小白安装及其使用

一、安装 1.访问官网 Download FFmpeg 2.点击版本目录 3.选择版本点击安装 注意这里选择的是【release buids】,注意左上角标题 例如我安装在目录 F:\FFmpeg 4.解压 5.添加环境变量 把你解压后的bin目录(即exe所在文件夹)加入系统变量…...

日常一水C

多态 言简意赅:就是一个对象面对同一事件时做出的不同反应 而之前的继承中说过,当子类和父类的函数名相同时,会隐藏父类的同名函数转而调用子类的同名函数,如果要调用父类的同名函数,那么就需要对父类进行引用&#…...

LangFlow技术架构分析

🔧 LangFlow 的可视化技术栈 前端节点编辑器 底层框架:基于 (一个现代化的 React 节点绘图库) 功能: 拖拽式构建 LangGraph 状态机 实时连线定义节点依赖关系 可视化调试循环和分支逻辑 与 LangGraph 的深…...