【Python数据魔术】:揭秘类型奥秘,赋能代码创造
文章目录
- 🚀一.运算符
- 🌈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 = 1a += 1 # 展开形式:a = a + 1print(a) # 2

⭐5. 比较运算符
| 运算符 | 描述 |
|---|---|
| == | 比较两个对象的值是否相同,这里要与is区别出来,==是不识别ID的 |
| != | 比较两个对象值是否不相同 |
| > | 大于 |
| < | 小于 |
| >= | 大于等于 |
| <= | 小于等于 |
print(2 > 1) # True# 比较结果为布尔值(True, False)
⭐6. 逻辑运算符
| 运算符 | 逻辑表达式 | 描述 |
|---|---|---|
| and | x and y | 同时满足x和y两个条件返回True,否则返回False |
| or | x or y | 只需要满足x或y中的任意一个条件就返回True,两个都不满足时返回False |
| not | not 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 = 2print(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 字符串。
下面是两个方法的详细说明:
-
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'

-
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) # 输出 255int_val = int(oct_str[2:], 8)
print(int_val) # 输出 255int_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])) # 1633334532096print(id(l2[0])) # 1633303890928
print(id(l4[0])) # 1633303890928
print(id(l4[1])) # 1633334532672l2[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!’] | 复制 | 字符串、列表、元组 |
| in | 3 in (1, 2, 3) | True | 元素是否存在 | 字符串、列表、元组、字典 |
| not in | 4 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 = 2b, a = a, b
# a -- 2 b -- 1
相关文章:
【Python数据魔术】:揭秘类型奥秘,赋能代码创造
文章目录 🚀一.运算符🌈1. 算术运算符🌈2. 身份运算符🌈3. 成员运算符⭐4. 增量运算符⭐5. 比较运算符⭐6. 逻辑运算符 🚀二.可变与不可变🚀三.字符串转义🚀四.编码与解码💥1. 基础使…...
Android Glide loading Bitmap from RESOURCE_DISK_CACHE slow,cost time≈2 seconds+
Android Glide loading Bitmap from RESOURCE_DISK_CACHE slow,cost time≈2 seconds 加载一张宽高约100px多些的小图,是一张相当小的正常图片,loading Bitmap from RESOURCE_DISK_CACHE竟然耗时达到惊人的3秒左右!(打开Glide调试…...
微调技术:人工智能领域的神奇钥匙
在人工智能的浪潮中,深度学习技术凭借其强大的数据处理和学习能力,已成为推动科技进步的重要引擎。然而,深度学习模型的训练往往需要大量的数据和计算资源,这在某些特定场景下成为了限制其发展的瓶颈。为了解决这个问题࿰…...
MyBatis 参数上的处理的细节内容
1. MyBatis 参数上的处理的细节内容 文章目录 1. MyBatis 参数上的处理的细节内容2. MyBatis 参数上的处理3. 准备工作4. 单个(一个)参数4.1 单个(一个)简单类型作为参数4.2 单个(一个) Map集合 作为参数4.3 单个(一个) 实体类POJO作为参数 5. 多个参数5.1 Param注解(命名参数)…...
水帘降温水温
不同环境下的水帘啊,使用水温是不一样的,夏天使用水疗的水有两种,一个是常温的循环水,20~26左右,另外一个呢,就是深井水,重点是啥呢?就是无论我们用哪一种,能够把温度降到…...
kafka如何保证消息不丢失
Kafka发送消息是异步发送的,所以我们不知道消息是否发送成功,所以会可能造成消息丢失。而且Kafka架构是由生产者-服务器端-消费者三种组成部分构成的。要保证消息不丢失,那么主要有三种解决方法。 生产者(producer)端处理 生产者默认发送消息…...
流媒体学习之路(WebRTC)——音频NackTracker优化思路(8)
流媒体学习之路(WebRTC)——音频NackTracker优化思路(8) —— 我正在的github给大家开发一个用于做实验的项目 —— github.com/qw225967/Bifrost目标:可以让大家熟悉各类Qos能力、带宽估计能力,提供每个环节关键参数调节接口并实…...
Java基础面试重点-2
21. JVM是如何处理异常(大概流程)? 如果发生异常,方法会创建一个异常对象(包括:异常名称、异常描述以及异常发生时应用程序的状态),并转交给JVM。创建异常对象,并转交给…...
【活动文章】通用大模型VS垂直大模型,你更青睐哪一方
垂直大模型和通用大模型各有其特定的应用场景和优势。垂直大模型专注于特定领域,提供深度的专业知识和技能,而通用大模型则具备广泛的适用性和强大的泛化能力。以下是一些垂直大模型和通用大模型的例子: 垂直大模型 BERT-Financial…...
记录一个Qt调用插件的问题
问题背景 使用Qt主程序插件的方式开发,即主程序做成一个框,定义好插件接口,然后主程序上通过插件接口与插件进行交互。调试过程中遇到了两个问题,在这里记录一下。 问题1(信号槽定义) 插件与主程序之间&am…...
9.1 Go 接口的定义
💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…...
易于上手的requests
Python中的requests库主要用于发送HTTP请求并获取响应结果。在现代网络编程中,HTTP请求是构建客户端与服务器之间通信的基础。Python作为一种高级编程语言,其丰富的库支持使得它在网络数据处理领域尤为突出。其中,requests库以其简洁、易用的…...
【QT Creator软件】解决中文乱码问题
QT Creator软件解决中文乱码问题 问题描述:Qtcreator安装好后打印中文在控制台输出乱码 在网上也查找了修改编辑器的默认编码为UTF-8,但是仍然没有任何作用,于是有了以下的解决方案 原因剖析:因为项目的编码与控制台的编码不一致…...
边缘网关在智能制造工厂中的创新应用及效果-天拓四方
在数字化浪潮席卷之下,智能制造工厂正面临着前所未有的数据挑战与机遇。边缘网关,作为数据处理与传输的关键节点,在提升工厂运营效率、确保数据安全方面发挥着日益重要的作用。本文将通过一个具体案例,详细阐述边缘网关在智能制造…...
Django-filter
准备工作 首先,确保你已经安装了django-filter包。如果没有,请使用以下命令安装: pip install django-filter然后,在你的settings.py文件中添加django_filters到INSTALLED_APPS列表中: INSTALLED_APPS [# ...djang…...
文字悬停效果
文字悬停效果 效果展示 CSS 知识点 CSS 变量使用回顾-webkit-text-stroke 属性的运用与回顾 页面整体结构实现 <ul><li style"--clr: #e6444f"><a href"#" class"text">First</a></li><li style"--cl…...
[SWPUCTF 2022 新生赛]ez_1zpop(php反序列化之pop链构造)
[SWPUCTF 2022 新生赛]ez_ez_unserialize <?php class X {public $x __FILE__;function __construct($x){$this->x $x; }function __wakeup(){if ($this->x ! __FILE__) {$this->x __FILE__; }}function __destruct(){highlight_file($this->x);//flag is…...
2-1基于matlab的拉普拉斯金字塔图像融合算法
基于matlab的拉普拉斯金字塔图像融合算法,可以使部分图像模糊的图片清楚,也可以使图像增强。程序已调通,可直接运行。 2-1 图像融合 拉普拉斯金字塔图像融合 - 小红书 (xiaohongshu.com)...
Android基础-进程间通信
在Android系统中,跨进程通信(IPC,Inter-Process Communication)是实现不同应用程序或同一应用程序中不同进程间数据共享和交互的关键技术。Android提供了多种IPC机制,每种机制都有其特定的使用场景和优缺点。下面将详细…...
【微信小程序】uni-app 配置网络请求
原因 由于平台的限制,小程序项目中 不支持axios,而且原生的,wx.request()API功能较为简单,不支持拦截器等全局定制的功能。因此,建议在uni-app项目中使用 escook/request-miniprogram 第三方包发起网络数据请求。 步…...
椭圆曲线密码学(ECC)
一、ECC算法概述 椭圆曲线密码学(Elliptic Curve Cryptography)是基于椭圆曲线数学理论的公钥密码系统,由Neal Koblitz和Victor Miller在1985年独立提出。相比RSA,ECC在相同安全强度下密钥更短(256位ECC ≈ 3072位RSA…...
在 Nginx Stream 层“改写”MQTT ngx_stream_mqtt_filter_module
1、为什么要修改 CONNECT 报文? 多租户隔离:自动为接入设备追加租户前缀,后端按 ClientID 拆分队列。零代码鉴权:将入站用户名替换为 OAuth Access-Token,后端 Broker 统一校验。灰度发布:根据 IP/地理位写…...
Map相关知识
数据结构 二叉树 二叉树,顾名思义,每个节点最多有两个“叉”,也就是两个子节点,分别是左子 节点和右子节点。不过,二叉树并不要求每个节点都有两个子节点,有的节点只 有左子节点,有的节点只有…...
RNN避坑指南:从数学推导到LSTM/GRU工业级部署实战流程
本文较长,建议点赞收藏,以免遗失。更多AI大模型应用开发学习视频及资料,尽在聚客AI学院。 本文全面剖析RNN核心原理,深入讲解梯度消失/爆炸问题,并通过LSTM/GRU结构实现解决方案,提供时间序列预测和文本生成…...
Oracle11g安装包
Oracle 11g安装包 适用于windows系统,64位 下载路径 oracle 11g 安装包...
【WebSocket】SpringBoot项目中使用WebSocket
1. 导入坐标 如果springboot父工程没有加入websocket的起步依赖,添加它的坐标的时候需要带上版本号。 <dependency><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter-websocket</artifactId> </dep…...
Vue3 PC端 UI组件库我更推荐Naive UI
一、Vue3生态现状与UI库选择的重要性 随着Vue3的稳定发布和Composition API的广泛采用,前端开发者面临着UI组件库的重新选择。一个好的UI库不仅能提升开发效率,还能确保项目的长期可维护性。本文将对比三大主流Vue3 UI库(Naive UI、Element …...
node.js的初步学习
那什么是node.js呢? 和JavaScript又是什么关系呢? node.js 提供了 JavaScript的运行环境。当JavaScript作为后端开发语言来说, 需要在node.js的环境上进行当JavaScript作为前端开发语言来说,需要在浏览器的环境上进行 Node.js 可…...
欢乐熊大话蓝牙知识17:多连接 BLE 怎么设计服务不会乱?分层思维来救场!
多连接 BLE 怎么设计服务不会乱?分层思维来救场! 作者按: 你是不是也遇到过 BLE 多连接时,调试现场像网吧“掉线风暴”? 温度传感器连上了,心率带丢了;一边 OTA 更新,一边通知卡壳。…...
LeetCode 0386.字典序排数:细心总结条件
【LetMeFly】386.字典序排数:细心总结条件 力扣题目链接:https://leetcode.cn/problems/lexicographical-numbers/ 给你一个整数 n ,按字典序返回范围 [1, n] 内所有整数。 你必须设计一个时间复杂度为 O(n) 且使用 O(1) 额外空间的算法。…...
