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

news2024/11/25 4:19:42

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.coloradmin.cn/o/1626681.html

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

相关文章

Golang操作Redis

一. Redis介绍 1.1 简介 Redis是完全开源免费的&#xff0c;遵循BSD协议&#xff0c;是一个高性能的key-value数据库。 Redis与其它的key-value缓存产品有以下三个特点&#xff1a; Redis支持数据持久化&#xff0c;可以见内存中的数据报错在磁盘中&#xff0c;重启的时候可以…

OpenHarmony实战开发-按钮 (Button)

Button是按钮组件&#xff0c;通常用于响应用户的点击操作&#xff0c;其类型包括胶囊按钮、圆形按钮、普通按钮。Button做为容器使用时可以通过添加子组件实现包含文字、图片等元素的按钮。具体用法请参考Button。 创建按钮 Button通过调用接口来创建&#xff0c;接口调用有…

APISix如何配置gzip压缩、cache、跨域

网上查到的apisix的配置很多都很古老&#xff0c;要改配置文件。其实现在apisix都是使用插件方式实现各种配置&#xff0c;很方便。这里简单介绍下三个常用插件、gzip压缩、cache缓存和跨域插件。这里均使用apisix的Dashboard看板进行配置。 gzip压缩 1. 打开apisix看板&#…

Web-SpringBootWen

创建项目 后面因为报错&#xff0c;所以我把jdk修改成22&#xff0c;仅供参考。 定义类&#xff0c;创建方法 package com.start.springbootstart.Controller; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotati…

单细胞+RIP-seq项目文章| Cell ReportshnRNPU蛋白在小鼠精原干细胞池建立的关键作用

精原干细胞&#xff08;SSCs&#xff09;是负责精子发生的干细胞&#xff0c;具有自我更新和分化产生功能性精子的能力。SSCs的持续再生对于维持雄性生育力至关重要。然而&#xff0c;SSC池的发育起源尚不清楚。在哺乳动物中&#xff0c;SSCs源自名为 prospermatogonia&#xf…

基于JAVA实现的贪吃蛇小游戏

JAVA贪吃蛇小游戏实现: 贪吃蛇曾经在我们的童年给我们带来了很多乐趣。贪吃蛇这款游戏现在基本上没人玩了&#xff0c;甚至在新一代人的印象中都已毫无记忆了。。。但是&#xff0c;这款游戏可以在一定程度上锻炼自己的编程能力。 目前这个版本只是一个测试版本&#xff0c;所以…

AI:162-如何使用Python进行图像识别与处理深度学习与卷积神经网络的应用

本文收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一.如何使用Python进行图像识别与处理…

在Windows 10中如何关闭BitLocker加密?这里提供详细步骤

序言 BitLocker加密将有助于保持卷或闪存驱动器处于安全模式。但是&#xff0c;如果你不再需要BitLocker加密&#xff0c;你可以在Windows 10计算机上轻松删除BitLocker加密。在这里&#xff0c;我们将向你展示在Windows 10上删除/禁用BitLocker驱动器加密的四种方法。 通过控…

Qt/C++音视频开发71-指定mjpeg/h264格式采集本地摄像头/存储文件到mp4/设备推流/采集推流

一、前言 用ffmpeg采集本地摄像头&#xff0c;如果不指定格式的话&#xff0c;默认小分辨率比如640x480使用rawvideo格式&#xff0c;大分辨率比如1280x720使用mjpeg格式&#xff0c;当然前提是这个摄像头设备要支持这些格式。目前市面上有一些厂家做的本地设备支持264格式&am…

1688获得店铺所有商品API接口技术解析与应用实践

在电商领域&#xff0c;快速获取店铺所有商品信息对于商家和开发者来说至关重要。1688作为国内领先的B2B电商平台&#xff0c;提供了丰富的API接口供开发者使用&#xff0c;其中获得店铺所有商品API接口是其中之一。本文将深入解析该API接口的技术实现&#xff0c;并探讨其在实…

嵌入式中全栈工程师是怎么样的?

这两天有小伙伴问我,如何才能做到嵌入式全栈?我用visio软件画了一张图,为大家讲解。 此图为博主认为的嵌入式全栈,从硬件到软件全套技术栈,我们“从下往上”讲解。 1、首先是需要有原理图库,可以自己画,也可以从别人那里拷贝。有了原理图库,就开始画原理图。画原理图需…

​「Python大数据」词频数据渲染词云图导出HTML

前言 本文主要介绍通过python实现数据聚类、脚本开发、办公自动化。词频数据渲染词云图导出HTML。 一、业务逻辑 读取voc数据采集的数据批处理,使用jieba进行分词,去除停用词词频数据渲染词云图将可视化结果保存到HTML文件中二、具体产出 三、执行脚本 python wordCloud.p…

基于模糊控制的电动汽车锂电池SOC主动均衡电路MATLAB仿真模型

微❤关注“电气仔推送”获得资料&#xff08;专享优惠&#xff09; 模型简介 模型在 Matlab/Simulink仿真平台中搭建16节电芯锂电池电路模型&#xff0c;主要针对电动车锂电池组SOC差异性&#xff0c;采用模糊控制算法动态调节均衡电流&#xff0c;以减少均衡时间和能量损耗。…

OpenStack 云平台管理

目录 一、案例分析 1.1、案例概述 1.2、案例前置知识点 1&#xff09;关于浮动 IP 地址 2&#xff09;关于快照 1.3、案例环境 1&#xff09;本案例实验环境 2&#xff09;案例需求 3&#xff09;案例实现思路 二、案例实施 2.1、部署 OpenStack 2.2、创建…

WSL2无法ping通本地主机ip的解决办法

刚装完WSL2的Ubuntu子系统时&#xff0c;可能无法ping通本地主机的ip&#xff1a; WSL2系统ip&#xff1a; 本地主机ip&#xff1a; 在powershell里输入如下的命令&#xff1a; New-NetFirewallRule -DisplayName "WSL" -Direction Inbound -InterfaceAlias &quo…

反映工业发展质量与效益的主要指标有哪些

我国经济已由高速增长阶段转向高质量发展阶段&#xff0c;这是新时代我国经济发展的基本特征。推动高质量发展&#xff0c;是保持经济持续健康发展的必然要求&#xff0c;是适应我国社会主要矛盾变化和全面建成小康社会、全面建设社会主义现代化国家的必然要求&#xff0c;是遵…

解决Gson转Map时数值int、long等转为Double

今天尝试使用Gson&#xff0c;发现转Map时数值都转成了Double&#xff0c;百度无果后&#xff0c;通过查看源码&#xff0c;尝试可以通过自定义对象转数值策略来解决&#xff0c;特地记录一下&#xff1b; Gson默认采取将数值转换到Double的策略ToNumberPolicy.DOUBLE&#xf…

mysql的多表查询和子查询

多表查询&#xff1a;查询数据时&#xff0c;需要使用多张表来查询 多表查询分类&#xff1a; 1.内连接查询 2.外连接查询 3.子查询 笛卡尔积&#xff1a; create table class (id int primary key auto_increment,name varchar(10) ); create table student (id int primar…

2024软件测试面试题总结

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 关注公众号【互联网杂货铺】&#xff0c;回复 1 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 测试技术面试题 1、什么是兼容性测试&#xff1f;兼容性测试侧…

2024年Java JDK下载安装教程,附详细图文

文章目录 简介一、JDK的下载二、JDK的安装三、设置环境变量(不一定需要执行&#xff09; 简介 博主介绍&#xff1a;✌程序员徐师兄、7年大厂程序员经历。全网粉丝12w、csdn博客专家、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java技术领域和毕业项目实战✌ &#x1f34…