【Python数据魔术】:揭秘类型奥秘,赋能代码创造

news2024/11/27 17:41:13

文章目录

      • 🚀一.运算符
        • 🌈1. 算术运算符
        • 🌈2. 身份运算符
        • 🌈3. 成员运算符
        • ⭐4. 增量运算符
        • ⭐5. 比较运算符
        • ⭐6. 逻辑运算符
      • 🚀二.可变与不可变
      • 🚀三.字符串转义
      • 🚀四.编码与解码
        • 💥1. 基础使用
      • 🚀五.进制转化
        • 💥1.python进制转化
      • 🚀六.深浅拷贝(复制)
        • ❤️1. 浅拷贝
        • ❤️2. 深拷贝
      • 🚀七.运算升级
      • 🚀八.常用方法
      • 🚀九.操作扩展

在这里插入图片描述

🚀一.运算符

🌈1. 算术运算符

下面以a=10 ,b=20为例进行计算

运算符描述实例
+两个对象相加 a + b 输出结果 30
-得到负数或是一个数减去另一个数 a - b 输出结果 -10
*两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/x除以y b / a 输出结果 2
//向下取整返回商的整数部分 9//2 输出结果 4 , 9.0//2.0 输出结果 4.0
%取模(余)返回除法的余数 b % a 输出结果 0
**返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
🌈2. 身份运算符
  • 身份运算符
运算符描述详解
is同一性运算符变量ID是否相同,ID即变量的唯一标识,变量值可能相同但ID不一定相同
is not非同一性判断两个变量的引用是否来之不同对象
  • 使用is注意python对于小整数使用对象池存贮问题(交互式模式或者说命令行模式)
"""
1.举个例子,在python命令行模式下:为什么同样值a,b与c,d的结果却不一样呢?
"""
>>> a = 1000
>>> b = 1000
>>> a is b
False
>>> c = 10
>>> d = 10
>>> c is d
True

# 注意,因为python对小整数在内存中直接创建了一份,不会回收,所有创建的小整数变量直接从对象池中引用即可。
# 但是注意Python仅仅对比较小的整数对象进行缓存(范围为范围[-5, 256])缓存起来,而并非是所有整数对象。
# 也就说只有在这个[-5,256]范围内创建的变量值使用is比较时候才会成立。

  • 而保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化。即使整数超过256,使用is也是成立的。
  • 使用is注意python关于字符串的intern机制存储
# 注意: python中创建两个内容一样的变量时(变量名不一样),
#       一般都会在内存中分配两个内存地址(id地址)分别给这两个变量。
#       即两个变量的内容虽然一样,但是变量的引用地址不一样。
#       所以两个变量使用==比较成立,但是使用 is比较不成立。

# 但是在python中有两个意外情况:
# 1.使用python命令行时对于小整数[-5,256]区间内的整数,python会创建小整数对象池,这些对象一旦创建,
#     就不会回收,所有新创建的在这个范围的整数都是直接引用他即可。
#     所以造成在[-5,256]区间内的整数不同变量只要值相同,引用地址也相同。
#     此范围外的整数同样遵循新建一个变量赋予一个地址。

# 2.python中虽然字符串对象也是不可变对象,但python有个intern机制,
#     简单说就是维护一个字典,这个字典维护已经创建字符串(key)和它的字符串对象的地址(value),
#     每次创建字符串对象都会和这个字典比较,没有就创建,重复了就用指针进行引用就可以了。
#     相当于python对于字符串也是采用了对象池原理。
#     (但是注意:如果字符串(含有空格),不可修改,没开启intern机制,不共用对象。
#     比如"a b"和"a b",这种情况使用is不成立的形式 只有在命令行中可以。
#     使用pycharm同样是True,因为做了优化)
    

# 交互式模式(命令行模式)
>>> a ='abc'   #没有空格内容一样的两个变量,在命令行模式下is 结果True
>>> b = 'abc'
>>> a ==b
True
>>> a is b
True
>>> c ='a b '   #有空格内容一样的两个变量,在命令行模式下is 结果false
>>> d= 'a b '
>>> c ==d
True
>>> c is d
False

# pycharm自己实践
🌈3. 成员运算符
运算符描述
in如果在指定序列中找到值就返回True,否则返回False
not in如果在指定序列中没有找到值就返回True,否则返回False
str1 = [1, 2, 3, '哈哈哈']

print(1 in str1)  # True
print(1 not in str1)  # False

在这里插入图片描述

⭐4. 增量运算符
运算符实例
+=c += a 等效于 c = c + a
-=c -= a 等效于 c = c - a
*=c *= a 等效于 c = c * a
/=c /= a 等效于 c = c / a
%=c %= a 等效于 c = c % a
**=c ** = a 等效于 c = c ** a
//=c //= a 等效于 c = c // a
a = 1

a += 1  # 展开形式:a = a + 1

print(a)  # 2

在这里插入图片描述

⭐5. 比较运算符
运算符描述
==比较两个对象的值是否相同,这里要与is区别出来,==是不识别ID的
!=比较两个对象值是否不相同
>大于
<小于
>=大于等于
<=小于等于
print(2 > 1)  # True

# 比较结果为布尔值(True, False)
⭐6. 逻辑运算符
运算符逻辑表达式描述
andx and y同时满足x和y两个条件返回True,否则返回False
orx or y只需要满足x或y中的任意一个条件就返回True,两个都不满足时返回False
notnot x满足条件x时返回False,不满足条件x时返回True
  • 优先级: not and or
a = 1
b = 1
c = 2

# and 两边为真则为真,其余情况为假
print(a > 0 and a < c)  # True
print(a > 1 and a < c)  # False

# or 两边为假则为假, 其余情况为真
print(a > 0 and a < b)  # False
print(a == 1 and a < c)  # True

# not: 取反
print(not c < a)  # True

# 优先级: not and or
a = 1
b = 1
c = 2

print(a > 1 and c < 3 or not a == 1) # False

在这里插入图片描述

🚀二.可变与不可变

  • 不可变(immutable):数值类型(int, bool, float,complex), 字符串(str),元组(tuple)
  • 可变(mutable):列表(list), 集合(set),字 典(dict)

🚀三.字符串转义

# 字符前存在\,在特定情况下字符就不再表示本身的意思

常见:

符号解释案例
\n换行符print(‘s\nd’)
\t水平制表符print('ss\t’dd)
\b退格(删除一格)print(‘帅 \b 不帅’)
\r当前位置移到本行开头print(‘d\rhahahs’)
\\反斜杠print(‘\\’)
\‘’一个双引号
\0一个空格符
\a系统提示音(交互界面)

字符串前面加上r就可以防止转义

# --- 交互界面 ---
>>> print('a\000c')
a c
>>> print('a\0c')
a c

🚀四.编码与解码

💥1. 基础使用
统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。
统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

encode()decode() 是常用的字符串编码和解码方法,用于将 Unicode 字符串按照指定的编码格式转换为二进制数据,并将二进制数据按照指定的编码格式解析为 Unicode 字符串。

下面是两个方法的详细说明:

  1. encode([encoding='utf-8', errors='strict'])

    该方法用于将 Unicode 字符串进行编码,生成一个包含了字符编码后的字节串对象。其中,可选参数 encoding 表示指定的字符集,如果不指定则默认采用 utf-8 编码;errors 参数用于设置错误处理方式,取值范围为 'strict''ignore''replace'

    示例代码如下:

s = "Hello, 你好"
b = s.encode(encoding="utf-8", errors="strict")
print(b)    # 输出: b'Hello, \xe4\xbd\xa0\xe5\xa5\xbd'

在这里插入图片描述

  1. decode([encoding='utf-8', errors='strict'])

    该方法用于将已经编码的二进制数据解码为 Unicode 字符串。其中,可选参数 encoding 表示待解码的字符编码,如果不指定,则默认采用 utf-8 解码;errors 参数用于设置错误处理方式,取值范围为 'strict''ignore''replace'

    示例代码如下:

b = b'Hello, \xe4\xbd\xa0\xe5\xa5\xbd'
s = b.decode(encoding="utf-8", errors="strict")
print(s)    # 输出:Hello, 你好

在这里插入图片描述

需要注意的是,字符串编码和解码涉及到多种字符编码方式和错误处理方式,如果不正确地进行设置和使用,可能会导致字符集转换错误、乱码等问题。因此,在实际开发中,应该根据具体情况选择合适的编码和解码方式,并对数据的合法性进行严格的校验和处理。

🚀五.进制转化

💥1.python进制转化

在 Python 中,可以使用内置的 bin()oct()hex() 函数将十进制数转化为二进制、八进制和十六进制字符串。

示例代码如下:

dec = 255

# 十进制转二进制
bin_str = bin(dec)
print(bin_str)   # 输出 '0b11111111'

# 十进制转八进制
oct_str = oct(dec)
print(oct_str)   # 输出 '0o377'

# 十进制转十六进制
hex_str = hex(dec)
print(hex_str)   # 输出 '0xff'

在这里插入图片描述

需要注意的是,这些函数返回的结果都是字符串类型,并且带有对应进制的前缀,即 '0b' 表示二进制,'0o' 表示八进制,'0x' 表示十六进制。如果需要去除前缀并获取整数值,可以使用 int() 函数。

以下是一个示例代码:

# 字符串转整数(删除前缀 -- 通过切片处理)
int_val = int(bin_str[2:], 2)
print(int_val)   # 输出 255

int_val = int(oct_str[2:], 8)
print(int_val)   # 输出 255

int_val = int(hex_str[2:], 16)
print(int_val)   # 输出 255

在这里插入图片描述

如上所示,使用 int() 函数时可以指定第二个参数 base 来指定进制,例如 base=2 表示二进制,base=8 表示八进制,base=16 表示十六进制。在实际应用中,可以根据需要选择合适的函数和参数来进行进制转换。

# ord() 是 Python 内置函数之一,用于将ASCII字符转换为对应的 Unicode 码点。具体而言,ord() 接受一个字符串参数,表示要转换为码点的字符,然后返回该字符所对应的 Unicode 码点。
# 将字符转换为 Unicode 编码
print(ord('A'))    # 输出 65
print(ord('a'))    # 输出 97
print(ord('€'))   # 输出 8364

# chr() 是 Python 内置函数之一,用于将 Unicode 码点转换为对应的ASCII字符。具体而言,chr() 接受一个整数参数,表示 Unicode 码点(介于 0 到 0x10ffff 之间),并返回与该码点相对应的字符。
# 将 Unicode 编码转换为字符
print(chr(65))    # 输出 'A'
print(chr(97))    # 输出 'a'
print(chr(8364))  # 输出 '€'

在这里插入图片描述

🚀六.深浅拷贝(复制)

❤️1. 浅拷贝

外层不受影响,内层会受影响

l1 = [1234, 5678, 910]

l2 = ['a', l1]

l3 = l2.copy()

l1.append('帅')

>>> id(l1)
1750917116360
>>> id(l2)
1750917140744
>>> id(l2[1])
1750917116360
# 内层id地址相同

print(id(l2))  # 2429073232384
print(id(l2[1]))  # 2104199485056
print(id(l3))  # 2429073240128
print(id(l3[1]))  # 2104199485056

# 浅复制 外层不同,内层id相同
❤️2. 深拷贝

内外层都不影响

import copy
l1 = [1234, 5678, 910]

l2 = ['a', l1]

l4 = copy.deepcopy(l2)

l1.append('帅')

print(id(l1))  # 1633334532096
print(id(l2))  # 1633334532352
print(id(l4))  # 1633334448384
print(id(l2[1]))  # 1633334532096

print(id(l2[0]))  # 1633303890928
print(id(l4[0]))  # 1633303890928
print(id(l4[1]))  # 1633334532672

l2[0] = 1234
print(id(l4[0]))  # 外层地址不同
print(id(l2[0]))  

# 内外层都不同

🚀七.运算升级

运算符Python 表达式结果描述支持的数据类型
+[1, 2] + [3, 4][1, 2, 3, 4]合并字符串、列表、元组
*‘Hi!’ * 4[‘Hi!’, ‘Hi!’, ‘Hi!’, ‘Hi!’]复制字符串、列表、元组
in3 in (1, 2, 3)True元素是否存在字符串、列表、元组、字典
not in4 not in (1, 2, 3)True元素是否不存在字符串、列表、元组、字典

注意,in在对字典操作时,判断的是字典的键而不是值


🚀八.常用方法

函数名描述
sum(item)计算容器中元素值的和
len(item)计算容器中元素个数
max(item)返回容器中元素最大值
min(item)返回容器中元素最小值
del(item)删除变量
# 当然还有 id,type这些常见方法

# isinstance(x, A_tuple) --- 判断 x 是否是 A_tuple类型;注意A_tuple也可以是元组包多个,案例如下:

print(isinstance('a', list)) # False

# isinstance(x, (A, B, ...))  相当于isinstance(x, A) or isinstance(x, B) or ...

在这里插入图片描述


🚀九.操作扩展

链式赋值

a = b = c = [1, 2, 3, 4]

# 其id相同,引用的同一组数据
# 改变其中一组, 另外一组也会改变

序列解包

a = [1, 2]
b, c = a
# a--1   b--2

# 注意: 常规解包, 多少个元素就需要多少变量去解


demo = [1, 2, 3, 4]
data, *lets = demo

# data -- 1   lets -- [2, 3, 4]

# 注意: 这里利用了不定长参数中的 * , 不限接收数据多少

交换变量

a = 1
b = 2

b, a = a, b
# a -- 2    b -- 1

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

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

相关文章

SpringBoot 异常配置

系统异常处理 创建异常处理器类&#xff0c;类上添加ControllerAdvice注解。 package com.soft.exception;import org.springframework.web.bind.annotation.ControllerAdvice; import org.springframework.web.bind.annotation.ExceptionHandler; import org.springframewor…

Java的集合框架总结

Map接口和Collection接口是所有集合框架的父接口&#xff1a; Collection接口的子接口包括&#xff1a;Set接口和List接口 Map接口的实现类主要有&#xff1a;HashMap、TreeMap、Hashtable、ConcurrentHashMap以及Properties等 Set接口的实现类主要有&#xff1a;HashSet、Tr…

【数据结构】二叉树:一场关于节点与遍历的艺术之旅

专栏引入 哈喽大家好&#xff0c;我是野生的编程萌新&#xff0c;首先感谢大家的观看。数据结构的学习者大多有这样的想法&#xff1a;数据结构很重要&#xff0c;一定要学好&#xff0c;但数据结构比较抽象&#xff0c;有些算法理解起来很困难&#xff0c;学的很累。我想让大家…

数据结构之链表的经典笔试题

找往期文章包括但不限于本期文章中不懂的知识点&#xff1a; 个人主页&#xff1a;我要学编程(ಥ_ಥ)-CSDN博客 所属专栏&#xff1a;数据结构&#xff08;Java版&#xff09; 目录 203. 移除链表元素 206. 反转链表 876. 链表的中间节点 面试题 02.02. 返回倒数第k个节点 …

零基础非科班也能掌握的C语言知识22 预处理详解(完结)

预处理详解 1.预处理符号2.#define 定义常量3.#define 定义宏4.带有副作用的宏参数5.宏替换的规则6.宏函数的对比6.1 例子6.1 .16.1.26.1.3 7.命名约定8.undefin9.命令行定义(博主没办法演示)10.条件编译11.头文件的包含11.1本地文件11.2库文件的包含11.3 嵌套文件的包含 12.其…

软件安全测评有哪些测试流程?第三方检测机构进行安全测评的好处

在今天的高科技时代&#xff0c;软件产品已经成为人们生活和工作的重要组成部分。然而&#xff0c;与其普及和深入应用的&#xff0c;软件安全问题也日益凸显。 为了保障软件产品在使用过程中的安全性&#xff0c;进行安全测评是必不可少的。安全测评可以全面评估软件系统的安…

GPT-4o多模态大模型的架构设计

GPT-4o&#xff1a;大模型风向&#xff0c;OpenAI大更新 OpenAI震撼发布两大更新&#xff01;桌面版APP与全新UI的ChatGPT上线&#xff0c;简化用户操作&#xff0c;体验更自然。同时&#xff0c;全能模型GPT-4o惊艳亮相&#xff0c;跨模态即时响应&#xff0c;性能卓越且性价比…

Java集合自测题

文章目录 一、说说 List , Set , Map 三者的区别&#xff1f;二、List , Set , Map 在 Java 中分别由哪些对应的实现类&#xff1f;底层的数据结构&#xff1f;三、有哪些集合是线程不安全的&#xff1f;怎么解决呢&#xff1f;四、HashMap 查询&#xff0c;删除的时间复杂度五…

k8s中的pod域名解析失败定位案例

问题描述 我在k8s中启动了一个Host网络模式的pod&#xff0c;这个pod的域名解析失败了。 定位步骤 敲kubectl exec -it [pod_name] -- bash进入pod后台&#xff0c;查看/etc/resolv.conf&#xff0c;发现nameserver配的有问题。这里我预期的nameserver应该使用宿主机的&…

【Linux】线程(一)

谈论之前需要先谈论一些线程的背景知识 其中就有进程地址空间&#xff0c;又是这个让我们又爱又恨的东西 目录 背景知识&#xff1a;地址空间&#xff1a; 背景知识&#xff1a; 地址空间&#xff1a; 说在前边&#xff0c;OS通常分为4个核心模块&#xff1a;执行流管理&…

【qt】绘图

绘图 一.画家二.绘图事件三.坐标体系四.画笔1.setColor2.setWidth3.setStyle4.setCapStyle5.setJoinStyle6.给画家配置笔 五.画刷1.setColor2.setStyle3.给画家设置刷子 六.用到的类汇总1.QRect 矩形2.QPoint 点3.QImage 图片4.QPixmap 图片5.QLine 线6.QPainterPath 路径 七.开…

如何关闭端口被占用的进程

如何关闭端口被占用的进程 操作步骤一、打开命令提示符&#xff08;Command Prompt&#xff09;二、查看占用端口的进程三、kill杀死占用端口的进程 操作步骤 一、打开命令提示符&#xff08;Command Prompt&#xff09; 使用 win R 打开命令行模式 然后在命令行窗口输入下…

【LLM Agent 长文本】Chain-of-Agents与Qwen-Agent引领智能体长文本处理革命

前言 大模型在处理长文本上下文任务时主要存在以下两个问题&#xff1a; 输入长度减少&#xff1a;RAG的方法可以减少输入长度&#xff0c;但这可能导致所需信息的部分丢失&#xff0c;影响任务解决性能。扩展LLMs的上下文长度&#xff1a;通过微调的方式来扩展LLMs的上下文窗…

基于DenseNet网络实现Cifar-10数据集分类

目录 1.作者介绍2.Cifar-10数据集介绍3.Densenet网络模型3.1网络背景3.2网络结构3.2.1Dense Block3.2.2Bottleneck层3.2.3Transition层3.2.4压缩 4.代码实现4.1数据加载4.2建立 DenseNet 网络模型4.3模型训练4.4训练代码4.5测试代码 参考链接 1.作者介绍 吴思雨&#xff0c;女…

搭建自己的多平台镜像站

# 1. 拉取代码 $ git clone https://github.com/wzshiming/crproxy.git $ cd crproxy/examples/default# 2. 修改网关域名 使用vim编辑start.sh文件&#xff0c;将第五行的gateway变量值修改为你自己设定的域名。 原&#xff1a;gatewaycr.zsm.io 修改为&#xff1a;gatewayXS…

go语言 | 快速生成数据库表的 model 和 queryset

就是生成 model 目录的 xxx.go 和 xxx_gen.go 文件 使用的工具&#xff1a; 快速生成 model&#xff1a;gentool&#xff1a;https://github.com/go-gorm/gen/tree/master/tools/gentool 根据 model 生成 queryset&#xff1a;go-queryset&#xff1a;https://github.com/jirfa…

layuimini框架实现点击菜单栏回到起始页

在layui页面中&#xff0c;如果使用了 window.location.href""进行了页面跳转&#xff0c;再点击菜单栏是不会显示起始页&#xff0c;而是跳转后的页面&#xff0c; 解决&#xff1a; 在miniTab.js文件中找到&#xff1a;listen方法 将其中修改为&#xff1a; if …

全球首创4090推理!昆仑万维开源Skywork-MoE模型

昆仑万维近期宣布开源了其2千亿参数规模的稀疏大模型Skywork-MoE。这个模型是基于他们之前开源的Skywork-13B模型中间checkpoint扩展而来的&#xff0c;并且宣称是首个完整应用MoE Upcycling技术的开源千亿MoE大模型。此外&#xff0c;它也是首个支持使用单台RTX 4090服务器&am…

MyBatisPlus代码生成器(交互式)快速指南

引言 本片文章是对代码生成器(交互)快速配置使用流程&#xff0c;更多配置方法可查看官方文档&#xff1a; 代码生成器配置官网 如有疑问欢迎评论区交流&#xff01; 文章目录 引言演示效果图引入相关依赖创建代码生成器对象引入Freemarker模板引擎依赖支持的模板引擎 MyBat…

Day 20:2806. 取整购买后的账户余额

Leetcode 2806. 取整购买后的账户余额 一开始&#xff0c;你的银行账户里有 100 块钱。 给你一个整数purchaseAmount &#xff0c;它表示你在一次购买中愿意支出的金额。 在一个商店里&#xff0c;你进行一次购买&#xff0c;实际支出的金额会向 最近 的 10 的 倍数 取整。换句…