垃圾回收机制详解、运算符和格式化输出

不想你离开。 提交于 2020-03-05 18:20:39

垃圾回收机制详解、运算符和格式化输出

一、垃圾回收机制的原理

  当我们定义变量的时候,会申请一块内存空间用来存放变量值,然后利用赋值符号将变量名和变量值绑定在一起,接下来我们在使用变量值得时候就可以通过变量名来找到那块内存空间了。

1 垃圾回收的原则

  引用一般分为直接引用和间接引用。无论是直接引用还是间接引用,当变量值的被引用次数变为o的时候,就会被看做垃圾被系统的垃圾回收机制回收。

1.1 直接引用

  我们直接进行将变量名与变量值绑定关系就被称为直接引用。一个变量值可以被引用很多次。

# 下面的变量都是直接引用
my_love = "美女"
your_love = "护士"
he_love = your_love

1.2 间接引用

当变量值被容器性质的数据类型引用的时候,就是属于间接引用。

your_love = "护士"

# 下方列表的引用属于间接引用
my_loves = ["空姐",your_love]

1.3 标记清除

l1 = [1,2]
l2 = [3,4]
# 两个列表互相引用
l1.append(l2)
l2.append(l1)

# 删除两个列表
del l1
del l2

  上面两个列表变量名在被我们删除以后,变量值互相引用,所以引用次数为1,但是我们却不需要这一块变量值了,这个时候,就用到标记清除了,首先我们要知道,变量名和变量值不在一块空间。

  解释器每隔一段时间扫描一下变量名,然后顺着变量名的绑定关系将变量值进行标记,在全部扫描之后,凡是被顺藤摸瓜的变量值都会存活,而其他未标记的则会被删除

1.4分代回收

  如果解释器抑制不同的扫描会加大内存负担,所以Python内部将变量名分根据权重三个部分,。

  1. 新生代。扫描频率较高,在几次扫描之后依然存在会被送到下一级。
  2. 青春代。扫描频率减少,在几次扫描之后依然存在会被送到下一级。
  3. 老年代。扫描频率继续减少,已经是位高权重的大佬了。

二、运算符

  运算符分为算术运算符、比较运算符、赋值运算符、解压运算符、逻辑运算符、身份运算符、成员运算符。

2.1 算术运算符

  算术运算符就是进行数学运算。

# 加法
print(10+10) 

# 减法
print(10-10)

# 乘法
print(10*10)

# 除法
print(10/10)

# 取整
print(10//10)

# 取余
print(10%10)

2.2 比较运算符

比较运算符 意义
> 大于
>= 大于等于
< 小于
<= 小于等于
!= 不等于
== 等于

2.3 赋值运算符

  复制运算符就是使用等于号 =。有以下几个骚套路。

# 赋值
a = 90 

# 增量赋值.
a += 1  # a = a + 1
a -=1  # a = a - 1
a *=1  # a = a * 1
a /=1  # a = a / 1

# 链式赋值
x = q = 12

# 交叉赋值
w = 12
e = 34
w, e = 34, 12
print(w,e)

# 解压赋值
# 注意,一般都使用 *_ 来匹配不用的变量,约定俗成。
l1 = [1,2,3,4,5]
a, b, c,d ,e = l1[:] # 逐个赋值
*_,e = l1  # 只取末尾赋值

2.4 逻辑运算符

2.5 成员运算符

2.6 身份运算符

三、格式化输出

  格式化输出已拥有三种方式。

3.1 % 占位符

  利用% 来当占位符已经是计算机的传统了。

name = "Tom"
age = 18

# %s 可以接受任何数据类型。

# 按照顺序赋值,必须一一对应。
print("%s is %s." %(name,age) )

# 按照字典的顺序赋值
print("%(name)s is %(age)s." % {"name": "tom","age": 18})

3.2 str.format()

  是字符串的一种方法,括号内可以穿进去参数。推荐使用这个方法。

name = "Tom"
age = 18

# 按照位置传值
print("{} is{}".format(name,age))

# 按照索引传值
print("{1} is {0}".format(age,name))

# 按照字典传值
print("{name} is {age}".format(name="tom",age=18))

3.3 f""

  这个版本是3.5版本之后出现的方法

my_name = "tom"
your_name = "jerry"
res = f"我的名字是{my_name},你的名字是{your_name}"
print(res)
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!