Python 入门教程(6)函数 | 6.1、函数定义

news2024/10/10 4:27:57

文章目录

  • 一、函数定义
    • 1、定义
    • 2、函数调用
    • 3、参数传递
    • 4、传递参数的形式
      • 4.1、位置参数
      • 4.2、关键字参数
      • 4.3、默认参数
      • 4.4、可变参数
    • 5、返回值

前言:

Python作为一种高级编程语言,以其简洁、易读和强大的功能而广受欢迎。函数作为编程中的核心概念之一,在Python中扮演着至关重要的角色。函数允许你将一段代码封装起来,赋予其名称,并通过参数和返回值来实现代码的复用和模块化。

一、函数定义

1、定义

在Python中,函数通过def关键字来定义。其基本语法如下:

def 函数名(参数列表):  
    """函数文档字符串(docstring),用于描述函数的功能和用法"""  
    函数体  
    return 返回值
  • 函数名: 遵循Python的命名规则,应具有描述性,便于理解函数的功能。
  • 参数列表: 用于接收传递给函数的值,可以包含多个参数,参数之间用逗号分隔。
  • 函数体: 包含执行具体任务的代码块,必须缩进。
  • 返回值: 使用return语句返回结果,可以返回多个值(以元组形式)。如果不显式返回,则默认返回None

2、函数调用

定义函数后,通过函数名加上括号(必要时包含参数)来调用函数。例如:

def greet(name):  
    """打印问候语"""  
    print(f"Hello, {name}!")  
  
greet("Alice")  # 调用函数,输出:Hello, Alice!

3、参数传递

Python的参数传递有两种形式,传不可变对象传可变对象

  • 不可变类型: 类似 c++ 的值传递,如 整数、字符串、元组。如fun(a),传递的只是a的值,没有影响a对象本身。比如在 fun(a)内部修改 a 的值,只是修改另一个复制的对象,不会影响 a 本身。
  • 可变类型: 类似 c++ 的引用传递,如 列表,字典。如 fun(la),则是将 la 真正的传过去,修改后fun外部的la也会受影响

python 中一切都是对象,严格意义不能说值传递还是引用传递,应该说传不可变对象和传可变对象。

示例一:传不可变对象

def ChangeInt( a ):
    a = 10
 
b = 2
ChangeInt(b)
print b # 结果是 2

示例二:传可变对象

def changeme( mylist ):
   "修改传入的列表"
   mylist.append([1,2,3,4])
   print "函数内取值: ", mylist    
   return
 
# 调用changeme函数
mylist = [10,20,30]
changeme( mylist )
print "函数外取值: ", mylist

输出结果

函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

4、传递参数的形式

Python函数的参数传递分为位置参数、关键字参数、默认参数、可变参数(*args**kwargs 等几种形式。

4.1、位置参数

按照定义顺序传递参数。

def add(a, b):  
    return a + b  

result = add(3, 5)  # result 为 8

4.2、关键字参数

关键字参数允许在函数调用时,按照参数名来传递值,而不是仅仅依赖参数的顺序。这样做的好处是,即使函数参数很多,或者参数顺序容易混淆,也能准确地传递每个参数的值。语法上,关键字参数在函数调用时,通过参数名=值的形式传递。例如:

def greet(name, greeting="Hello"):  
    print(f"{greeting}, {name}!")  
  
# 使用关键字参数调用函数  
greet(name="Alice", greeting="Hi")  # 输出: Hi, Alice!

即使改变参数的顺序,只要参数名正确,函数仍然能够正确执行:

greet(greeting="Hi", name="Alice")  # 输出: Hi, Alice!

使用过程要注意的问题:

  • 参数名必须匹配: 关键字参数中的参数名必须与函数定义中的参数名完全匹配,否则Python会抛出TypeError异常。
  • 不能重复传递: 同一个参数名不能在函数调用时重复传递,否则会引发TypeError
  • 位置参数与关键字参数混用: 在函数调用时,可以混合使用位置参数和关键字参数,但位置参数必须在关键字参数之前。

4.3、默认参数

默认参数是指在定义函数时,为某些参数指定默认值,使得在函数调用时,如果没有提供这些参数的值,则会使用默认值。默认参数的基本语法是在函数定义时为参数赋值,例如:

def greet(name, message="Hello"):  
    print(f"{message}, {name}!")

使用过程要注意的问题:

  • 必选参数在前,默认参数在后: 在函数定义时,必选参数必须放在默认参数之前。如果默认参数放在必选参数之前,Python解释器会报错。

4.4、可变参数

  • *args 用于传递任意数量的位置参数,以元组形式接收。
  • **kwargs 用于传递任意数量的关键字参数,以字典形式接收。
def print_args(*args):  
    for arg in args:  
        print(arg)  

def print_kwargs(**kwargs):  
    for key, value in kwargs.items():  
        print(f"{key}: {value}")  

print_args(1, 2, 3)  # 输出: 1 2 3  
print_kwargs(a=1, b=2, c=3)  # 输出: a: 1 b: 2 c: 3

5、返回值

函数可以通过return语句返回一个或多个值(从Python 3.6开始支持返回多个值,实际上是返回一个元组)。Python函数可以返回任何类型的数据,包括整数、浮点数、字符串、列表、元组、字典、集合、对象、甚至是另一个函数(即闭包)。如果函数没有显式地返回任何值,那么它默认返回None

def divide(a, b):  
    if b == 0:  
        return "Error: Division by zero"  
    return a / b  
  
result = divide(10, 2)  # result 为 5.0

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

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

相关文章

S7---基本介绍

目录 高通S7和S7 Pro Gen 1声音平台 音频性能的新层次 高通XPAN技术 卓越的听力增强 高通第四代ANC 特征 QualcommS7 Pro Gen 1附加功能 QualcommS7 Pro Gen 1框图 高通S7和S7 Pro Gen 1声音平台 声音被重新想象。QualcommS7声音平台旨在开启一个新的高级音频性能级别。…

Unity转Unreal5之从入门到精通 Spline(样条曲线)组件的使用

前言 Spline 组件 能编辑 样条曲线,定义一条路径,路径上的点可以通过距离起点的长度获取,因此可以实现 物体沿路径连续移动 的效果或者 物体沿路径分布 的效果。 今天我们就来实现一个简单的Spline样条曲线的Demo 实现一个沿路径运动的功能 1.新建一个基于 Actor 的蓝图…

JavaSE——集合1:Collection接口(Iterator和增强for遍历集合)

目录 一、集合框架体系(重要) 二、集合引入 (一)集合的理解与好处 三、Collection接口 (一)Collection接口实现类的特点 (二)Collection接口常用方法 (三)Collection接口遍历元素的方式(Iterator和增强for) 1.使用Iterator(迭代器) 1.1Iterator(迭代器)介绍 1.2Itera…

使用cv::FileStorage对yaml文件进行读写

问题描述:记录使用cv::FileStorage对yaml文件进行读写 参考官网:OpenCV: cv::FileStorage Class Reference WRITE:根据文件路径写文件,如果文件不存在会新建,文件存在则变空白 FileStorage fs(filepath, FileStorag…

新增数据集 SDK、“关系抽取”文本标注、优化模型监控和管理|ModelWhale 版本更新

ModelWhale 带来了新一轮的版本更新,期待为大家带来更优质的使用体验。 本次更新中,ModelWhale 主要进行了以下功能迭代: 数据管理:新增 mw_python_sdk 支持通过查看、下载、制作、更新数据集 文本标注:新增“关系抽取…

【DFDT】DFDT: An End-to-End DeepFake Detection Framework Using Vision Transformer

文章目录 DFDT: An End-to-End DeepFake Detection Framework Using Vision Transformerkey points贡献方法补丁提取和嵌入基于注意力的补丁选择多流transformer块多尺度分类器实验DFDT: An End-to-End DeepFake Detection Framework Using Vision Transformer 会议/期刊:App…

Apache Linkis + OceanBase:如何提升数据分析效率

计算中间件 Apache Linkis 构建了一个计算中间件层,以实现上层应用程序和底层数据引擎之间的连接、治理和编排。目前,已经支持通过数据源的功能,实现用户通过Linkis 对接并使用 OceanBase数据库。 本文详细阐述了在 Apache Linkis v1.3.2中&a…

【虚拟化】内核级虚拟化技术KVM介绍,全/半虚拟化的区别,使用libvirt搭建虚拟化平台(go/java/c++)

【虚拟化】内核级虚拟化技术KVM介绍,全/半虚拟化的区别,使用libvirt搭建虚拟化平台(go/java/c) 文章目录 1、虚拟化技术分类与架构(KVM,Xen),全/半虚拟化的区别2、libvirt介绍3、使用…

【北京迅为】《STM32MP157开发板嵌入式开发指南》-第二十四章 安装 Samba

iTOP-STM32MP157开发板采用ST推出的双核cortex-A7单核cortex-M4异构处理器,既可用Linux、又可以用于STM32单片机开发。开发板采用核心板底板结构,主频650M、1G内存、8G存储,核心板采用工业级板对板连接器,高可靠,牢固耐…

举个栗子!Tableau 技巧(283):用山丘图呈现项目周期

人们常常用爬山来比喻工作中做项目的过程:明确目标、规划路线、团队合作、应对挑战,然后享受登顶并在下山后总结经验教训。 图片来自网络 在 Tableau 中做项目分析时,将一段时期的项目用山丘图来呈现,山丘大小代表项目周期的时间…

RAG(Retrieval-Augmented Generation,检索增强生成)

简介:个人学习分享,如有错误,欢迎批评指正。 RAG(Retrieval-Augmented Generation)是一种结合信息检索与生成式模型的混合架构,旨在提升自然语言生成任务的准确性、丰富性和知识覆盖范围。它通过在生成过程…

sqli-labs less-20 less-21 less-22 cookie注入

COOKIE 作用:是由网络服务器存储在你电脑硬盘上的一个txt类型的小文件,它和你的网络行为有关,记录了当前用户的状态 形式:keyvalue 例如:当我们登录某个账号后,服务器会在cookies进行记录 个人理解&#xf…

基于Vue3+pinia+vue-router+axios+element-plus等开发的新闻发布管理系统

新闻发布管理系统是一个基于Vue3piniavue-routeraxioselement-plus等开发的系统,主要功能包括:登录模块、注册模块、新闻分类管理模块、新闻管理模块、个人中心模块(包括基本资料、更换头像、重置密码功能)等。 代码下载&#xf…

指针式表盘指针关键部位分割系统源码&数据集分享

指针式表盘指针关键部位分割系统源码&数据集分享 [yolov8-seg-LSKNet&yolov8-seg-C2f-EMSC等50全套改进创新点发刊_一键训练教程_Web前端展示] 1.研究背景与意义 项目参考ILSVRC ImageNet Large Scale Visual Recognition Challenge 项目来源AAAI Gl…

MAX模型转为las点云模型

在做一个小项目,探测闯入的野生动物。在做案例,需要用到一些野生动物的点云模型。公开的模型像斯坦福等学术机构,以及Thingiverse、Digital Morphology都没有合适的。但是在一些3d数据库中可以下载到max模型,如图1所示。通过3dmax…

英伟达RTX 5090和RTX 5080

英伟达RTX 5090和RTX 5080 一、英伟达RTX 5090和RTX 5080显卡参数的更为详细的介绍: RTX 5090 显卡参数 GPU核心与架构 核心代号:GB202-300-A1。 架构:Blackwell架构,这是英伟达最新的显卡架构,旨在提供更高的性能…

C++内部类和匿名对象

1.内部类 内部类就是定义在一个类的内部的类&#xff0c;比如 #include<iostream> using namespace std; class AA{ public:class BB {public:void print(const AA& A){cout << A.aa1 << " " << A.aa2 << endl;}private:}; priv…

RabbitMQ初识

目录 Kafka RocketMQ RabbitMQ MQ界面(它使用的端口号5672&#xff0c;界面是15672&#xff09; 如何添加一个虚拟机&#xff0c;点击右侧 Topics&#xff08;通配符模式&#xff09; 发布确认机制 持久性(可靠性保证的机制之一) JDK17,Linux服务器Ubuntu 什么是MQ 实…

recyclerView(kotlin)

recyclerView的优点 使用viewHolderRecycledViewPool的方式复用资源&#xff0c;提高性能利用LayoutManager&#xff0c;可根据不同需求使用不同的布局&#xff0c;且可以方便使用对应布局提供的方法&#xff0c;如快速定位item等。RecyclerView 提供了一个 ItemAnimator 接口…

msvcp110丢失怎么解决?三种方法教你修复msvcp110.dll丢失

1. msvcp110.dll 概述 1.1 定义与作用 msvcp110.dll 是 Microsoft Visual C 2012 Redistributable Package 的一部分&#xff0c;它是一个动态链接库&#xff08;DLL&#xff09;文件&#xff0c;对运行时环境至关重要。这个文件包含了 C 标准库的实现&#xff0c;为基于 Vis…