Python3自动化运维 - 02 数据类型及引用计数

基础语法

向屏幕输出

print()

>>> print('hello world')
hello world

基础数据类型

整型 int

>>> 1111111111235456
1111111111235456
>>> type(1111111111235456)
print()
<class 'int'>
# 在python3中已经删除长整型

浮点型 float

>>> 1.5
1.5
>>> type(1.5)
<class 'float'>

运算(整型、浮点型)示例:
>>> 1 + 1
2
>>> 3.0 - 1
2.0
# 在python3中,运算之后的结果,首先默认会向参加运算的复杂类型靠拢(整型 - 浮点型 = 浮点型)

>>> 5 / 2 
2.5
# 在python3中,除法的结果会自动向浮点型靠拢(python2不是,结果会是2)

复数 complex

>>> 2 + 3j
(2+3j)
>>> type (2+3j)
<class 'complex'>
# 复数虚部结尾一般以大J或小j结尾

>>> aa=123-12j
>>> print (aa.real)
123.0
>>> print (aa.imag)
-12.0

布尔型 bool

>>> True
True
>>> False
False

>>> type (True)
<class 'bool'>

# True(非0,非空)  False(0)
# bool值做计算时,True为1  False为0

>>> True + True
2
>>> False + False
0
>>> True + False
1

# 注意:true不是bool
>>> true
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'true' is not defined

字符串 str

# 单引号
>>> ' abc '
' abc '
>>> type (' abc ')
<class 'str'>

>>> type(str)
<class 'type'>

# 双引号
>>> "abc"
'abc'

# 3个单引号
>>> '''abc'''
'abc'

# 3个双引号(可以换行来写)
>>> """abc
... """
'abc\n'

>>> 'Po say: "today is a good weather"'
'Po say: "today is a good weather"'

# 斜杠可以避免转义
>>> 'Po say: \"today is a good weather\"'
'Po say: "today is a good weather"'

# 加r也可以避免转义 ,但是要注意 这里斜杠不能写到字符串的结尾
>>> r"C:\a"
'C:\\a'

# 声明变量
>>> mystr = 'abc'
>>> mystr
'abc'

字符串-索引

# 从左向右访问:索引从0开始
>>> mystr[0]
'a'
>>> mystr[1]
'b'
>>> mystr[2]
'c'
>>> mystr[3]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range  # 访问到字符串的位置 大于了他最大的索引值上限

# 从右向左访问:索引从-1开始
>>> mystr[-1]
'c'
>>> mystr[-2]
'b'
>>> mystr[-3]
'a'
>>> mystr[-4]
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
IndexError: string index out of range

字符串-切片

# 切片操作,是左闭右开的,结束索引的值不会被取到
>>> mystr = 'abcdefg'
>>> mystr[:]
'abcdefg'
>>> mystr[1:3]
'bc'
>>> mystr[1:4]
'bcd'

>>> mystr[-5:]
'cdefg'

>>> mystr[:4]
'abcd'

# 字符串相加,代表拼接
>>> mystr1='1234567'
>>> mystr + mystr1
'abcdefg1234567'

# 字符串相乘,代表叠加
>>> newstr = mystr * 3
>>> newstr
'abcdefgabcdefgabcdefg'

列表 list

>>> mylist = [1,2,3,4]
>>> type(mylist)
<type 'list'>

# 列表可以存储各种各样的数据
>>> mylist = [1,2,3,4,'a','b','c',[1,2,3]]

# 列表支持索引、切片
>>> mylist[1]
2
>>> mylist[3:6]
[4, 'a', 'b']
>>> mylist[-5:-2]
[4, 'a', 'b']

>>> mylist[-1][1]
2

# 练习:单独取出以下列表中的a
>>> mylist = [1,2,3,[1,[2,3,4,[3,2,[4,'a'],2]],3],'b']
>>> mylist[-2][-2][-1][-2][-1]
'a'

>>> mylist[3][1][3][2][1]
'a'

# 列表的值是可变的
>>> mylist[0] = 'a'
>>> mylist
['a', 2, 3, [1, [2, 3, 4, [3, 2, [4, 'a'], 2]], 3], 'b']

# 字符串的值是不可变的
>>> mystr
'abcdefg'
>>> mystr[0]
'a'
>>> mystr[0] = '1'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'str' object does not support item assignment

# 验证列表内存地址指向的值是可变的,字符和整形是不可变的
>>> mylist = [1,2,3,4,5]
>>> id(mylist)
140452016060464
>>> mylist[0] = 'a'
>>> mylist
['a', 2, 3, 4, 5]
>>> id(mylist)
140452016060464

>>> a = 1
>>> id(a)
9330880
>>> a = 2
>>> id(a)
9330912

#列表可拼接(+)
>>> mylist + mylist
['a', 2, 3, 4, 5, 'a', 2, 3, 4, 5]

# 列表可叠加(*)
>>> mylist * 3
['a', 2, 3, 4, 5, 'a', 2, 3, 4, 5, 'a', 2, 3, 4, 5]

元组tuple

>>> mytuple = (1,2,3,4,5,[1,2,3],('a','b'))
>>> type(mytuple)
<class 'tuple'>

# 支持索引和切片
>>> mytuple[0]
1
>>> mytuple[-1]
('a', 'b')
>>> mytuple[:]
(1, 2, 3, 4, 5, [1, 2, 3], ('a', 'b'))

# 元组是不可修改的
>>> mytuple[0] ='a'
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'tuple' object does not support item assignment

# 元组可拼接(+)
>>> mytuple + mytuple
(1, 2, 3, 4, 5, [1, 2, 3], ('a', 'b'), 1, 2, 3, 4, 5, [1, 2, 3], ('a', 'b'))

# 元组可叠加(*)
>>> mytuple * 3
(1, 2, 3, 4, 5, [1, 2, 3], ('a', 'b'), 1, 2, 3, 4, 5, [1, 2, 3], ('a', 'b'), 1, 2, 3, 4, 5, [1, 2, 3], ('a', 'b'))

# 类型转换 列表->元组
>>> mylist
['a', 2, 3, 4, 5]
>>> tuple(mylist)
('a', 2, 3, 4, 5)

>>> tuple(mylist) + mytuple
('a', 2, 3, 4, 5, 1, 2, 3, 4, 5, [1, 2, 3], ('a', 'b'))

# 删除误用关键字定义的变量
>>> tuple = 1
>>> tuple
1
>>> tuple()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: 'int' object is not callable

# del用来删除定义的变量
>>> del tuple      
>>> tuple()
()

变量

  1. Python中的变量不需要先定义,可以直接赋值使用(要想使用必须先赋值)
  2. 命名风格,不能和系统函数和关键字重名,也不要和模块名相同
  3. 变量名大小写是敏感的,变量名只能是字母、数字、下划线,数字不能打头
  4. 可以同给给多个变量赋值

    >>> a,b = 1,2
    >>> a
    1
    >>> b
    2
    
  5. 变量的引用计数

    >>> a = 1
    >>> b = a
    >>> id(a)
    9330880
    >>> id(b)
    9330880
    
    >>> a = 'abc'
    >>> b = a
    >>> id(a)
    140160997615408
    >>> id(b)
    140160997615408
    
    # 查看引用计数(除了a,b外,还有22个在用  python解析器在用)
    >>> import sys
    >>> sys.getrefcount(a)
    24
    >>> sys.getrefcount(b)
    24
    >>> del b
    >>> sys.getrefcount(a)
    23
    # 引用计数为0时,这块内存被回收
    

总结

  • 可变/可修改内部值:list
  • 不可变/不可修改内部值:number、str、tuple
  • 不能做切片索引:number
  • 能切片索引:str、list、tuple
  • 元组和列表的区别,就是在于能否修改其内部的元素
文章目录
  1. 1. 基础语法
  2. 2. 基础数据类型
    1. 2.1. 整型 int
    2. 2.2. 浮点型 float
    3. 2.3. 复数 complex
    4. 2.4. 布尔型 bool
  3. 3. 字符串 str
    1. 3.1. 字符串-索引
    2. 3.2. 字符串-切片
  4. 4. 列表 list
  5. 5. 元组tuple
  6. 6. 变量
  7. 7. 总结