Python的数据类型

命令行与shell

  • 在windows上cmd和powershell都是命令行执行窗口,但powershell功能更加强大。
  • Powershell 从 Windows7 时代开始内置于 Windows 系统当中,可以看作是微软对 cmd 的大升级,目前两者bai并存于 Windows 系统中。
  • powershell 背后依靠的是一套完整的 .NET 编程体系,其脚本更容易编写且稳健性大大提升。
  • 因为 powershell 可以看作 cmd 的超集,所有的常用命令诸如dir, cd, ipconfig等在 powershell 中都能直接使用。但背后的实现方式是完全不同的,powershell 基于完全的面向对象,它通过给函数和对象“起别名”的方式来支持这些旧的命令;
  • powershell支持复杂的管道操作:管道操作的灵感来自 Linux 的 shell,但由于 powershell 将一切都包装成为对象,而不是直接处理字符串,因此其管道操作的灵活程度远在 Linux 的 shell 之上。

变量

每个变量在使用前必须用“=”赋值,变量赋值以后该变量才会被创建。

变量名 = 值

在Python中,定义变量是不需要指定数据类型的。Python 可以根据 = 等号右侧的值,自动推导出变量中存储数据的类型。

在 Python 中,变量就是变量,它没有类型,我们所说的"类型"是变量所指的内存中对象的类型。

变量存储数据的类型(使用type获取)。

变量的地址(使用id获取)

firstNumber = 23           # 驼峰式命名
second_number = 45         # 下划线命名
print (firstNumber,second_number)

a = b = 5                # Python允许同时为多个变量赋值
c,d,e = 3, 5.0 ,'sun'    # Python允许同时为多个对象指定多个变量,且可以指定不同的数据类型
print(a,b,c,d,e)    #5 5 3 5.0 sun
type(a)    #int
b='LV'    
print(id(a))    #94829453530016
print(id(b))    #140167978840752
f=b    #f只是和b指向同一个地址的标签
print(id(b))    #140167978840752
print(id(f))    #140167978840752
  • python的回收机制:当一些静态的数据,没有标签贴向它的时候,会被自动回收。

运算符

img

算术运算符( + - * / % ** //)
print(5+6)    #11
print(5-6)    #-1
print(5*6)    #30
print(16/6)    # 结果为浮点型,2.66666666666
print(16//6)   # 结果为整形(整数截断),2
print(16%6)    # 结果取余数,4
print(5**3)    # N幂次,125
0.1+0.2        # 除不尽,0.30000000000004
#round(0.1+0.2,2)

img

  • round
round(0.1+0.2,2)    #2位数后截断,0.3

# round的结果跟python版本有关
round(-0.6)     #-1
比较运算符(< <= > >= == !=)

结果:true,false

赋值运算符(= += -= *= /= %= **= //= )
a = 21
a += 1  # a=a+1 (没有a++),22
print(a)
a -= 1  #21
print(a)
a *= 4  #84
print(a)
a /= 2  #42.0
print(a)
a %= 4    #取余数,2.0
print(a)
a **= 3   #N次幂,8.0
print(a)
a //= 5   #向下取整的除法,1.0
print(a)
逻辑运算符( and or not )
c = 60  
d = 50  
c and d    #50
True and False    #False
位运算符( & | ^ ~ << >> )
c = 60  # 0011 1100
d = 50  # 0011 0010
c & d    #48
成员运算符(in, not in)

img

str1 = 'dianzi'
if ('i' in str1):
    print('Y')
else:
    print('N')    #Y
身份运算符( is, is not)

身份运算符用于比较两个对象的存储单元

img

a = 4
b = 4
b is a    #True

img

运算符优先级

img

(3*6)+(4/8)-(4*6)  # ()权限最高,-5.5

Python数据类型

img

数字Number
  • Number 数据类型用于存储数值,包括整型(int)、布尔型(bool)、浮点型(float)、复数(complex)。
  • 布尔型: Python2 中是没有布尔型的,它用数字 0 表示 False,用 1 表示 True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。
  • 在混合计算时,Python会把整型转换成为浮点数。
a,b,c,d = 20, 5.5, True, 4+7j
type(a),type(b),type(c),type(d)    #(int, float, bool, complex)
#isinstance(a,int)
a=2
type(a)
isinstance(a,int)    #True,a是整型
isinstance(c,(str,dict,list,tuple))    #c是否是元组(str,dict,list,tuple)的一个

type和isinstance的区别:isinstance(object,classinfo)用来判断一个函数是否是一个已知类型,type用来查看某数据类型

字符串String

字符串是 Python 中最常用的数据类型。可以使用引号( ’ 或 " )来创建字符串。

原始字符串
print('Let\'s go')  #字符串中有单引号或双引号,Let's go
#print('Let's go')  错误
s='D:\now'
print(s)    #D:
            #ow
t='D:\\now'
print(t)    #D:\now

Python 使用反斜杠 \ 转义特殊字符,如果不想让反斜杠发生转义,可以在字符串前面添加一个 r,表示原始字符串。

lujing='C:\Program Files\ntel\tiFi\Help\nhup\thank'
print(lujing)    #C:\Program Files
                 #tel	iFi\Help
                 #hup	hank
lujing2='C:\Program Files\\ntel\\tiFi\Help\\nhup\\thank'
print(lujing2)   #C:\Program Files\ntel\tiFi\Help\nhup\thank
lujing3=r'C:\Program Files\ntel\tiFi\Help\nhup\thank'    #加r,输出原始字符串
print(lujing3)   #C:\Program Files\ntel\tiFi\Help\nhup\thank
字符串索引与切片

img

  • 切片语法:字符串[start​ : end : step],默认截取方向从左往右。
  • start默认值0,end默认值字符串末元素,step默认值为1。若为负值,截取方向从右往左。
str1 = 'engineer'
str1[7:0:-1]    #左闭右开,'reenign'

左闭右开

str1 = 'engineer'
str1[3]       #'i'
str1[-5]      #'i'
str1[1:5]     # 左闭右开,'ngin'
str1[3:-4]    # 左闭右开,'i'

str1[:8]          # 左闭右开,留空即取到尽头,'engineer',r索引是7
str1[0:]          # 左闭右开,留空即取到尽头,'engineer'
str1[:]           # 左闭右开,留空即取到尽头,'engineer'
str1[7:0:-1]      # 左闭右开,逆序索引要倒写,'reenign'
str1[7::-1]       # 左闭右开,逆序索引要倒写,留空即取到尽头,'reenigne'
str1[-1:-8:-1]    # 左闭右开,逆序索引要倒写,'reenign'
str1[-1::-1]      # 左闭右开,逆序索引要倒写,留空即取到尽头,'reenigne'
str1[::-1]        # 左闭右开,逆序索引要倒写,留空即取到尽头,'reenigne'
字符串取长度
len('dianzi jishu')     # 空格占字符串长度,12
dir()查看对象属性和方法
  • 在 python 中任何东西都是对象,一种数据类型,一个模块等,都有子集的属性和方法。
  • 使用 dir()函数可以查看对象内的所有的属性和方法。
  • 使用help来看方法的定义
dir(str1)    #看字符串类型里有什么函数

str1.count('n')    #count函数用来找字符串中有几个n
# 记不住,找百度! 
help(str1.count)     #找count函数的定义来知道作用
字符串常用函数
str1.find()
str1.index
str1.split
str1.startswith
str1.endswith
str1.find
str1.replace
str1.strip
str1.upper
str1.lower
str1.capitalize
str1.format
字符串的格式化输出
  • %

    img

number = 43
print('计192班人数是', number,'人!')    #计192班人数是 43 人!

rate = 10/43    # 注:%前不加逗号。
print('女生比例是%s!'%rate)      #女生比例是0.23255813953488372!

rate = 10/43    # 注:%前不加逗号,.2是小数点后2位
print('女生比例是%.2f!'%rate)    #女生比例是0.23!   

class1 = '计192'
girl = 10
rate = 0.23
height = 1.62
print('班级%s的女生有%d人,占比%.2f,平均身高%i'%(class1,girl,rate,height))     # 注:%前不加逗号
  • format

    print('班级{}的女生有{}人,占比{},平均身高{}'.format(class1,girl,rate,height))
    #班级计192的女生有10人,占比0.23,平均身高1.62
    
    class1 = '计192'
    girl = 10
    rate = 0.23
    height = 1.62
    print('班级{}的女生有{:d}人,占比{:.2f},平均身高{:.1f}'.format(class1,girl,rate,height))     # 注:.format
    #班级计192的女生有10人,占比0.23,平均身高1.6
    
    class1 = '计192'
    girl = 10
    rate = 0.23
    height = 1.62
    print('班级{0}的女生有{1}人,占比{2},平均身高{3}'.format(class1,girl,rate,height))
    #班级计192的女生有10人,占比0.23,平均身高1.62
    
    print('班级{class1}的女生有{girl}人,占比{rate},平均身高{height}'.format(class1='计192',girl=10,rate=0.23,height=1.62)) 
    #班级计192的女生有10人,占比0.23,平均身高1.62
    
  • f-string

  • python3.6版本新加入

    class1 = '计192'
    girl = 10
    rate = 0.23
    height = 1.62
    print(f'班级{class1}的女生有{girl}人,占比{rate},平均身高{height}')    #加f
    #班级计192的女生有10人,占比0.23,平均身高1.62
    

列表List

  • List(列表) 是 Python 中使用最频繁的数据类型。
  • 列表是写在方括号 [ ] 之间、用逗号分隔开的元素列表。
  • List(列表)就好比一个杂货铺,可以包含各种数据类型,如整数、浮点数、字符串甚至列表(所谓嵌套)。
  • 和字符串一样,列表同样可以被索引和截取,列表被截取后返回一个包含所需元素的新列表。
  • 加号 + 是列表连接运算符,星号 * 是重复操作。
  • 与Python字符串不一样的是,列表中的元素是可以改变的。
list1 = [1,2,3,4,5]
list2 = ['dianzi','jishu',1,[8,9]]
print(list2)
len(list2)
list2[3]
#['dianzi', 'jishu', 1, [8, 9]]
#4
#[8, 9]
列表的常用函数
dir(list)       #查看列表有什么可用函数
  • 对这些对象的方法的使用,就是变量名后加“.”
  • 例:list2.append、list2.clear、list2.copy、list2.count、list2.extend、list2.index、list2.insert、list2.pop、list2.remove、list2.reverse、list2.sort
list2 = ['dianzi','jishu',1,[8,9]]
list2.append([5,1])     #在列表后面追加列表
list2
#['dianzi', 'jishu', 1, [8, 9], [5, 1]]

list2 = ['dianzi','jishu',1,[8,9]]
list2.extend([5,1])    #在列表后面追加两个数字
list2
#['dianzi', 'jishu', 1, [8, 9], 5, 1]
  • 分析向列表添加元素,.append( ), .extend( ), .insert( )区别;
  • 分析从列表删除元素,.pop( ), .del( ), .remove( )区别。
append使用注意事项
  • append是对对象a1的原地操作,列表对象本身保留在相同的内存位置,python的垃圾回收机制保证对象的id在该对象的生命周期内是持久的。

    a0 = 3            #定义一个整数
    b0 = a0 + 1       #对整数进行计算
    print(id(a0))
    print(id(b0))   
    #94814296744800
    #94814296744832
    
    a1 = [1,2,3,4]   #定义一个列表
    print(a1)
    print(id(a1))
    a1.append(5)     # 对列表进行追加
    print(id(a1))    # 两次print的对象均为a1
    print(a1)
    #[1, 2, 3, 4]
    #140144678978096
    #140144678978096
    #[1, 2, 3, 4, 5]
    
    a1 = [1,2,3,4]
    print(a1)
    print(id(a1))
    b1 = a1.append(5)                      
    print(b1)    # 把append这个操作赋给b1,给列表添加元素不存在返回值,故返回None
    print(id(b1))
    print(a1)   
    type(b1)                  #类型为空类型
    #[1, 2, 3, 4]
    #140144674601952
    #None
    #94814296608656
    #[1, 2, 3, 4, 5]
    #NoneType
    
列表的复制
a1 = [4,3,1,5]
b1 = a1
a1.append(6)
print(a1)
print(b1)       # 只改变了a1,b1也跟着改变
#[4, 3, 1, 5, 6]
#[4, 3, 1, 5, 6]
  • a1=b1,只是创建了一个新的标签指向列表,并没有生成一个新的列表

  • 切片运算符[:] 返回一个序列的切片。切片过程是切下列表的一部分,创建新的列表,将切下的部分复制到新列表。

a1 = [4,3,1,5]
b1 = a1
b2 = a1[:]
print(b1)
print(b2)
print(id(b1))
print(id(b2))     #地址不一样,b2是另一个列表,而不只是标签
#[4, 3, 1, 5]
#[4, 3, 1, 5]
#140167970389760
#140167968865568

a1.append(6)
print(b1)
print(b2)
#[4, 3, 1, 5, 6]
#[4, 3, 1, 5]
  • 把b2 = a1[:] 换成 b2=list(a1) 是一样的

元组(Tuple)

  • 元组(tuple)与列表类似,不同之处在于元组的元素不能修改。元组写在小括号 () 里,元素之间用逗号隔开。
  • 元组也可以使用+操作符进行拼接。
  • 虽然tuple的元素不可改变,但它可以包含可变的对象,比如list列表。
  • 构造包含 0 个或 1 个元素的元组比较特殊,所以有一些额外的语法规则。
tup = (1,2,3,4,5)
tup = ('dianzi','jishu',1,[8,9])   #列表[],元组()
print(tup)
#('dianzi', 'jishu', 1, [8, 9])
tup1 = () #创建空元组
print(tup1)
#()
  • 元组中只包含一个元素时,需要在元素后面添加逗号
tup2 = ('Prada')
type(tup2)
#str
tup2 = ('Prada',)  #元组中只包含一个元素时,需要在元素后面添加逗号
type(tup2)
#tuple

6 * 'Parda'
#'PardaPardaPardaPardaPardaParda'

6 *( 'Prada',)     # 加逗号以后才是元组,生成有6个这个的新元组
#('Prada', 'Prada', 'Prada', 'Prada', 'Prada', 'Prada')
  • 元组中的元素不可赋值修改

  • 元组添加元素的方法:把元组切片后再拼接

    tup3 = ('Coach','LV','Prada')   #元组不支持修改
    #tup3[0] = 'Burberry'    出错
    #tup3.append(('Burberry',))    元组不能append
    
    tup = tup3[:1] + ('Burberry',) + tup3[1:]
    tup
    #('Coach', 'Burberry', 'LV', 'Prada'),左开右闭
    
    tup = tup3[:] + ('Burberry',)
    tup
    #('Coach', 'LV', 'Prada', 'Burberry')
    
    tup = ('Burberry',) + tup3[:]
    tup
    #('Burberry', 'Coach', 'LV', 'Prada')
    

img

字典(Dictionary)

字典(dictionary)是Python中另一个非常有用的内置数据类型。

列表是有序的对象集合,字典是无序的对象集合。两者之间的区别在于:字典当中的元素是通过键来存取的,而不是通过偏移存取。

字典是一种映射类型,用 { } 标识,它是一个无序的 键(key) : 值(value) 的集合。

键(key)必须使用不可变类型。

在同一个字典中,键(key)必须是唯一的。

price = {'Coach':1000,'LV':2000,'Prada':3000}
type(price)
#dict

price = {'Coach':1000,'LV':4000,'Prada':3000,'LV':2000} #不允许同一个键出现两次。
price      #“取值以后为主”
#{'Coach': 1000, 'LV': 2000, 'Prada': 3000}

#price = {['Coach']:1000,['LV']:2000,['Prada']:3000,'LV':4000},错误
#键不可以是列表,可以用数字,字符串或元组

price['Coach']  # 访问“键”,返回“Value”
#1000

price['Burberry'] = 4000  #添加字典内容
price
#{'Coach': 1000, 'LV': 4000, 'Prada': 3000, 'Burberry': 4000}

del price['LV']           # 删除字典内容
price
#{'Coach': 1000, 'Prada': 3000}

dir(dict)     #查看字典可用的函数

集合(Set)

集合(set)和字典(dict)类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中没有重复的key。

基本功能是进行成员关系测试和删除重复元素。

可以使用大括号 { } 或者 set() 函数创建集合,注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

s = {3, 4 , 4 ,6 , 7,}
s
#{3, 4, 6, 7}

dir(set)    

数据类型间的切换

  • 不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
  • 可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)。
a = 8
b = 0.3
c = True 
d = 4 + 5j

e = 'zongjie'
list1 = [2,'g',False]    #列表
tuple1 = (2,'g',False)    #元组
dict1 = {'Coach':1000,'LV':2000,'Prada':3000}    #字典
set1 = {2,3,4,5,6,6}    #集合


int(5.6)    #5
str(78)    #'78'
bool(8)    #True
float('7.3')    #7.3
float('7.4')     #7.4
int(float('7.4'))    #字符串无法一步转为整型,7
set([1,1,2,3,4])    #{1, 2, 3, 4}
list({1,3,4,5})    #[1, 3, 4, 5]
list((2,3,6))    #[2, 3, 6]

深复制、浅复制

  • Python中的对象之间赋值时是按引用传递的,如果需要复制对象,需要使用标准库中的copy模块。
    1. copy.copy:浅复制 只复制父对象,不会拷复制对象内部的子对象。
    1. copy.deepcopy:深复制 复制对象及其子对象
import copy  
a = [1, 2, 3, 4, ['a', 'b']] #原始对象  
  
b = a                  #赋值,传对象的引用  

c = a[:]               #列表切片
d = copy.copy(a)       #对象复制,浅复制


e = copy.deepcopy(a)   #对象复制,深复制 
  
a.append(5)            #修改对象a  
a[4].append('c')       #修改对象a中的['a', 'b']数组对象  
  
print(a) 
print(b) 
print(c) 
print(d)
print(e)

print(id(a))
print(id(b))
print(id(c))
print(id(d))
print(id(e))
#[1, 2, 3, 4, ['a', 'b', 'c'], 5]
#[1, 2, 3, 4, ['a', 'b', 'c'], 5]
#[1, 2, 3, 4, ['a', 'b', 'c']]
#[1, 2, 3, 4, ['a', 'b', 'c']]
#[1, 2, 3, 4, ['a', 'b']]
#140144682972656
#140144682972656
#140145062160736
#140144689397840
#140145062162096
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值