找回密码
 会员注册
查看: 34|回复: 0

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

[复制链接]

3

主题

0

回帖

10

积分

新手上路

积分
10
发表于 2024-9-8 13:31:19 | 显示全部楼层 |阅读模式
文章目录🚀一.运算符🌈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除以yb/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不一定相同isnot非同一性判断两个变量的引用是否来之不同对象使用is注意python对于小整数使用对象池存贮问题(交互式模式或者说命令行模式)"""1.举个例子,在python命令行模式下:为什么同样值a,b与c,d的结果却不一样呢?""">>>a=1000>>>b=1000>>>aisbFalse>>>c=10>>>d=10>>>cisdTrue#注意,因为python对小整数在内存中直接创建了一份,不会回收,所有创建的小整数变量直接从对象池中引用即可。#但是注意Python仅仅对比较小的整数对象进行缓存(范围为范围[-5,256])缓存起来,而并非是所有整数对象。#也就说只有在这个[-5,256]范围内创建的变量值使用is比较时候才会成立。12345678910111213141516而保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化。即使整数超过256,使用is也是成立的。使用is注意python关于字符串的intern机制存储#注意:python中创建两个内容一样的变量时(变量名不一样),#一般都会在内存中分配两个内存地址(id地址)分别给这两个变量。#即两个变量的内容虽然一样,但是变量的引用地址不一样。#所以两个变量使用==比较成立,但是使用is比较不成立。#但是在python中有两个意外情况:#1.使用python命令行时对于小整数[-5,256]区间内的整数,python会创建小整数对象池,这些对象一旦创建,#就不会回收,所有新创建的在这个范围的整数都是直接引用他即可。#所以造成在[-5,256]区间内的整数不同变量只要值相同,引用地址也相同。#此范围外的整数同样遵循新建一个变量赋予一个地址。#2.python中虽然字符串对象也是不可变对象,但python有个intern机制,#简单说就是维护一个字典,这个字典维护已经创建字符串(key)和它的字符串对象的地址(value),#每次创建字符串对象都会和这个字典比较,没有就创建,重复了就用指针进行引用就可以了。#相当于python对于字符串也是采用了对象池原理。#(但是注意:如果字符串(含有空格),不可修改,没开启intern机制,不共用对象。#比如"ab"和"ab",这种情况使用is不成立的形式只有在命令行中可以。#使用pycharm同样是True,因为做了优化)#交互式模式(命令行模式)>>>a='abc'#没有空格内容一样的两个变量,在命令行模式下is结果True>>>b='abc'>>>a==bTrue>>>aisbTrue>>>c='ab'#有空格内容一样的两个变量,在命令行模式下is结果false>>>d='ab'>>>c==dTrue>>>cisdFalse#pycharm自己实践1234567891011121314151617181920212223242526272829303132333435🌈3.成员运算符运算符描述in如果在指定序列中找到值就返回True,否则返回Falsenotin如果在指定序列中没有找到值就返回True,否则返回Falsestr1=[1,2,3,'哈哈哈']print(1instr1)#Trueprint(1notinstr1)#False1234'运行运行⭐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//aa=1a+=1#展开形式:a=a+1print(a)#212345'运行运行⭐5.比较运算符运算符描述==比较两个对象的值是否相同,这里要与is区别出来,==是不识别ID的!=比较两个对象值是否不相同>大于=大于等于1)#True#比较结果为布尔值(True,False)123'运行运行⭐6.逻辑运算符运算符逻辑表达式描述andxandy同时满足x和y两个条件返回True,否则返回Falseorxory只需要满足x或y中的任意一个条件就返回True,两个都不满足时返回Falsenotnotx满足条件x时返回False,不满足条件x时返回True优先级:notandora=1b=1c=2#and两边为真则为真,其余情况为假print(a>0anda1anda0anda1andc>>print('a\000c')ac>>>print('a\0c')ac12345🚀四.编码与解码💥1.基础使用统一码(Unicode),也叫万国码、单一码,由统一码联盟开发,是计算机科学领域里的一项业界标准,包括字符集、编码方案等。统一码是为了解决传统的字符编码方案的局限而产生的,它为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。12encode()和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'123'运行运行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,你好123'运行运行需要注意的是,字符串编码和解码涉及到多种字符编码方式和错误处理方式,如果不正确地进行设置和使用,可能会导致字符集转换错误、乱码等问题。因此,在实际开发中,应该根据具体情况选择合适的编码和解码方式,并对数据的合法性进行严格的校验和处理。🚀五.进制转化💥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'12345678910111213'运行运行需要注意的是,这些函数返回的结果都是字符串类型,并且带有对应进制的前缀,即'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)#输出255123456789如上所示,使用int()函数时可以指定第二个参数base来指定进制,例如base=2表示二进制,base=8表示八进制,base=16表示十六进制。在实际应用中,可以根据需要选择合适的函数和参数来进行进制转换。#ord()是Python内置函数之一,用于将ASCII字符转换为对应的Unicode码点。具体而言,ord()接受一个字符串参数,表示要转换为码点的字符,然后返回该字符所对应的Unicode码点。#将字符转换为Unicode编码print(ord('A'))#输出65print(ord('a'))#输出97print(ord('€'))#输出8364#chr()是Python内置函数之一,用于将Unicode码点转换为对应的ASCII字符。具体而言,chr()接受一个整数参数,表示Unicode码点(介于0到0x10ffff之间),并返回与该码点相对应的字符。#将Unicode编码转换为字符print(chr(65))#输出'A'print(chr(97))#输出'a'print(chr(8364))#输出'€'1234567891011'运行运行🚀六.深浅拷贝(复制)❤️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))#2429073232384print(id(l2[1]))#2104199485056print(id(l3))#2429073240128print(id(l3[1]))#2104199485056#浅复制外层不同,内层id相同12345678910111213141516171819202122❤️2.深拷贝内外层都不影响importcopyl1=[1234,5678,910]l2=['a',l1]l4=copy.deepcopy(l2)l1.append('帅')print(id(l1))#1633334532096print(id(l2))#1633334532352print(id(l4))#1633334448384print(id(l2[1]))#1633334532096print(id(l2[0]))#1633303890928print(id(l4[0]))#1633303890928print(id(l4[1]))#1633334532672l2[0]=1234print(id(l4[0]))#外层地址不同print(id(l2[0]))#内外层都不同1234567891011121314151617181920212223'运行运行🚀七.运算升级运算符Python表达式结果描述支持的数据类型+[1,2]+[3,4][1,2,3,4]合并字符串、列表、元组*‘Hi!’*4[‘Hi!’,‘Hi!’,‘Hi!’,‘Hi!’]复制字符串、列表、元组in3in(1,2,3)True元素是否存在字符串、列表、元组、字典notin4notin(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)orisinstance(x,B)or...1234567'运行运行🚀九.操作扩展链式赋值a=b=c=[1,2,3,4]#其id相同,引用的同一组数据#改变其中一组,另外一组也会改变1234'运行运行序列解包a=[1,2]b,c=a#a--1b--2#注意:常规解包,多少个元素就需要多少变量去解demo=[1,2,3,4]data,*lets=demo#data--1lets--[2,3,4]#注意:这里利用了不定长参数中的*,不限接收数据多少1234567891011121314'运行运行交换变量a=1b=2b,a=a,b#a--2b--112345'运行运行
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 会员注册

本版积分规则

QQ|手机版|心飞设计-版权所有:微度网络信息技术服务中心 ( 鲁ICP备17032091号-12 )|网站地图

GMT+8, 2025-1-10 19:09 , Processed in 0.422997 second(s), 26 queries .

Powered by Discuz! X3.5

© 2001-2025 Discuz! Team.

快速回复 返回顶部 返回列表