[Python学习篇] Python函数

news2024/7/4 8:58:58

定义函数

语法:使用关键字 def

def 函数名(参数):
    代码1
    代码2
    ......

调用函数

语法:

函数名(参数)

注意:不同的需求,参数可有可无。在Python中,函数必须先定义后使用

示例:

# 定义函数
def hello(name):
    print("Hello my name is " + name)

# 调用函数
hello("Tom") # 打印 Hello my name is Tom

函数的形参和实参

形参:定义函数的同时定义了参数

实参:调用函数时传入参数的真实数据叫实参。

函数的返回值

语法:关键字 return

def 函数名():

    return 返回值

示例:

# 定义函数
def add(a, b):
    return a + b

# 调用函数
result = add(1, 2)
print(result)  # 打印 3

函数的多个返回值

语法:多个返回值使用英式逗号分割

def 函数名():

    return 返回值1,  返回值2, 返回值n

注意:

1,多个变量接收函数多个返回值,变量和返回值顺序一一对应。
2,一个变量接收函数多个返回值,返回的变量类型默认是元组类型。

3,return 可以返回列表、元组或者字典,用于表示返回多个值。

示例:

# 定义函数
def test():
    return 1, 10, 'a'

# 多个变量接收函数多个返回值,变量和返回值顺序一一对应
a, b, c = test()
print(a)  # 1
print(b)  # 10
print(c)  # a

# 一个变量接收函数多个返回值,返回的变量类型是元组类型
t1 = test()
print(t1)  # (1, 10, 'a')

函数的说明文档

定义语法:

def 函数名(参数):
    """ 说明⽂档的位置,必须是函数内部第一行的注释"""
    代码
    ......

使用语法:

help(函数名)             # 使用内置函数help,查看函数说明文档

示例:

# 定义
def add(a, b):
    """加法运算,返回运算结果"""
    return a + b

# 查看函数说明文档
help(add)

 

变量的作用域

  • 局部变量

局部变量是定义在函数体内部的变量,即只在函数体内部⽣效。局部变量的作用是在函数体内部,临时保存数据,即当函数调⽤完成后,则销毁局部变量。

  • 全局变量

全局变量是在函数体内、外都能⽣效的变量。

修改全局变量,使用 global 关键字
a = 100

def testA():
    a = 200
    print(a)  # 打印函数内变量a,这时a是局部变量,修改a=200,不影响全局变量a的值

testA()
print(a)  # 打印 100,在testA中修改的值,不影响全局变量a

# 演示局部内修改全局变量的值
def testB():
    # 使用 global 关键字声明a为全局变量
    global a
    a = 200  # 声明后再修改变量a的值,此时就是修改全局变量a的值
    print(a)  # 打印 200

testB()
print(a)  # 打印 200

函数的参数

  • 位置参数

调用函数时根据函数定义的参数位置来传递参数。例如形参有2个,实参就需要传入2个。形参实参数据按照顺序一一对应。

示例:

def hello(name, age):
    print(f"您的名字是{name}, 年龄是{age}")

hello("Tom", 20)  # 您的名字是Tom, 年龄是20
  • 关键字参数

函数调用通过“键=值”形式加以指定。可以让函数更加清晰、容易使用。函数调用时,如果有位置参数,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序。

示例:

def hello(name, age, gender):
    print(f"您的名字是{name}, 年龄是{age}, 性别是{gender}")

hello("Tom", gender="男", age=20)  # 您的名字是Tom, 年龄是20, 性别是男
  • 缺省参数

缺省参数也叫默认参数,用于定义函数时,为参数提供默认值,调用函数时缺省参数不传值,此时使用参数的默认值。缺省参数传值时使用传入的值(注意:定义函数和调用函数时,默认参数要写在所有参数的后面)。

def hello(name, age, gender='男'):
    print(f"您的名字是{name}, 年龄是{age}, 性别是{gender}")

hello("Tom", 20)  # 您的名字是Tom, 年龄是20, 性别是男
hello("Jerry", 19, '女')  # 您的名字是Jerry, 年龄是19, 性别是女
  • 可变参数

可变参数也叫不定长参数。用于不确定调用的时候会传递多少个参数(不传参也可以)的场景。此时,可以包裹(packing)位置参数,或者包裹关键字参数,来进行参数传递(组包的过程),会显得非常方便。

可变参数有两种类型:

  1. 包裹位置参数
  2. 包裹关键字参数
1. 包裹位置参数
def hello(*args):
    print(args)    # args是元组类型

hello(100)  # (100,)
hello('Tom', 'John', 'Smith')  # ('Tom', 'John', 'Smith')
2. 包裹关键字参数
def hello(**kwargs):
    print(kwargs)  # kwargs 是字典类型

hello(name="Tom", age=18)  # {'name': 'Tom', 'age': 18}

拆包

组包是将零散的数据组合成一个元组或者列表或者字典过程,拆包就是将一个组合的数据拆成零散的变量数据。

  • 元组拆包
def hello():
    return 100, 200

a, b = hello()
print(a)  # 100
print(b)  # 200
  • 字典拆包
dict1 = {'name': 'Tom', 'age': 20}
# 拆包,得到字典的key
a, b = dict1
print(a)  # name
print(b)  # age

# 通过key,得到value
print(dict1[a])  # Tom
print(dict1[b])  # 20

交换变量

a = 10
b = 20

a, b = b, a
print(a)  # 20
print(b)  # 10

引用传递和值传递

  • 引用传递

在函数传递变量的过程中,引用传递的是变量的引用地址(栈内存空间指向存储变量数据的堆内存地址),并不是变量本身。这意味着函数内部对变量数据的修改会影响原变量数据。

  • 值传递

值传递是指在函数传递变量的过程中,程序把变量值复制了一份存储在新的堆内存地址中(新创建了一个变量,变量的值相同)后把新创建的变量本身传入到函数中,当函数对传入的变量值进行了修改后,不影响原变量的数据,原数据不变。

注意:

  • 在Python中,数据的传递都是通用引用的方式传递的,没有值传递没有值传递没有值传递。
  • 在引用传递过程中,原有的变量值是否改变又取决于变量的数据类型是可变类型还是不可变类型
    • 对于不可变对象,修改操作会创建新的对象,因此看起来像是值传递。
    • 对于可变对象,修改操作会影响到原来的对象,体现了引用传递的特性。

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

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

相关文章

边缘计算网关在现代工业企业中的作用-天拓四方

随着工业4.0时代的到来,数字化转型已经成为工业企业发展的必然趋势。在这一过程中,边缘计算网关以其独特的优势,正逐渐成为工业企业实现智能化、高效化运营的关键技术。 边缘计算网关是一种部署在网络边缘的设备,它集成了计算、存…

每日一题——Python实现PAT乙级1100 校庆(举一反三+思想解读+逐步优化)五千字好文

一个认为一切根源都是“自己不够强”的INTJ 个人主页:用哲学编程-CSDN博客专栏:每日一题——举一反三Python编程学习Python内置函数 Python-3.12.0文档解读 目录 我的写法 代码结构和逻辑 时间复杂度分析 空间复杂度分析 总结 我要更强 方法一…

RK3568驱动指南|第十五篇 I2C-第181章使用GPIO模拟I2C驱动

瑞芯微RK3568芯片是一款定位中高端的通用型SOC,采用22nm制程工艺,搭载一颗四核Cortex-A55处理器和Mali G52 2EE 图形处理器。RK3568 支持4K 解码和 1080P 编码,支持SATA/PCIE/USB3.0 外围接口。RK3568内置独立NPU,可用于轻量级人工…

一个能让渲染性能提高100倍的办法

GPU 光线追踪是当今的热门话题,所以让我们来谈谈它!今天我们将光线追踪一个单个球体。 使用片段着色器。 是的,我知道。并不特别花哨。你可以在 Shadertoy 上搜索并获得数百个示例(https://www.shadertoy.com/results?querysphere)。甚至已…

速通RK3568开发板多网口网线直连测试

开源鸿蒙硬件方案领跑者 触觉智能 本文适用于在EVB3568开发板上进行多网口网线直连。触觉智能的EVB3568主板基于瑞芯微RK3568处理器,采用22nm先进工艺制程,四核A55 CPU,主频高达2.0GHz,支持高达8GB高速LPDDR4,1T算力N…

Linux miniconda 安装tensorflow-gpu遇到找不到GPU问题

背景: Linux Miniconda python3.9 安装步骤 1、 pip install tensorflow-gpu2.8.0 -i https://pypi.tuna.tsinghua.edu.cn/simple 2、报错如下: 更换镜像源,单独安装 pip install tf-estimator-nightly2.8.0.dev2021122109 -i https:/…

【C语言】typedef 关键字

在C语言中,typedef关键字用于给现有的数据类型起一个新的名字。它在提高代码可读性、简化复杂类型声明、增强可维护性方面非常有用。typedef通常用于定义结构体、指针、函数指针以及其他复杂类型。 基本用法 typedef int MyInt; MyInt x 10;在这个例子中&#xf…

42、nginx之nginx.conf

nginx----web服务器 一、nginx http就是apache,在国内很少。 nginx是开源的,是一款高性能,轻量级的web服务软件。 稳定性高,而且版本迭代比较快(修复bug速度比较快,安全性快) 消耗系统资源…

中日区块链“大比拼”!中国蚂蚁加大区块链押注资本!日本索尼进军加密货币市场!

科技巨头在区块链和加密货币领域的动作越来越频繁。近期,中国金融科技巨头蚂蚁集团进一步加大了在区块链业务上的投资,而日本电子科技巨头索尼集团则正式进军加密货币交易领域。这些举措反映了两国对于区块链和加密资产领域的不同态度和布局。 蚂蚁集团加…

Load Tensor to local Nvidia GPU

0. 安装Nvidia驱动 ubuntu24.04的安装非常简单,在安装界面,选择为"图形化和其他硬件安装驱动",重启后即有原版Nvidia驱动(如图Nvidia X xxx) 1.确定电脑上是否有NvidiaGPU且安装好Nvidia驱动 import torch print(torch.version…

LInux SSH Server远程代码执行漏洞 (CVE-2024-6387)处理

一、漏洞描述 2024年7月1日,OpenSSH Server中存在的一个RCE远程代码执行漏洞(CVE-2024-6387,又被称为regreSSHion)细节被公开,该漏洞影响基于glibc的Linux系统上的OpenSSH Server (sshd)。 默认配置下的OpenSSH Serve…

MIX OTP——依赖项和总体项目

在本章中,我们将讨论如何管理 Mix 中的依赖项。 我们的 kv 应用程序已经完成,现在是时候实现处理我们在第一章中定义的请求的服务器了: 但是,我们不会向 kv 应用程序添加更多代码,而是将 TCP 服务器构建为另一个应用程…

Linux系统之安装Firefox浏览器

Linux系统之安装Firefox浏览器 一、Firefox浏览器介绍1.1 Firefox浏览器介绍1.2 Firefox浏览器特点 二、环境介绍二、本次实践环境介绍2.1 环境规划2.2 本次实践介绍 三、安装firefox浏览器3.1 安装epel3.2 检查yum仓库状态3.3 安装Firefox浏览器3.4 查看Firefox版本 四、在命令…

win11电源设置

把钩子去掉以后 win11的电脑关机才有用 否则,关机了,电脑也实际上一直在运行

partition()方法——分割字符串为元组

自学python如何成为大佬(目录):https://blog.csdn.net/weixin_67859959/article/details/139049996?spm1001.2014.3001.5501 语法参考 partition()方法根据指定的分隔符将字符串进行分割。如果字符串中包含指定的分隔符,则返回一个3元的元组,第一个为…

HarmonyOS(38) UIAbility里icon和label的作用

UIAbility里icon和label的作用 icon和label实际效果测试代码传送门参考资料 icon和label 为使应用能够正常使用UIAbility,需要在module.json5配置文件的abilities标签中声明UIAbility的名称、入口、标签等相关信息: {"module": {..."ab…

3.3prometheus命令行参数讲解

本节重点介绍 : target页面flags页面status页面tsdb-status页面 访问地址 $ip:9090 target页面 flags页面 展示命令行参数的,没设置的取默认值 status页面 描述运行信息和编译的信息 tsdb-status页面 打印存储的运行状态信息帮我们定位重查询的 服务发现页面…

怎么把录音转文字?推荐几个简单易操作的方法

在小暑这个节气里,炎热的天气让人分外渴望效率up!Up!Up! 对于那些在会议或课堂中急需记录信息的朋友们,手写笔记的速度往往难以跟上讲话的节奏。此时,电脑录音转文字软件就像一阵及时雨,让记录…

深度学习原理与Pytorch实战

深度学习原理与Pytorch实战 第2版 强化学习人工智能神经网络书籍 python动手学深度学习框架书 TransformerBERT图神经网络: 技术讲解 编辑推荐 1.基于PyTorch新版本,涵盖深度学习基础知识和前沿技术,由浅入深,通俗易懂&#xf…

动态顺序表实现通讯录

系列文章目录 【数据结构】顺序表 文章目录 系列文章目录前言一、通讯录的功能要求二、通讯录的代码实现1. 新建文件2. 创建通讯录的结构体3. 对顺序表文件进行修改4. 通讯录具体功能实现4.1. 通讯录的初始化和销毁4.2. 增加联系人信息(尾插)4.3. 查找指…