[Python学习篇] Python函数

定义函数

语法:使用关键字 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 = 100def testA():a = 200print(a)  # 打印函数内变量a,这时a是局部变量,修改a=200,不影响全局变量a的值testA()
print(a)  # 打印 100,在testA中修改的值,不影响全局变量a# 演示局部内修改全局变量的值
def testB():# 使用 global 关键字声明a为全局变量global aa = 200  # 声明后再修改变量a的值,此时就是修改全局变量a的值print(a)  # 打印 200testB()
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, 200a, 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 = 20a, b = b, a
print(a)  # 20
print(b)  # 10

引用传递和值传递

  • 引用传递

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

  • 值传递

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

注意:

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

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

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

相关文章

csdn如何建立专栏,并且把已发布的文章,放到专栏里

不会在csdn上建立专栏,管理自己的博客? 建立了专栏,不知道该怎么放入文章? 本文将一步步带你解决这些问题。 我是蚊子码农,欢迎各位的点赞、关注和收藏,有了你们的激励,我会带来更好的作品。…

聚焦 Navicat 17 新特性 | 让用户界面交互更丝滑

随着 Navicat 17 的发布,引起业界热烈反响和深入讨论。早前,我们介绍了 Navicat 17 《模型设计创新与优化​​​​​​​》与《查询与配置》的新特性。此外,Navicat 在用户界面交互方面进行了显著优化,新增了一系列实用的功能&…

《后端程序猿 · 基于 Lettuce 实现缓存容错策略》

📢 大家好,我是 【战神刘玉栋】,有10多年的研发经验,致力于前后端技术栈的知识沉淀和传播。 💗 🌻 近期刚转战 CSDN,会严格把控文章质量,绝不滥竽充数,如需交流&#xff…

机器学习辅助的乙醇浓度检测

目录 1.为什么要机器学习 2. 神经网络一般组成 3.BP神经网络工作过程 4.评价指标 5.实操代码 1.为什么要用机器学习 人工分析大量的谐振模式,建立各种WGM的响应与未知目标之间的关系,是一个很大的挑战。机器学习(ML)能够自行识别全谱的全部特征。作为…

如何在Lazada平台快速出单?测评助力商家突破销量瓶颈

Lazada在短短的几年里已经发展成了东南亚地区最大的在线购物网站之一 ,很多商家也想要在这样一个大的跨境平台上发展。那么,对于希望在Lazada平台上大展拳脚的商家而言,出单是否容易呢? ​一、Lazada出单容易吗? Lazada出单的难易程度并非…

漫步5G-A City,一份独属于上海的浪漫

作家亨利詹姆斯曾写道,“城市漫步,让我接触到了这个世界上最好的东西”。 用漫无目的地行走,来体验和观察一座城市,上海凭借丰富多元的文化特质,成为citywalk这种浪漫生活方式的流行地。 无论你是漫步在美术馆、画廊林…

数据抓取技术在视频内容监控与快速读取中的应用

引言 在数字化时代,视频内容的快速读取和监控对于内容提供商来说至关重要。思通数科的OPEN-SPIDER抓取技术为这一需求提供了高效的解决方案。 OPEN-SPIDER技术概述 OPEN-SPIDER是思通数科开发的一种先进的数据抓取技术,它能够: - 高效地从各…

Stable Diffusion【基础篇】:降噪强度(denoising strength)

提到降噪强度(denoising strength),大家一定不会陌生,这个参数是图生图中最关键的参数之一。今天在Stable Diffusion Art网站看到一篇介绍降噪强度(denoising strength)的文章(地址:…

从hugging face 下模型

支持国内下载hugging face 的东西 下模型权重 model_id 是红色圈复制的 代码 记得设置下载的存储位置 import os from pathlib import Path from huggingface_hub import hf_hub_download from huggingface_hub import snapshot_downloadmodel_id"llava-hf/llava-v1…

【Python机器学习】模型评估与改进——二分类指标

目录 1、错误类型 2、不平衡数据集 3、混淆矩阵 与精度的关系。 准确率、召回率与f-分数 分类报告 4、考虑不确定性 5、准确率-召回率曲线 6、受试者工作特征(ROC)与AUC 二分类可能是实践中最常见的机器学习应用,也是概念最简单的应…

云原生之容器编排实践-OpenEuler23.09在线安装Kubernetes与KubeSphere

背景 前几篇文章中介绍了如何将 ruoyi-cloud 项目部署到 Kubernetes 集群中,包括网关服务、认证服务和系统服务并且对全部服务采用 YAML 文件的方式来进行部署,这虽然有助于理解 K8S 组织管理资源的风格与底层机制,但是对于团队中不太熟悉命…

代码随想录算法训练营第21天|LeetCode 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树

1.LeetCode 669. 修剪二叉搜索树 题目链接:https://leetcode.cn/problems/trim-a-binary-search-tree/description/ 文章链接:https://programmercarl.com/0669.修剪二叉搜索树.html 视频链接:https://www.bilibili.com/video/BV17P41177ud?…

【网络】网络基础(一)

网络基础(一) 文章目录 一、计算机网络背景1.1网络发展1.2认识“协议” 二、网络协议初识2.1OSI七层模型2.2OSI五层模型 三、网络传输基本流程3.1局域网通信3.2网络传输流程不跨子网的网络传输跨子网的网络传输 3.3网络中的地址管理IP地址MAC地址 一、计…

Kotlin中的数据类型

人不走空 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌赋:斯是陋室,惟吾德馨 目录 🌈个人主页:人不走空 💖系列专栏:算法专题 ⏰诗词歌…

冒泡排序写法

正宗的冒泡排序写法&#xff1a; public class BubbleSort {public static void main(String[] args) {int[] a {4,6,5,24,3,7,1};//初始化一个最大角标变量int n a.length-1;//循环轮次for (int i0;i<n;i){//从后向前开始&#xff0c;相邻元素比较大小&#xff0c;小的元…

Batch Size 不同对evaluation performance的影响

目录 问题描述如果是bugbatch size的设置问题尝试使用GroupNorm解决batchsize不同带来的问题归一化的分类 参考文章 问题描述 深度学习网络训练时&#xff0c;使用较小的batch size训练网络后&#xff0c;如果换用较大的batch size进行evaluation&#xff0c;网络的预测能力会…

Python基础001

Python输出语句 print输出字符串 print("中国四大名著&#xff1a;","西游记|","三国演义|","红楼梦|","水浒传") print(6) print(1 1)Python输入语句 input函数 input() input("我的名字是&#xff1a;") p…

RK3568驱动指南|第十五篇 I2C-第182章 使用Linux中默认的模拟I2C驱动程序

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

线性代数笔记

行列式 求高阶行列式 可以划上三角 上三角 余子式 范德蒙行列式 拉普拉斯公式 行列式行列对换值不变 矩阵 矩阵的运算 同型矩阵加减 对应位置相加减 矩阵的乘法 左边第 i 行 一次 相乘求和 右边 第 j 列 eg 中间相等 两边规模 矩阵的幂运算 解题思路 找规律 数学归纳…

CVE-2024-6387 分析

文章目录 1. 漏洞成因2. 漏洞利用前置知识2.1 相关 SSH 协议报文格式2.2 Glibc 内存分配相关规则 3. POC3.1 堆内存布局3.2 服务端解析数据时间测量3.3 条件竞争3.4 FSOP 4. 相关挑战 原文链接&#xff1a;个人博客 近几天&#xff0c;OpenSSH爆出了一个非常严重的安全漏洞&am…