python基本数据类型和变量

python数据类型,专栏总目录

1.python基本数据类型和变量

2.python高级特性

 

1、基本数据类型和变量

1.1、基本类型

整数:正数、负数、0。如1,0,-1。进制表示0x表16进制。

浮点数:数学写法。1.23, -9.01。科学计数法,把10用e表示。1.2e2=120,1.2e-1=0.12。

布尔型:True,False两种值。可以用and、or和not运算。

1.2、强制装换

数据类型转换函数是Python内置的常用函数,比如int()函数可以把其他数据类型转换为整数等等。

>>> int('123')
123
>>> int(12.34)
12
>>> float('12.34')
12.34
>>> str(1.23)
'1.23'
>>> bool(1)
True
>>> bool('')
False
>>> hex(18)
'0x12'

注:不能直接将float型字符串转为int。如int('12.34')会报错,实际调用应为int(float('12.34'))

1.3、常量/变量

1、常量

所谓常量就是不能变的变量,比如常用的数学常数π就是一个常量。在Python中,通常用全部大写的变量名表示常量:

PI = 3.14159265359

但事实上PI仍然是一个变量,Python根本没有任何机制保证PI不会被改变,所以,用全部大写的变量名表示常量只是一个习惯上的用法,如果你一定要改变变量PI的值,也没人能拦住你。

2、理解变量

当我们写:a = 'ABC'时,Python解释器干了两件事情:

1)在内存中创建了一个'ABC'的字符串;

2)在内存中创建了一个名为a的变量,并把它指向'ABC'。

也可以把一个变量a赋值给另一个变量b,这个操作实际上是把变量b指向变量a所指向的数据,例如下面的代码:

a = 'ABC'
b = a
a = 'XYZ'
print(b) # 'XYZ' 

最后一行打印出变量b的内容到底是'ABC'呢还是'XYZ'?如果从数学意义上理解,就会错误地得出b和a相同,也应该是'XYZ',但实际上b的值是'ABC',让我们一行一行地执行代码,就可以看到到底发生了什么事:

执行a = 'ABC',解释器创建了字符串'ABC'和变量a,并把a指向'ABC':

执行b = a,解释器创建了变量b,并把b指向a指向的字符串'ABC':

执行a = 'XYZ',解释器创建了字符串'XYZ',并把a的指向改为'XYZ',但b并没有更改:

所以,最后打印变量b的结果自然是'ABC'了。

if x:只要x是, x非零数值、非空字符串、非空list等,就判断为True,否则为False。

2、list

list是一种有序的集合,可以随时添加和删除其中的元素,python里面list元素可以是不同数据类型的。

2.1、索引

从0开始,越界后报错;支持反向索引,-1为最后一元素,-len为第一个元素。

classmates[-2] => 'Bob';
classmates[0] => 'Michael';
classmates[3] => Traceback (most recent call last):
  File "<stdin>", line 1, in <module> IndexError: list index out of range;

2.2、尾追加元素append

>>> classmates.append('Adam')
>>> classmates
['Michael', 'Bob', 'Tracy', 'Adam']

2.3、插入元素到指定位置insert

>>> classmates.insert(1, 'Jack')  # 插入到索引为1的位置,原元素后移。
>>> classmates
['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']

2.4、弹出制定位置元素pop

>>> classmates.pop()  # 弹出最后一元素。
'Adam'
>>> classmates.pop(1)  # 弹出索引为1的元素。
'Jack'

2.5、list元素数据类型可以不一样

>>>  L = ['Apple', 123, True]
或 >>> p = ['asp', 'php']
>>> s = ['python', 'java', p, 'scheme']

2.6、list元素扩展

a = [1]
print(a*5) => [1, 1, 1, 1, 1]

3、tuple

另一种有序列表叫元组:tuple。tuple一旦初始化就不能修改,所以在定义的时候,tuple的元素就必须被确定下来。它也没有append(),insert()这样的方法。其他获取元素的方法和list是一样的,你可以正常地使用classmates[0],classmates[-1],但不能赋值成另外的元素。

3.1、初始化

>>> classmates = ('Michael', 'Bob', 'Tracy')
>>> classmates
('Michael', 'Bob', 'Tracy')

定义空tuple, t = ()

定义一个元素的tuple, t = (1,) # 一个元素时,必须加","以消除歧义。

3.2、一个"可变的"tuple"

list的指针不能变,list本身的内容是可变的。

>>> t = ('a', 'b', ['A', 'B'])
>>> t[2][0] = 'X'
>>> t[2][1] = 'Y'
>>> t
('a', 'b', ['X', 'Y'])

4、dict

dict全称dictionary,在其他语言中也称为map,使用键-值(key-value)存储,具有极快的查找速度。dict内部存放的顺序和key放入的顺序是没有关系的。

4.1、初始化

>>> d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
>>> d['Michael']
95

key不存在,dict就会报错。

4.2、判断key是否存在(key in dict)

>>> 'Thomas' in d  # False
>>> d.get('Thomas')  # none
>>> d.get('Thomas', -1)  # -1  #指定不存在时,返回的值

4.3、字典安全访问-get

通过get方法安全访问,有则给出value值,无则使用默认值,格式:dict.get(key, default)。

a = {"a":1, "b": 2}
print(a.get("a", None)) # 1
print(a.get("a", 1)) # 1
print(a.get("c", None)) # None
print(a.get("c", 1)) # 1

4.4、删除key => pop

>>> d.pop('Bob')
75
>>> d
{'Michael': 95, 'Tracy': 85}

或:

del d["Bob"]

4.5、key可以为Bool型,使用时会自动转换,也可以为数字

a = {True: 1, False: 2}
print(a[True]) # 1
print(a[False]) # 2
print(a[1]) # 1
print(a[0]) # 2

5、set

重复元素在set中自动被过滤,要创建一个set,需要提供一个list作为输入集合。显示的顺序也不表示set是有序的。

5.1、初始化

>>> s = set([1,1,1, 2, 3,3])
>>> s
{1, 2, 3}

5.2、添加元素add

>>> s.add(4)
>>> s
{1, 2, 3, 4}

5.3、删除元素remove

>>> s.remove(4)
>>> s
{1, 2, 3}

5.4、相交or合并

>>> s1 = set([1, 2, 3])
>>> s2 = set([2, 3, 4])
>>> s1 & s2
{2, 3}
>>> s1 | s2
{1, 2, 3, 4}

6、再议不可变对象

上面我们讲了,str是不变对象,而list是可变对象。

对于可变对象,比如list,对list进行操作,list内部的内容是会变化的,比如:

>>> a = ['c', 'b', 'a']
>>> a.sort()
>>> a
['a', 'b', 'c']

而对于不可变对象,比如str,对str进行操作,str内部的内容是不变的,如:

>>> a = 'abc'
>>> a.replace('a', 'A')
'Abc'
>>> a
'abc'

虽然字符串有个replace()方法,也确实变出了'Abc',但变量a最后仍是'abc',应该怎么理解呢?

 

我们先把代码改成下面这样:

>>> a = 'abc'
>>> b = a.replace('a', 'A')
>>> b
'Abc'
>>> a
'abc'

要始终牢记的是,a是变量,而'abc'才是字符串对象!有些时候,我们经常说,对象a的内容是'abc',但其实是指,a本身是一个变量,它指向的对象的内容才是'abc':

当我们调用a.replace('a', 'A')时,实际上调用方法replace是作用在字符串对象'abc'上的,而这个方法虽然名字叫replace,但却没有改变字符串'abc'的内容。相反,replace方法创建了一个新字符串'Abc'并返回,如果我们用变量b指向该新字符串,就容易理解了,变量a仍指向原有的字符串'abc',但变量b却指向新字符串'Abc'了:

所以,对于不变对象来说,调用对象自身的任意方法,也不会改变该对象自身的内容。相反,这些方法会创建新的对象并返回,这样,就保证了不可变对象本身永远是不可变的。

 

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

jingbo1801

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值