python基础之元组、集合和函数的定义与返回值

1.元祖

        1.元祖的定义

    元组的数据结构跟列表相似

    特征:有序、

  1. 有序:有(索引/下标/index) 正序、反序
  2. 标识符: ( ) 里面的元素是用英文格式的逗号分割开来
  3. 关键字:tuple
  4. 列表和元组有什么区别?

    元组是不可变的:程序在运行的时候,无法对其进行改变 -- 没有提供关键字、方法去操作它,没有增删改的操作

  5. 既然无法对其进行变化,那么为什么要有元组的存在?

    安全性考虑 -- 国内的省份(省、市) 变量,常量

    但凡是可以进行操作的数据,都存在安全隐患

示例:

        

tp = ()  # 定义一个空元组
print(type(tp))  # <class 'tuple'>

tp1 = (1, 2, 3, 4, 5)  # 定义一个有值的元组
print(tp1)

2.问题res是由tp1 和 tp2 拼接在一起的,还是额外生成的? -- 额外生成的一个新元组

tp1 = (1, 2, 3, 4)
tp2 = (100, 3.14)

res = tp1 + tp2
print(res)
print(type(res))

元组乘以int类型的数字的res1是打印两次tp1,还是额外生成一个新的元组?

tp1 = (1, 2, 3, 4)
tp2 = (100, 3.14)

res1 = tp1 * 2
print(res1)
print(type(res1))

怎么修改元祖?

先转换成列表,修改数据,然后在转化成元组

tp1 = (1, 2, 3, 4)

# 获取修改之前的内存地址
print(f"修改之前的内存地址: {id(tp1)}")

# 1.先转换成列表
lst1 = list(tp1)
# print(lst1)
# print(type(lst1))

# 2.修改数据
lst1.append(5)
# print(lst1)
# print(type(lst1))

# 3.然后在转化成元组
tp1 = tuple(lst1)  # 变量的重定义 -- 对变量进行重新赋值
# print(tp1)
# print(type(tp1))

# 获取修改之后的内存地址
print(f"修改之后的内存地址: {id(tp1)}")

# 问题:修改之前的tp1的内存地址和修改之后的一样么? 不一样,是一个新的元组,只是引用的变量名称是一样的,但是存放的内存地址不一样

2.集合

  集合的定义

定义:由不同的元素组成的一个数据结构,无序排列的

标识符:{ }

关键字:set

特征:无序,元素不能重复,集合和集合之间可以做运算

特征:

无序排列 -- 存放在内存地址之前是无序的

集合里面的元素不能重复 -- 自动去重



集合的操作:

      进行强制转换

        

set1 = {"欢迎", "来到", "秋殇", "老师", "的", "博客", "!"}

lst1 = list(set1)
print(type(lst1))
print(f"lst1中的第一个值:{lst1[0]}")  # 不确定、随机的

问题:如果转换完成后,连续打印,第一次的值和后面N次的值,是一样的么?

答:一样的,原理:存放内存地址之前,是随机的,但是一旦存放了,后续的内容都是固定的

集合的添加 -- add()
集合的删除 -- pop(随机删除,因为没有下标)、remove(删除指定的值).discard(提前准备好,想删除的值,删除多次,都不会报错)
# set1.pop()  # 随机删除,因为没有下标
# print(set1)

# set1.remove("秋殇")  # 删除指定的值,如果删除不存在的值,会报错
# set1.remove("秋殇")
# print(set1)

set1.discard("老师")  # 提前准备好,想删除的值,删除多次,都不会报错
set1.discard("老师")
print(set1)

集合的运算:

运算的方式:交集、并集、差集、交叉补集

交集:获取两个集合之间相同的部分 -- intersection

        

set1 = {"qs", "大大"}
set2 = {"qs", "dd"}

print(f"获取两个集合之间相同的部分: {set1.intersection(set2)}")  # 获取两个集合之间相同的部分: {'七夜老师'}

并集:合并两个集合,自动去重 -- union

差集:获取集合中,另一个集合没有的内容 -- difference

交叉补集

set3 = {"qsdd" "高", "富", "帅"}
set4 = {"qsdd", "矮", "矬", "穷"}

print(f"剔除公有的内容,留下双方独有的内容: {set3.symmetric_difference(set4)}")

3.函数

1.函数的定义

定义:将一段公式/逻辑代码定义在一个特定的标题(函数名称)下,通过一块,或者一行代码来执行固定好的逻辑, 而这些代码只有函数被调动的时候才会执行

通俗点:封装一些代码

核心点:函数的定义、函数的调用

函数的定义:封装好的代码,只有在调用的时候,才会执行 -- 定义函数的时候,不会执行函数内部的代码

函数的调用:语法:函数的名称() -- 调用函数,执行函数内部的代码

语法规则:

def 自定义的函数名称():
    封装的代码 ... ...

函数的参数:

定义函数的时候,可以在小括号里面定义一些参数

定义的参数,可以不给值,然后在调用函数的位置,进行传参

def demo1(name, age, addr):
    print(f"""
        =====demo1函数里面的参数=====
        name: {name}
        age: {age}
        addr: {addr}
    """)

demo1(age=18, name="qsdd", addr="cndn")

不定长传参

        单个*号的参数:args是默认的名称,可以随意修改 -- 元组类型

# def demo3(*args):
#     print(f"获取到的值:{args}")
#     print(f"获取值的类型: {type(args)}")
#     print(args[0])
#
#
# demo3(1, 2, 3, 4, 5)

两个*号:kwargs是默认的名称,可以随意修改 -- 字典类型

# def demo4(**kwargs):
#     print(f"获取到的值:{kwargs}")
#     print(f"获取值的类型: {type(kwargs)}")
#
#
# demo4(name="七夜老师", age=18, addr="湖南长沙")

函数的返回值

1.函数的内部可以写return返回值,或者不写

2.如果不写return,也可以执行,不会报错,但是接收到的值,还是 None

3.如果写了,可以把需要传递的值,传递给调用函数的地方,通过两种方式获取(print、变量)

4.写了return但是没有传值的情况下,获取到的值是 None

5.如果有return返回值的情况下,可以通过两种方式获取

# def add1():  # 函数的名称: add1
#     # 需要封装的代码
#     m = 1
#     n = 2
#     s = m + n
#     print(f"m + n 的结果:{s}")
#
#
# add1()

# 想获取s的值,然后进行 + 100的操作?
# print(s + 100)  # 函数的作用域问题 -- 后面的课程会讲,暂时不讲

# def add2():
#     m = 1
#     n = 2
#     s = m + n
#     # 不直接写print,因为无法传递数据
#     # 通过函数的返回关键字return,把数据传递给调用函数的地方
#     return s


# add2()
# 问题:此时调用函数,会不会打印s的值? -- 不会
# 因为:没有对获取到的s值,进行打印操作

# 方式一:直接通过print打印获取到函数返回值
# print(f"获取到函数内部的s:{add2()}")

# 方式二:通过变量接收函数的返回值,然后进行后续的操作
# res = add2()
# print(f"res + 100的值:{res + 100}")

# # 写了return但是没有传值的情况下,获取到的值是 None
# def add3():
#     m = 1
#     n = 2
#     s = m + n
#     return

# 如果不写return,也可以执行,不会报错,但是接收到的值,还是 None
# def add4():
#     m = 1
#     n = 2
#     s = m + n
#
#
# # 方式一:
# print(add4())
#
# # 方式二:
# res = add4()
# print(res)

# lst1 = [1, 2, 3]
# print(lst1.extend("qsdd"))

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

JavaEE 初阶篇-深入了解 I/O 高级流(缓冲流、交换流、数据流和序列化流)

&#x1f525;博客主页&#xff1a; 【小扳_-CSDN博客】 ❤感谢大家点赞&#x1f44d;收藏⭐评论✍ 文章目录 1.0 缓冲流概述 1.1 缓冲流的工作原理 1.2 使用缓冲流的步骤 1.3 字节缓冲流于字符缓冲流的区别 1.4 字节缓冲流的实例 1.5 字符缓冲流的实例 2.0 转换流概述 2.1 字符…

局部多项式近似与 AMPM 算法

kappa3; %已在您的代码中定义% 定义窗口大小 windowSize (2*kappa1);% 初始化梯度估计值 [rows, cols] size(wrappedPhase); phi_y zeros(rows, cols); phi_x zeros(rows, cols);% 遍历每个窗口 for m 1kappa:rows-kappafor n 1kappa:cols-kappa% 提取局部窗口Z_mn wrap…

Git--基础学习--面向企业--持续更新

一、基础学习 1.1基本命令 //查询基础信息 git config --global --list //选取合适位置创建 mkdir 文件名 //创建文件夹 //全局配置 git config --global user.email "****e***i" git config --global user.name "*** K****"//--------------------进入…

SHViT:具有内存高效宏设计的单头视觉Transformer

文章目录 摘要1、引言2、分析与方法2.1、宏观设计中的冗余分析2.2、微观设计中的冗余分析2.3、单头自注意力2.4、单头视觉转换器 3、实验3.1、实现细节3.2、SHViT在ImageNet-1K分类任务上的表现3.3、SHViT在下游任务中的表现3.4、消融研究 4、相关工作5、结论SHViT&#xff1a;…

python-opencv实现最近邻插值和双线性插值对图片上采样

使用背景 当我们需要把图像进行放大或者缩小的时候&#xff0c;第一反应是使用resize()实现。很多情况下&#xff0c;我们会调用最近邻插值和双线性插值去放大图片&#xff0c;当然要说没有分辨率的损失那是不可能的&#xff0c;只能说在放大图片的过程中尽可能增加了图片的分…

免费的一键伪原创工具,用来高效写文章真妙!

写文章是一件耗时间、费精力的事&#xff0c;遇到没有写作灵感的时候&#xff0c;写文章就像嚼蜡一样难受&#xff0c;但好在有免费的一键伪原创工具&#xff0c;它能帮助我们高效率实现自动写作文章&#xff0c;并且整个写作的过程我们无需思考内容怎么去写&#xff0c;是可以…

自动驾驶传感器篇: GNSSIMU组合导航

自动驾驶传感器篇&#xff1a; GNSS&IMU组合导航 1.GNSS1.1 GNSS 系统概述1.2 GNSS系统基本组成1. 空间部分&#xff08;Space Segment&#xff09;&#xff1a;2. 地面控制部分&#xff08;Ground Control Segment&#xff09;&#xff1a;3. 用户设备部分&#xff08;Use…

x86 64位的ubuntu环境下汇编(无优化)及函数调用栈的详解

1. 引言 为了深入理解c&#xff0c;决定学习一些简单的汇编语言。使用ubuntu系统下g很容易将一个c的文件编译成汇编语言。本文使用此方法&#xff0c;对一个简单的c文件编译成汇编语言进行理解。 2.示例 文件名&#xff1a;reorder_demo.cpp #include<stdio.h>typede…

摩尔定律仍在延续|从最新1.6nm工艺节点看芯片发展-2

2nm工艺的斗争还没结束&#xff0c;TSMC台积电就又公开宣布了1.6nm&#xff08;TSMC A16TM&#xff09;半导体工艺&#xff0c;太卷了&#xff01; TSMC A16TM技术采用领先的纳米片晶体管&#xff0c;并结合创新的背侧电源轨方案&#xff0c;计划于2026年投入生产。这种设计极…

【项目】YOLOv8/YOLOv5/YOLOv9半监督ssod火灾烟雾检测(YOLOv8_ssod)

假期闲来无事找到一份火灾烟雾数据集&#xff0c;自己又补充标注了一些&#xff0c;通过论文检索发现现在的火灾检测工作主要局限于对新场景的泛化性不够强&#xff0c;所以想着用半监督&#xff0c;扩充数据集的方法解决这个问题&#xff0c;所以本文结合使用现在检测精度较高…

成功案例丨守“鲜”有道 Fortinet为都乐筑就全球安全防护网

作为全球知名的跨国食品企业&#xff0c;都乐业务遍布各大洲。在各种新兴业务模式层出不穷的数字化时代&#xff0c;都乐面临着生产持续性、安全运营、供应链安全等严峻的网络安全挑战。通过采用Fortinet的FortiSIEM、FortiMail等系列Fortinet Security Fabric安全平台生态产品…

DaVinci Resolve Studio 19(达芬奇19调色剪辑)win/mac激活版

DaVinci Resolve Studio是一个结合专业的8k 编辑&#xff0c;颜色混合&#xff0c;视觉效果和音频后期制作的软件。只需点击一下&#xff0c;你就可以立即在编辑、混音、特效和音频流之间切换。此外&#xff0c;达芬奇解决(达芬奇)是一个多用户协作的解决方案&#xff0c;使编辑…

Swift - 基础语法

文章目录 Swift - 基础语法1. 常量1.1 只能赋值1次1.2 它的值不要求在编译时期确定&#xff0c;但使用之前必须赋值1次1.3 常量、变量在初始化之前&#xff0c;都不能使用 2. 标识符3. 常用数据类型4. 字面量4.1 布尔4.2 字符串4.3 整数4.4 浮点数4.5 数组4.6 字典 5. 类型转换…

OpenHarmony音视频—opus

简介 Opus是一种用于在互联网上进行交互式语音和音频传输的编解码器。它可以从低比特率窄带语音扩展到非常高的高品质立体声音乐。 下载安装 直接在OpenHarmony-SIG仓中搜索opus并下载。 使用说明 以OpenHarmony 3.1 Beta的rk3568版本为例 将下载的opus库代码存在以下路径&a…

OSPF的LSA详解

一、什么是LSA&#xff1f;LSA作用&#xff1f; 在OSPF协议中&#xff0c;LSA全称链路状态通告&#xff0c;主要由LSA头部信息&#xff08;LSA摘要&#xff09;和链路状态组成。部分LSA只有LSA头部信息&#xff0c;无链路状态信息。使用LSA来传递路由信息和拓扑信息&#xff0c…

2024全网最火的接口自动化测试,一看就会

&#x1f525; 交流讨论&#xff1a;欢迎加入我们一起学习&#xff01; &#x1f525; 资源分享&#xff1a;耗时200小时精选的「软件测试」资料包 &#x1f525; 教程推荐&#xff1a;火遍全网的《软件测试》教程 &#x1f4e2;欢迎点赞 &#x1f44d; 收藏 ⭐留言 &#x1…

网工内推 | 外企网工,思科认证优先,弹性工作,补贴多

01 淳华科技&#xff08;昆山&#xff09;有限公司 招聘岗位&#xff1a;网络工程师 职责描述&#xff1a; 1.全厂网络规划 2.Cisco交换机和路由器的配置 3.日常设备点检\维护\配置 4.网络设备的评估并做报告说明 任职要求&#xff1a; 1.具有一定的网络工作经验有Cisco或是其…

DNS域名系统 | unbound

目录 DNS 命名空间和域名结构 DNS的命名空间的结构: 域名服务器的分类&#xff1a; ​编辑 DNS 资源记录 常见type: DNS报文结构 请求报文&#xff1a; 响应报文&#xff1a; 解析类型 递归查询 迭代查询 DNS劫持 DNS劫持方法&#xff1a; 防御措施 DNS服务部署…

05_Scala运算符

文章目录 **1.Scala运算符****2.scala中没有 --等语法****3.逻辑运算符和Java完全相同****4.scala认为万物皆对象** 1.Scala运算符 Scala底层 使用的是equals() 程序员比较两个量的时候&#xff0c;谁来没事比较内存地址&#xff1f; Java中引用数据类型比较地址&#xff0…

Allure精通指南(05)定制化报告内容(环境信息、图标、缺陷类别)

文章目录 Allure 自定义测试环境信息Allure 自定义缺陷类别信息Allure 自定义图标步骤一步骤二步骤三 Allure 自定义测试环境信息 步骤 1&#xff1a;创建 environment.properties 文件 在项目根目录或任何其他不会被--clean-alluredir参数影响的目录下创建 environment.proper…
最新文章