zoukankan      html  css  js  c++  java
  • python学习之垃圾回收机制&输入、输出&运算符

    1、垃圾回收机制

        python中的内存管理机制即垃圾回收机制(GC机制)有两方面的作用,一方面可以缓解内存的压力,防止出现内存溢出;另一方面让程序员从繁杂的内存管理工作中解放出来。

        垃圾回收机制指的是当一个变量值无法被访问到,即无法被使用的时候,这个变量值就成为垃圾,就会被自动清除,释放出一部分内存空间。

        通常情况下,python解释器认为一个变量值的引用计数为零,这个值就无法被使用了,就会被清除掉;但是存在特殊情况,在循环引用的情况下,值已经无法被使用了,但是值的引用计数不为0,这就出现了垃圾不能被清理的情况,内存发生泄漏;另一方面需要对每一个对象都进行引用计数监测,垃圾回收效率低下;为了解决这两个问题,在原有的GC机制之上,python引入了标记清除来解决循环引用带来的内存泄漏问题,引入了分代回收来降低引用计数的扫描频率,提升垃圾回收的效率。

         标记清除:

        标记过程就是遍历栈区中所有的对象,将所有可以直接或间接访问到的对象标记为存活的对象,其余的均为非存活对象。

        清除的过程将遍历堆中所有的对象,将没有标记的对象全部清除掉。

        分代回收:

        核心思想是多次扫描都没有被回收的变量,GC机制就会认为该变量是常用变量,就会降低这个变量的扫描频率;引用计数的扫描频率降低,垃圾回收效率提高;这样做有一个不好的地方,就是可能有极少部分的垃圾不能及时清理,占用了一定的内存空间,但总体上来说,扫描时间变短了,是一种'时间换空间'的策略。

    2、接收用户的输入

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

    username = input("请输入您的账号:")  # "egon"
    print(username, type(username))
    age = input("请输入的你的年龄: ")  # age="18"
    print(age, type(age))
    age=int(age) # int只能将纯数字的字符串转成整型
    print(age > 16)
    int("12345")
    int("1234.5")
    int("1234abc5")
    

        在python2中:
    raw_input():用法与python3的input一模一样
    input(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型

    3、字符串的输出

    3.1 %

    值按照位置与%s一一对应,少一个不行,多一个也不行

    res="my name is %s my age is %s" %('egon',"18")
    res="my name is %s my age is %s" %("18",'egon')
    res="my name is %s" %"egon"
    print(res)
    

    以字典的形式传值,打破位置的限制

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

    %s可以接收任意类型

    print('my age is %s' %18)
    print('my age is %s' %[1,23])
    print('my age is %s' %{'a':333})
    print('my age is %d' %18) # %d只能接收int
    print('my age is %d' %"18")
    

    3.2 str.format:兼容性好

    按照位置传值

    res='我的名字是 {} 我的年龄是 {}'.format('egon',18)
    print(res)
    
    res='我的名字是 {0}{0}{0} 我的年龄是 {1}{1}'.format('egon',18)
    print(res)
    

    打破位置的限制,按照key=value传值

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

    3.3 f:python3.5以后才推出

    x = input('your name: ')
    y = input('your age: ')
    res = f'我的名字是{x} 我的年龄是{y}'
    print(res)
    

    4、运算符

    4.1 算数运算符

    print(10 + 3.1)
    print(10 + 3)
    print(10 / 3)  # 结果带小数
    print(10 // 3)  # 只保留整数部分
    print(10 % 3) # 取模、取余数
    print(10 **3) # 幂
    

    4.2 比较运算符:>、>=、<、<=、==、!=

    print(10 > 3)
    print(10 == 10)
    
    print(10 >= 10)
    print(10 >= 3)
    
    name=input('your name: ')
    print(name == 'egon')
    

    4.3 赋值运算符

    4.3.1增量赋值

    age = 18
    age += 1  # age=age + 1
    print(age)
    
    age*=3
    age/=3
    age%=3
    age**=3  # age=age**3
    

    4.3.2 链式赋值

    x=10
    y=x
    z=y
    z = y = x = 10 # 链式赋值
    print(x, y, z)
    print(id(x), id(y), id(z))
    

    4.3.3交叉赋值

    m=10
    n=20
    print(m,n)
    

    交换值

    temp=m
    m=n
    n=temp
    print(m,n)
    
    m,n=n,m # 交叉赋值
    print(m,n)
    

    4.3.4解压赋值

    salaries=[111,222,333,444,555]
    

    把五个月的工资取出来分别赋值给不同的变量名

    mon0=salaries[0]
    mon1=salaries[1]
    mon2=salaries[2]
    mon3=salaries[3]
    mon4=salaries[4]
    

    解压赋值

    mon0,mon1,mon2,mon3,mon4=salaries
    print(mon0)
    print(mon1)
    print(mon2)
    print(mon3)
    print(mon4)
    
    mon0,mon1,mon2,mon3=salaries # 对应的变量名少一个不行
    mon0,mon1,mon2,mon3,mon4,mon5=salaries # 对应的变量名多一个也不行
    

    引入

    *,可以帮助我们取两头的值,无法取中间的值取前三个值
    x,y,z,*_=salaries=[111,222,333,444,555] # *会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,此处为_
    print(x,y,z)
    print(_)
    

    取后三个值

    *_,x,y,z=salaries=[111,222,333,444,555]
    print(x,y,z)
    
    x,*_,y,z=salaries=[111,222,333,444,555]
    print(x,y,z)
    
    salaries=[111,222,333,444,555]
    _,*middle,_=salaries
    print(middle)
    

    解压字典默认解压出来的是字典的key

    x,y,z=dic={'a':1,'b':2,'c':3}
    print(x,y,z)
    
  • 相关阅读:
    标签切换JS代码
    use selenium in scrapy webdriver
    scrapy yield Request
    爱拼图游戏android源码完整版
    ios球体弹跳游戏源码
    android版猜拳游戏源码分享
    萝卜家园32位和64位Win7系统Ghost版
    Android开发教程大全介绍
    怎样可以让你抓住数字教育产品新机遇
    Android版年年有鱼游戏源码
  • 原文地址:https://www.cnblogs.com/leilijian/p/12423521.html
Copyright © 2011-2022 走看看