【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程序。

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

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

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

相关文章

若依框架登录鉴权详解(动态路由)

若依框架登录鉴权:1.获取token(过期在响应拦截器中实现),2.基于RBAC模型获取用户、角色和权限信息(在路由前置守卫),3.根据用户权限动态生成(从字符串->组件,根据permission添加动…

【C++进阶】hash表的封装

文章目录 hash表哈希表的关键组成部分哈希表的优缺点优点:缺点: 常见应用场景 开放定址法实现hash表负载因子 (Load Factor)负载因子的意义负载因子的影响再散列 (Rehashing)示例 整体框架insertFinderasehash桶封装框架insertfinderase~HashTable() 总结…

银行结算业务

1.1 银行本票 银行本票是由银行签发的,承诺自己在见票时无条件支付票款给收款人或持票人的业务。银行本票按票面划分为定额本票和不定额本票,按币种划分为人民币银行本票和外币银行本票。人民币银行本票仅在同一交换区域内使用,资金清算利用当地人民银行组织的资金清算形式…

多个vue项目部署到nginx服务器

文章目录 需求一、项目打包1.vue.config.js2.request.js文件3.打包 二、nginx配置 需求 同一个域名安装多个vue项目。 比如:域名为 https://domain.com 后缀。那么通过不同的后缀就能去访问不同的项目地址。 https://domain.com,不加任何后缀&#x…

【第0006页 · 数组】寻找重复数

【前言】本文以及之后的一些题解都会陆续整理到目录中,若想了解全部题解整理,请看这里: 第0006页 寻找重复数 今天想讨论的一道题在 LeetCode 上评论也是颇为“不错”。有一说一,是道好题,不过我们还是得先理解了它才…

微信小程序中如何监听元素进入目标元素

Page({onLoad: function(){// 如果目标节点(用选择器 .target-class 指定)进入显示区域以下 100px 时,就会触发回调函数。wx.createIntersectionObserver().relativeToViewport({bottom: 100}).observe(.target-class, (res) > {res.inter…

合宙4G模组Air780EX——产品规格书

Air780EX 是合宙通信推出的LTE Cat.1 bis通信模块; Air780EX采用移芯EC618平台,支持LTE 3GPP Rel.13 技术; Air780EX 是4G全网通模块,可适应不同的运营商和产品,确保产品设计的最大灵活性。 其主要特点和优势可以总…

maven配置文件常用模板

注释很详细&#xff0c;直接上代码 项目结构 内容 父项目 pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0"xmlns:xsi"http://www.w3.org/2001/XMLSchema-instance"xsi…

高德地图SDK Android版开发 10 InfoWindow

高德地图SDK Android版开发 10 InfoWindow 前言相关类和方法默认样式Marker类AMap类AMap.OnInfoWindowClickListener 接口 自定义样式(视图)AMap 类AMap.ImageInfoWindowAdapter 接口 自定义样式(Image)AMap.ImageInfoWindowAdapter 接口 示例界面布局MapInfoWindow类常量成员变…

【数学建模国赛思路预约】2024全国大学生数学建模竞赛助攻思路、代码、论文

2024年全国大学生数学建模大赛马上就要开始了&#xff0c;大家有没有准备好呢&#xff0c;今年将会和之前一样&#xff0c;将会在比赛赛中时期为大家提供比赛各题的相关解题思路、可运行代码参考以及成品论文。 一、分享计划表如下所示 1、 赛中分享内容包括&#xff08;2023国…

高并发内存池(二):​整体框架的介绍与ThreadCache的实现

目录 整体框架介绍 ThreadCache的主体框架 自由链表-FreeList 内存对齐-RoundUp 计算桶位置-Index 基础版 进阶版 线程局部存储 __declspec(thread) 关键字 实现线程无锁 申请内存-Allocate 释放内存-Deallocate 从中心缓存中申请内存 整体框架介绍 高并发内存池…

机器学习引领未来:赋能精准高效的图像识别技术革新

图像识别技术近年来取得了显著进展,深刻地改变了各行各业。机器学习,特别是深度学习的突破,推动了这一领域的技术革新。本文将深入探讨机器学习如何赋能图像识别技术,从基础理论到前沿进展,再到实际应用与挑战展望,为您全面呈现这一领域的最新动态和未来趋势。 1. 引言 …

kubernetes集群部署Confluence 7.2.0+mysql 5.7(自测有效)

背景介绍&#xff1a; Confluence是一个专业的企业知识管理与协同软件。使用简单&#xff0c;但它强大的编辑和站点管理特征能够帮助团队成员之间共享信息、文档协作、集体讨论&#xff0c;信息推送。 这里介绍的使用的是Confluence 7.2.0版本的。 一、在kubernetes集群部署 1…

本地零阶提示优化

本文探讨了如何优化大型语言模型&#xff08;LLM&#xff09;中的提示&#xff08;prompt&#xff09;&#xff0c;以更有效地利用这些黑盒模型的能力。传统的优化方法倾向于寻找全局最优解&#xff0c;但在某些情况下这种做法可能表现不佳。通过对提示优化进行深入的研究&…

01 Docker概念和部署

目录 1.1 Docker 概述 1.1.1 Docker 的优势 1.1.2 镜像 1.1.3 容器 1.1.4 仓库 1.2 安装 Docker 1.2.1 配置和安装依赖环境 1.3镜像操作 1.3.1 搜索镜像 1.3.2 获取镜像 1.3.3 查看镜像 1.3.4 给镜像重命名 1.3.5 存储&#xff0c;载入镜像和删除镜像 1.4 Doecker…

汽车功能安全--TC3xx之PBIST、MONBIST

目录 1.PMS 电源监控速览 2.PBIST 3.MONBIST 4.小结 1.PMS 电源监控速览 英飞凌TC3xx芯片的四种硬件机制&#xff0c;分别是&#xff1a; PMS:PBIST: Power Built-in Self Test. MCU:LBIST: Logic Built-in Self Test. PMS:MONBIST: Monitor Built-in Self Test. VMT:MBI…

史上最全的Linux常用命令汇总(超全面!超详细!)收藏这一篇就够了!

command &#xff1a;命令名&#xff0c;相应功能的英文单词或单词的缩写[-options] &#xff1a;选项&#xff0c;可用来对命令进行控制&#xff0c;也可以省略parameter &#xff1a;传给命令的参数&#xff0c;可以是 零个、一个 或者 多个 查阅命令帮助信息 -help 说明&…

【高阶数据结构】B树、B+树、B*树

B树、B树、B*树 1. 常见的搜索结构2. B树概念3. B树的插入分析4. B树的插入实现4.1 B树的节点设计4.2 B树的部分插入实现14.3 B树的查找4.4 B树的部分插入实现24.5 插入key的过程4.7 B树的插入完整代码4.8 B树的简单验证4.9 B树的删除4.10 B树的性能分析 5. B树6. B*树7. 总结8…

【C++】STL学习——list模拟实现

目录 list介绍list结构介绍节点类的实现迭代器的实现构造函数运算符重载--运算符重载运算符重载!运算符重载*运算符重载->运算符重载 const迭代器的实现多参数模板迭代器list函数接口总览默认成员函数构造函数1构造函数2构造函数3 析构函数拷贝构造函数赋值重载函数 迭代器b…

开放式系统互连(OSI)模型的实际意义

0 前言 开放式系统互连&#xff08;OSI&#xff0c;Open Systems Interconnection&#xff09;模型&#xff0c;由国际标准化组织&#xff08;ISO&#xff09;在1984年提出&#xff0c;目的是为了促进不同厂商生产的网络设备之间的互操作性。 定义了一种在层之间进行协议实现…