python_基础_数据类型

基础数据类型

  • 不需要声明,只有被赋值后才会创建变量。
  • 变量本身没有类型,“类型”指的是所存值的类型。

类型判断

type(x) 和 isinstance(x, int)
前者不会认为子类是一种他的父类类型
后者会认为子类是父类类型

>>> class A:
...     pass
... 
>>> class B(A):
...     pass
... 
>>> isinstance(A(), A)
True
>>> type(A()) == A 
True
>>> isinstance(B(), A)
True
>>> type(B()) == A
False

类型转换

隐式类型转换

较低级往较高级转换,不会丢失数据

显式类型转换

一些内置函数

数字 Number

类型

  • int 长整型
  • float 浮点型
  • bool 布尔(是int的子类,True1,False0,可以做加减)
  • complex 复数

计算

>>> 5 + 4  # 加法
9
>>> 4.3 - 2 # 减法
2.3
>>> 3 * 7  # 乘法
21
>>> 2 / 4  # 除法,得到一个浮点数
0.5
>>> 2 // 4.0 # 除法,得到一个整数;得到的并不一定是整数类型的数,它与分母分子的数据类型有关系
0.0
>>> 17 % 3.0 # 取余;得到的并不一定是整数类型的数,它与分母分子的数据类型有关系 
2.0
>>> 2 ** 5 # 乘方
32
>>> 17%3.0
2.0
>>> _
2.0
>>> price = 1500
>>> price+_
1502.0
>>> 2//4.0
0.0
>>> _
0.0
>>>

常数

常量描述
pi数学常量 pi(圆周率,一般以π来表示)
e数学常量 e,e即自然常数(自然常数)。

字符串 String

  • 单引号 ' 或者双引号 " 成对括起来的
  • 使用 \ 进行字符串转义,字符串整体前面加 r或者R 则不会转义
  • 使用 + 进行字符串拼接,* 进行字符串重复
  • 没有字符类型(char),只有长度为1的字符串
  • 赋值后不能被改变,即 str='hello' str[0]='m' 会报错

多行

>>> var1 = ''' this is
... a drama
... about something
... ok~ '''
>>> var1
' this is \na drama\nabout something\nok~ '
>>>

'''
这里是代码注释
'''

截取

  • 索引值 从左到右 0~length-1 从右到左 -length ~ -1
  • 包含左边,不包含右边
  • 变量[头下标:尾下标]

格式化

#!/usr/bin/python3
 
print ("我叫 %s 今年 %d 岁!" % ('小明', 10))
# 输出:我叫 小明 今年 10 岁!

布尔 bool

  • 在与其他数据类型进行比较时,会被转换为1/0
  • 运算符:and、or、not

注意: 在 Python 中,所有非零的数字和非空的字符串、列表、元组等数据类型都被视为 True,只有 0、空字符串、空列表、空元组等被视为 False。

列表 List

  • 列表中元素的类型可以各不相同
  • 中括号 []
  • 列表可以嵌套列表
  • 索引值 从左到右 0~length-1 从右到左 -length ~ -1
  • 列表中的元素可以改变(不同于字符串)
  • 有很多内置函数
#!/usr/bin/python3

list = ['Google', 'Runoob', 1997, 2000]

print ("第三个元素为 : ", list[2]) #1997
list[2] = 2001
print ("更新后的第三个元素为 : ", list[2]) #2001

list1 = ['Google', 'Runoob', 'Taobao']
list1.append('Baidu')
print ("更新后的列表 : ", list1) # ['Google', 'Runoob', 'Taobao', 'Baidu']

del list1[2]
print ("更新后的列表 : ", list1) # ['Google', 'Runoob', 'Baidu']

嵌套

>>> a = ['a', 'b', 'c']
>>> n = [1, 2, 3]
>>> x = [a, n]
>>> x
[['a', 'b', 'c'], [1, 2, 3]]
>>> x[0]
['a', 'b', 'c']
>>> x[0][1]
'b'

比较

列表比较需要引入 operator 模块的 eq 方法

# 导入 operator 模块
import operator

a = [1, 2]
b = [2, 3]
c = [2, 3]
print("operator.eq(a,b): ", operator.eq(a,b)) #False
print("operator.eq(c,b): ", operator.eq(c,b)) #True

遍历

# 索引+值
>>> for i, v in enumerate(['tic', 'tac', 'toe']):
...     print(i, v)
...
0 tic
1 tac
2 toe

# 多个数组
>>> questions = ['name', 'quest', 'favorite color']
>>> answers = ['lancelot', 'the holy grail', 'blue']
>>> for q, a in zip(questions, answers):
...     print('What is your {0}?  It is {1}.'.format(q, a))
...
What is your name?  It is lancelot.
What is your quest?  It is the holy grail.
What is your favorite color?  It is blue.

# 反向
>>> for i in reversed(range(1, 10, 2)):
...     print(i)
...
9
7
5
3
1

# 顺序
>>> basket = ['apple', 'orange', 'apple', 'pear', 'orange', 'banana']
>>> for f in sorted(set(basket)):
...     print(f)
...
apple
banana
orange
pear

元组 Tuple

  • 与List类似,但元组内元素不能修改
  • 小括号 ()
  • 能够包含可变的元素
tup1 = ()    # 空元组
tup2 = (20,) # 一个元素,需要在元素后添加逗号
# 区别于
tup_int = (20)

可变?不可变?

元组内的元素是不可变的,但元组变量所指的内存可以变;绑定到新的对象

>>> tup = ('r', 'u', 'n', 'o', 'o', 'b')
>>> tup[0] = 'g'     # 不支持修改元素
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

>>> id(tup)     # 查看内存地址
4440687904
>>> tup = (1,2,3) # 重新赋值
>>> id(tup)
4441088800    # 内存地址不一样了

集合 Set

  • 无序、可变、元素唯一的列表
  • 能够进行交并差等集合运算
  • 大括号 {}

创建

set1 = {1, 2, 3, 4}            # 直接使用大括号创建集合
set2 = set([4, 5, 6, 7])      # 使用 set() 函数从列表创建集合

empSet = set()

注意:创建一个空集合必须用 set() 而不是 { },因为 { } 是用来创建一个空字典。

运算

>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a                                  
{'a', 'r', 'b', 'c', 'd'}

>>> a - b                              # 集合a中包含而集合b中不包含的元素
{'r', 'd', 'b'}

>>> a | b                              # 集合a或b中包含的所有元素
{'a', 'c', 'r', 'd', 'b', 'm', 'z', 'l'}

>>> a & b                              # 集合a和b中都包含了的元素
{'a', 'c'}

>>> a ^ b                              # 不同时包含于a和b的元素
{'r', 'd', 'b', 'm', 'z', 'l'}

操作

>>> strSet = {1,2,3,4,5,6}
>>> strSet.add(7)
>>> strSet
{1, 2, 3, 4, 5, 6, 7}

>>> strSet.update(8)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not iterable

>>> strSet.update([8,9])
>>> strSet
{1, 2, 3, 4, 5, 6, 7, 8, 9}

>>> strSet.remove(3)
>>> strSet
{1, 2, 4, 5, 6, 7, 8, 9}

>>> strSet.discard({9}) # 不会报错
>>> strSet
{1, 2, 4, 5, 6, 7, 8, 9}


# set 集合的 pop 方法会对集合进行无序的排列,然后将这个无序排列集合的左面第一个元素进行删除。
>>> strSet.pop()
1
>>> strSet
{2, 4, 5, 6, 7, 8, 9}
>>> strSet.pop()
2
>>> strSet
{4, 5, 6, 7, 8, 9}
>>> strSet.pop()
4
>>> strSet
{5, 6, 7, 8, 9}

>>> strSet.clear() # 清空
>>> strSet
set()

字典 Dictionary

  • 无序
  • 通过进行存取:key:value
  • 大括号 {}
  • key必须不可变、且唯一,所以不能用列表

创建

# 使用大括号 {} 来创建空字典
emptyDict = {}

# 使用内建函数
emptyDict = dict()

取值

>>> strDict = {'key1':1, 'key2':'2', 3:'123'}

>>> strDict['key1']
1

# 不存在的key访问会报错

清除

tinydict = {'Name': 'Runoob', 'Age': 7, 'Class': 'First'}
 
del tinydict['Name'] # 删除键 'Name'
tinydict.clear()     # 清空字典
del tinydict         # 删除字典
 
print ("tinydict['Age']: ", tinydict['Age']) # 报错

遍历

>>> knights = {'gallahad': 'the pure', 'robin': 'the brave'}
>>> for k, v in knights.items():
...     print(k, v)
...
gallahad the pure
robin the brave

二进制序列 bytes

  • 元素是0~255间的整数值
  • 常用于处理二进制数据
  • b前缀 / bytes() 函数
x = b"hello"
if x[0] == ord("h"):
    print("The first element is 'h'")

运算符

逻辑运算符

and > or

位运算符

运算符描述实例
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 ,二进制解释: 0000 1100
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。(a | b) 输出结果 61 ,二进制解释: 0011 1101
^按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1。~x 类似于 -x-1(~a ) 输出结果 -61 ,二进制解释: 1100 0011, 在一个有符号二进制数的补码形式。
<<左移动运算符:运算数的各二进位全部左移若干位,由"<<"右边的数指定移动的位数,高位丢弃,低位补0。a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把">>“左边的运算数的各二进位全部右移若干位,”>>"右边的数指定移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111

身份运算符

  • isis not 用于判断两个变量引用的是不是同一个地址
  • 效果和 id(x) == id(y) 一样:id() 用于获取对象内存地址
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值