Day04:垃圾回收机制详解、格式化输出

1. 垃圾回收机制详解

1. 1 引用计数

  1. 直接引用
    # 先定义然后直接输出
    x = 10
    print(x)
  2. 间接引用
    x = 10
    l = ['aaa',x]
    print(l[1])

 举一个简单的例子:

x = 10
l = ['a','b',x] 

x = 123
print(l[2]) =====> 输出结果是:10

print(x) =====> 输出结果是:123

1.2 标记清除

  1. 循环引用
    l1 = [111,]
    l2 = [222,]
    
    l1.append[l2]
    l2.append[l1]
    
    l1 = [ 值l1的地址,值l2的地址 ]
    l2 = [ 值l2的地址,值l1的地址 ]
    
    dl l1
    dl l2

    如果这时候清除 l1和 l2 ,就是把它们两个的直接引用清除了,但是间接引用没有被清除,所以说这个垃圾回收不了,这就会导致内存泄漏

  2. 内存泄漏的解决方式------->标记清除

         内存中有三个存储区:栈区、堆区、其他区。

        栈区:是用来存储一个变量的变量名

        堆区:是用来存储一个变量的值

        标记清除:它的工作原理是:先将扫描栈区里面的变量名将其清除,然后再扫描堆区里循环引用的间接引用的东西将其清除,它是Python解释器中自带的清楚机制

     3. 分代回收

        分代回收意思就是,举个例子:一个班级有50换个学生,老师检查作业,第一次老师检查完有40个学生写了作业,第二次检查作业有35个人写了作业,第三次还是35个人写了作业;那么老师这时候就重点检查35个人之外的人,这样大大解决了老师的麻烦根据存活时间来为变量划分不同的等级;新生代的变量,放到新生代这个等级中,假设每隔一分钟扫描新生代一次,结果发现这个变量依然被使用,那么这样会大大增加效率问题

2.用户交互之接收用户输入

  • 用户交互:对方给你给什么,你给对方反馈什么,这个就识别一个简单的交互吧
  • 接收用户输入:

        在python3中:

                input会将用户输入的所有内容都存成字符串类型

user = input("请输入您的账号:")
print(user,type(user))

        在python2中:

                raw_input

                input():要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型

>>> x = input('')
>>> [1,2,3]
>>> x,type(x)
>>> ( [1,2,3], <type 'list'> )

  3.格式化输出

  1.  %号输出 

        1.1 直接在%后面传值

res = '我的名字是%s 我的年龄是%s' %("zt","18")

print(res) =====> 输出结果是:我的名字是zt 我的年龄是18

         1.2 用字典来传值

res = '我的名字是%()s 年龄是%()s' %{'name':'zt',
                                   'age':'18'}

     2. str.format 输出(python2.6版本发布的,兼容性好)

        2.1 按照位置传值

res = 'my name is {} age is {}'.format('zt','18')


# 扩展

print('{x}==========='.format(x ="开始执行"))     # 结果是:开始执行===========

print('{x:=<10}'.format(x="开始执行"))    # 结果是:总共10个字符文字居左显示 (开始执行======)

print('{x:=^10}'.format(x ="开始执行"))   # 结果是:总共10个=文字居中显示 (===开始执行===)

print('{salary:.3f}'.format(salary = 123.1235))  # 小数点保留三位数字

        2.2 按照 key = value 来进行传值

res = '我的名字是 {name} 我的年龄是 {age}'.format(name='zt',age=18)

     3. f 进行输出(python3.5版本发布的)

name = input('your name:')
age  = input('your age:')
res = f 'my name is {name} age is {age}'

总结:

        运行速率:f > format > %s (更建议用format,因为它的兼容还行非常的好)

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值