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

Python的函数(补充浅拷贝和深拷贝)

一、定义

函数的定义:实现【特定功能】的代码块。

形参:函数定义时的参数,没有实际意义

实参:函数调用/使用时的参数,有实际意义

函数的作用:

    1. 简化代码
    2. 提高代码重用性
    3. 便于维护和修改
    4. 提高代码的可扩展性

函数的三要素:

    1. 功能 len() max() sum()
    2. 参数 s.clear() s.append('abc')
    3. 返回值 s.sort() s1 = sorted(s)

函数定义的语法格式:

函数的分类:

    1. 从定义角度—— 内置函数【别人写好的,你直接用】 自定义函数
    2. 从参数角度——无参函数 有参函数
    3. 从返回值角度——无返函数 None 有返函数

函数的调用/使用:

    1. 无返函数 函数名()
    2. 有返函数 方法1:print(函数名())
    3. 方法2:变量名 = 函数名()
def my_fun():print("这是我的函数")print(my_fun)
# 输出结果是   <function my_fun at 0x000002AA6DF7A3E0>
# 说明函数名是一个内存地址# 无返函数直接调用
my_fun()def you_fun():return 100# 有返函数,输出调用
print(you_fun())# 有返函数,使用变量接收调用
ret = you_fun()
print(ret)

二、函数的参数传递

函数在进行参数传递的时候,分为:位置参数、关键字参数、默认参数、位置不定长参数、关键字不定长参数。

位置参数:

传递参数时应该 和 定义时的参数 保持位置和数量一 一对应。

def fun(a, b, c):print(a, b, c)# fun()
# TypeError: fun() missing 3 required positional arguments: 'a', 'b', and 'c'fun(1, 2, 3)
#运行结果 1 2 3
fun('张三', 18, '男')
#运行结果 张三 18 男
fun([1,2,3], (4,5,6), {7,8,9})
# 运行结果 [1, 2, 3] (4, 5, 6) {8, 9, 7}

 关键字参数

调用函数传递参数时,按照 参数名=值 的方式,传参的顺序可以和定义参数的顺序不一致。

def fun(name, age, sex):print(name, age, sex)# 关键字参数
fun(name='张三', age=18, sex='男')
fun(age=18, sex='男', name='张三')

默认参数:

在函数定义时给参数设置默认值,那么在函数调用时,若不传参就是用默认值,若传参就是用传参的值。

def fun(name='张三', age=18, sex='男'):print(name, age, sex)# 默认参数
fun()
fun('李四')
fun(age=66)
fun('小明', 30)
fun('小华', 23, '女')

位置不定长参数:

在定义函数时参数名前加 * ,也就是def fun( *args ),那么在传参的时候就可以传若干个位置参数。

将参数打包成——元组。

def fun(*num):print(num)
fun(1)
fun(1,2)
fun(1,2,3,4,5,6)# 问:在一个函数中,位置不定长参数,可以有两个吗?
# 不允许
# 再问:一旦定义了位置不定参参数,是不是就不可以定义其他参数了呢?
# 答:可以定义,但是传参时必须是关键字参数

关键字不定长参数:

在定义函数参数名前加 ** ,也就是 def fun( **kwargs ),那么传参的时候就可以传若干个 关键字参数。

将参数打包成——字典。

def fun(**kwargs):print(kwargs)fun(a=12, b=13, c=15)
fun(姓名='张三', 年龄=18, 性别='男')

 三、函数的返回值

  1. 如果函数的运行结果想在函数外使用,就需要设置返回值。
  2. 使用关键字 return 进行返回。
  3. return 可以在函数中出现多次,但是只执行 1 次,遇见return返回值并结束函数。
  4. 与C语言不同,python中的return可以返回一个值或多个值,这个时候将返回的多个值到打包成一个元组。
def fun(*num):my_sum = 0for i in num:my_sum += ireturn my_sumret = fun(3,7,2,9,8)
print(ret, type(ret))

 四、递归函数

递归函数有三要素:

  1. 边界条件/基线条件 跳出/结束递归的条件
  2. 递归返回段 满足结束条件时,返回
  3. 递归前进段 不满足结束条件时,前进/继续递归
def rec(n):"""求一个数n的阶乘:param n: 接收到一个整型值:return: 计算的阶乘结果"""if n==1:return 1else:return n * rec(n-1)n = 5
print(rec(n))

五、函数中变量的作用域

变量的作用域:是指变量能起作用的范围,根据作用范围大小不同分为全局变量和局部变量。

  1. 全局变量:定义在函数外,作用范围是整个程序,程序结束时全局变量声明周期结束。
  2. 局部变量:定义在函数代码块里或者函数的参数里,作用范围是整个函数,函数执行结束时局部变量生命周期结束。

六、函数嵌套

函数嵌套:在一个函数的内部 还嵌套定义了 另外一个函数。

外部的我们称之为 外函数,内部的我们称之为 内函数。

x = 100
def out_fun():# global xx = 200def in_fun():# global xx = 300print(f"内函数中输出{x}")in_fun()print(f"外函数中输出{x}")out_fun()
print(f"函数外输出{x}")

七、闭包函数

什么是闭包函数?——如果内函数中使用了外函数的局部变量,并且外函数把内函数返回的过程就叫闭包。

形成闭包的条件:

  1. 函数嵌套
  2. 将内函数作为返回值返回
  3. 内函数必须使用外函数的局部变量
def out():x=200def in1():return x+100return in1
print(out()())

八、拷贝

 使用深拷贝时,需要引入copy

使用浅拷贝时,可直接使用copy()

l1 = [1, 2, 3, ['a', 'b', 'c']]
# 浅拷贝
l2 = l1.copy()
# 深拷贝
import copy
l3 = copy.deepcopy(l1)
print("修改前")
print(l1)
print(l2)
print(l3)
# 修改值
l1[0] = 66
l2[1] = 88
l3[2] = 99
print("修改值后")
print(l1)
print(l2)
print(l3)
# 修改可变对象
l1[3][0] = 'hqyj'
l2[3][1] = 'hello'
l3[3][2] = 'xxxx'
print("修改可变对象后")
print(l1)
print(l2)
print(l3)

浅拷贝

浅拷贝:将原列表的值复制一份,同时引用而不复制原列表的【可变对象】,原列表修改值,新列表值不变;

原列表修改可变对象,新列表可变对象也变

深拷贝

深拷贝:将原列表直接复制一份,生成一个新对象[列表],和原列表的内存地址不一样,原列表修改,新列表不变

实际过程中,浅拷贝使用多,因为深拷贝完全复制一个新对象会存在资源浪费。

九、Python函数练习

Python函数练习-CSDN博客

相关文章:

Python的函数(补充浅拷贝和深拷贝)

一、定义 函数的定义&#xff1a;实现【特定功能】的代码块。 形参&#xff1a;函数定义时的参数&#xff0c;没有实际意义 实参&#xff1a;函数调用/使用时的参数&#xff0c;有实际意义 函数的作用&#xff1a; 简化代码提高代码重用性便于维护和修改提高代码的可扩展性…...

oracle查询字段类型长度等字段信息

1.查询oracle数据库的字符集 SELECT * FROM NLS_DATABASE_PARAMETERS WHERE PARAMETER NLS_CHARACTERSET; 2.查询字段长度类型 SELECT * FROM user_tab_columns WHERE table_name user AND COLUMN_NAME SNAME 请确保将user替换为您想要查询的表名。sname为字段名 这里的字…...

C语言 | Leetcode C语言题解之第559题N叉树的最大深度

题目&#xff1a; 题解&#xff1a; /*** Definition for a Node.* struct Node {* int val;* int numChildren;* struct Node** children;* };*/int maxDepth(struct Node* root) {if (!root) {return 0;}int depth 0;// 创建空队列const int qCap 10e4 1;str…...

光流法(Optical Flow)

一、简介 光流法&#xff08;Optical Flow&#xff09;是一种用于检测图像序列中像素运动的计算机视觉技术。其基于以下假设&#xff1a; 1.亮度恒定性假设&#xff1a;物体在运动过程中&#xff0c;其像素值在不同帧中保持不变。 2.空间和时间上的连续性&#xff1a;相邻像素之…...

Rancher的安装

1. 概览 1.1 用户界面优势 Rancher 提供了一个直观的图形用户界面&#xff08;GUI&#xff09;。对于不熟悉 Kubernetes 复杂的命令行操作&#xff08;如使用kubectl&#xff09;的用户来说&#xff0c;通过 Rancher 的界面可以方便地进行资源管理。例如&#xff0c;用户可以在…...

【Linux】获得同一子网下当前在线设备IP/Latency/MAC 通过nmap指定CIDR扫描当前在线设备

【Linux】获得同一子网下当前在线设备IP/Latency/MAC 通过nmap指定CIDR扫描当前在线设备 通过路由器的后台&#xff0c;查看当前在线设备&#xff0c;受到网卡版本的影响&#xff0c;有时会有部分设备看不见MAC和分配的IP。此时&#xff0c;可以借助命令行工具扫描子网下所有连…...

Ubuntu22.04安装DataEase

看到DataEase的驾驶舱&#xff0c;感觉比PowerBI要好用一点&#xff0c;于是搭建起来玩玩。Dataease推荐的操作系统是Ubuntu22.04/Centos 7。 下载了Ubuntu22.04和DataEase 最新版本的离线安装包 一.安装ubuntu22.04 在安装的时候&#xff0c;没有顺手设置IP地址信息&#xff…...

Taro React-Native IOS 打包发布

http网络请求不到 配置 fix react-native facebook::flipper::SocketCertificateProvider‘ (aka ‘int‘) is not a function or func_rn运行debug提示flipper-CSDN博客 Xcode 15&#xff08;iOS17&#xff09;编译适配报错_no template named function in namespace std-CS…...

【卷积神经网络CNN】基于深度学习动物图像识别系统(完整系统源码+数据库+开发笔记+详细部署教程+启动教程)✅

目录 【卷积神经网络CNN】基于深度学习动物图像识别系统&#xff08;完整系统源码数据库开发笔记详细部署教程启动教程&#xff09;✅ 一、项目背景 二、项目目标 三、项目创新点 四、项目功能 五、开发技术介绍 六、数据库设计 七、启动步骤 八、项目功能展示 九、开…...

图像处理椒盐噪声

椒盐噪声&#xff0c;也称为脉冲噪声&#xff0c;是图像中经常见到的一种噪声。它是一种随机出现的白点或者黑点&#xff0c;可能是亮的区域有黑色像素或是在暗的区域有白色像素&#xff08;或是两者皆有&#xff09;。这些白点和黑点会在图像中随机分布&#xff0c;导致图像中…...

推荐一款完全开源的多端仓库管理系统

简介 模块 安装 UI展示 开源地址 今天给大家介绍一款完全开源的仓库管理系统&#xff0c;本系统采用Python语言开发。 简介 该库存管理系统是目前福特亚太区售后物流仓储供应链流程。离开福特后&#xff0c;开始了这个项目。为了帮助一些有需要的人。OneAPP 理念。支持扫…...

python 爬虫 入门 六、Selenium

Selenium本来是一个自动测试工具&#xff0c;用于模拟用户对网站进行操作。在爬虫领域也有其用处。 一、下载安装Selenium及附属插件 pip install Selenium 安装完成后还需要安装一个浏览器驱动&#xff0c;来让python能启动浏览器。 如果是Edge或者其他基于Chromium的浏览器…...

ReactPress:重塑内容管理的未来

ReactPress Github项目地址&#xff1a;https://github.com/fecommunity/reactpress 欢迎提出宝贵的建议&#xff0c;欢迎一起共建&#xff0c;感谢Star。 ReactPress&#xff1a;重塑内容管理的未来 在当今信息爆炸的时代&#xff0c;一个高效、易用的内容管理系统&#xff0…...

w035基于web的学科竞赛管理

&#x1f64a;作者简介&#xff1a;拥有多年开发工作经验&#xff0c;分享技术代码帮助学生学习&#xff0c;独立完成自己的项目或者毕业设计。 代码可以查看文章末尾⬇️联系方式获取&#xff0c;记得注明来意哦~&#x1f339;赠送计算机毕业设计600个选题excel文件&#xff0…...

Java:JVM

1.JVM内存区域的划分 一个Java写的程序跑起来,就得到了一个Java进程 JVM 上面运行的字节码指令; 进程:操作系统资源分配的基本单位; 内存区域的划分: 1.程序计数器 在内存空间里(比较小的空间),保存了下一个要执行的指令的内存地址(元数据区的地址); 这里的"下一条…...

Windows下mysql数据库备份策略

Windows下mysql的增量备份和全量备份&#xff0c;并利用schtasks设置定时任务执行bat脚本。 一、备份要求 序号 备份类型 备份频次 备份时间 1 增量备份 每周一-每周六各一次 18:00:00 2 全量备份 每周日一次 18:00:00 二、备份方法 2.1增量备份 2.1.1准备工作…...

基于SSM的校园美食交流系统【附源码】

基于SSM的校园美食交流系统 效果如下&#xff1a; 管理员主页面 用户主页面 美食信息页面 美食资讯页面 修改密码页面 论坛中心页面 研究背景 随着高校信息化建设的不断推进&#xff0c;校园生活日益丰富多样&#xff0c;学生对于美食的需求与探索也愈发旺盛。然而&#xff…...

2024 年Postman 导入和导出 cURL 命令图文教程

Postman 导入和导出 cURL 命令图文教程...

ArcGIS从Excel表格文件导入XY数据并定义坐标系与投影的方法

本文介绍在ArcMap软件中&#xff0c;从Excel表格文件中批量导入坐标点数据&#xff0c;将其保存为.shp矢量格式&#xff0c;并定义坐标系、转为投影坐标系的方法。 已知我们有一个Excel表格文件&#xff08;可以是.xls、.xlsx、.csv等多种不同的表格文件格式&#xff09;&#…...

【vue】echarts地图添加蒙版图片,多图层地图实现天气信息展示

实现原理&#xff1a;多层图层叠加实现复杂的信息展示。 <template><div class"wrapper"><el-drawertitle"天气信息":modal"iszz":visible.sync"weatherinfo":direction"direction"><drawer:labelnam…...

Admin.Net中的消息通信SignalR解释

定义集线器接口 IOnlineUserHub public interface IOnlineUserHub {/// 在线用户列表Task OnlineUserList(OnlineUserList context);/// 强制下线Task ForceOffline(object context);/// 发布站内消息Task PublicNotice(SysNotice context);/// 接收消息Task ReceiveMessage(…...

React Native在HarmonyOS 5.0阅读类应用开发中的实践

一、技术选型背景 随着HarmonyOS 5.0对Web兼容层的增强&#xff0c;React Native作为跨平台框架可通过重新编译ArkTS组件实现85%以上的代码复用率。阅读类应用具有UI复杂度低、数据流清晰的特点。 二、核心实现方案 1. 环境配置 &#xff08;1&#xff09;使用React Native…...

跨链模式:多链互操作架构与性能扩展方案

跨链模式&#xff1a;多链互操作架构与性能扩展方案 ——构建下一代区块链互联网的技术基石 一、跨链架构的核心范式演进 1. 分层协议栈&#xff1a;模块化解耦设计 现代跨链系统采用分层协议栈实现灵活扩展&#xff08;H2Cross架构&#xff09;&#xff1a; 适配层&#xf…...

select、poll、epoll 与 Reactor 模式

在高并发网络编程领域&#xff0c;高效处理大量连接和 I/O 事件是系统性能的关键。select、poll、epoll 作为 I/O 多路复用技术的代表&#xff0c;以及基于它们实现的 Reactor 模式&#xff0c;为开发者提供了强大的工具。本文将深入探讨这些技术的底层原理、优缺点。​ 一、I…...

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的“no matching...“系列算法协商失败问题

【SSH疑难排查】轻松解决新版OpenSSH连接旧服务器的"no matching..."系列算法协商失败问题 摘要&#xff1a; 近期&#xff0c;在使用较新版本的OpenSSH客户端连接老旧SSH服务器时&#xff0c;会遇到 "no matching key exchange method found"​, "n…...

Vue ③-生命周期 || 脚手架

生命周期 思考&#xff1a;什么时候可以发送初始化渲染请求&#xff1f;&#xff08;越早越好&#xff09; 什么时候可以开始操作dom&#xff1f;&#xff08;至少dom得渲染出来&#xff09; Vue生命周期&#xff1a; 一个Vue实例从 创建 到 销毁 的整个过程。 生命周期四个…...

从物理机到云原生:全面解析计算虚拟化技术的演进与应用

前言&#xff1a;我的虚拟化技术探索之旅 我最早接触"虚拟机"的概念是从Java开始的——JVM&#xff08;Java Virtual Machine&#xff09;让"一次编写&#xff0c;到处运行"成为可能。这个软件层面的虚拟化让我着迷&#xff0c;但直到后来接触VMware和Doc…...

解析两阶段提交与三阶段提交的核心差异及MySQL实现方案

引言 在分布式系统的事务处理中&#xff0c;如何保障跨节点数据操作的一致性始终是核心挑战。经典的两阶段提交协议&#xff08;2PC&#xff09;通过准备阶段与提交阶段的协调机制&#xff0c;以同步决策模式确保事务原子性。其改进版本三阶段提交协议&#xff08;3PC&#xf…...

AD学习(3)

1 PCB封装元素组成及简单的PCB封装创建 封装的组成部分&#xff1a; &#xff08;1&#xff09;PCB焊盘&#xff1a;表层的铜 &#xff0c;top层的铜 &#xff08;2&#xff09;管脚序号&#xff1a;用来关联原理图中的管脚的序号&#xff0c;原理图的序号需要和PCB封装一一…...

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法

用神经网络读懂你的“心情”:揭秘情绪识别系统背后的AI魔法 大家好,我是Echo_Wish。最近刷短视频、看直播,有没有发现,越来越多的应用都开始“懂你”了——它们能感知你的情绪,推荐更合适的内容,甚至帮客服识别用户情绪,提升服务体验。这背后,神经网络在悄悄发力,撑起…...