zoukankan      html  css  js  c++  java
  • 5.垃圾回收机制、交互、运算符、可变不可变类型

    1.垃圾回收机制详解(了解)

    • 栈区与堆区

      • 栈区:变量名与值内存地址的关联关系存放于栈区
      • 堆区:变量值存放于堆区,内存管理回收的是堆区的内容
    • 引用计数

      x = 10	#直接引用:指的是从栈区出发直接引用到内存的地址
      print(id(x))
      
      l = ['a',x]	#间接引用:指的是从栈区出发引用到堆区后,再通过进一步引用才能到达的内存地址,一般指容器型数据
      print(id(l[1]))
      
    • 标记清除:解决引用计数循环引用问题

    • 分带回收:提升回收效率

    2.与用户交互

    • 接收用户输入

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

      age = input("请输入你的年龄: ")
      print(age,type(age))
      age = int(age)	#int只能将纯数字的字符串转化成整形
      

      在python2中:

      raw_input():用法与python3的input一模一样

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

    • 字符串的格式化输出

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

        %s实际上可传入任意数据类型,%d只能接受int

        %%替代%符号

        ①按照位置传值

        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)
        
      • 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)
        

        ③填充特殊数量字符

        print('{x}=========='.format(x='开始执行'))
        print('{x:=<10}'.format(x='开始执行')) # 字符串左对齐,不足10个的用=填充
        print('{x:=>10}'.format(x='开始执行')) # 字符串右对齐,不足10个的用=填充
        print('{x:=^10}'.format(x='开始执行')) # 字符串居中对齐,不足10个的用=填充
        

        ④精度与进制(四舍五入)

        print('{salary:.3f}.format(sarlary=1235.12345)') #精确到小数点后三位
        
      • f:python3.5以后才推出

        ①直接输出,{{}}代表输出{}符号,类似%

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

        ②{}内的字符串可以被当做表达式运行

        res = f'{10+3}'
        print(res)
        
        f'{print('aaa')}'
        
    • print

    print('hello',end='')
    print('world')
    '''          
    helloworld    #空字符替代换行
    '''
    
    print('hello',end='*')
    print('world',end='*')
    '''
    hello*world*		#星号替代换行
    '''
    
    print('hello','world','egon')
    '''
    hello world egon    #逗号替代空格
    '''
    

    3.基本运算符

    3.1算数运算符

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

    3.2赋值运算符

    =:变量的赋值

    • 增量赋值:
    age = 18
    age += 1 # age = age + 1
    print(age)
    
    age *= 3
    age /= 3
    age %= 3
    age **= 3
    
    • 链式赋值
    x = 10
    y = x
    z = y
    z = y = x = 10
    print(x, y, z)
    print(id(x), id(y), id(z))
    
    • 交叉赋值
    m = 10
    n = 20
    print(m, n)
    # 交换值
    # temp = m
    # m = n
    # n = temp
    # print(m,n)
    
    m, n = n, m
    print(m, n)
    
    • 解压赋值
    salaries = [111,222,333,444,555]
    把五个月的工资取出来分诶赋值给不同的变量名
    mom0=salaries[0]
    mom1=salaries[1]
    mom2=salaries[2]
    mom3=salaries[3]
    mom4=salaries[4]
    
    print(mom0)
    print(mom1)
    print(mom2)
    print(mom3)
    print(mom4)
    mom0,mom1,mom2,mom3,mom4=salaries #对应的变量名少一个不行
    
    引入*,可以帮助我们取两头的值,默认不用来取中间的值
    取前三个值
    x,y,z,*_=salaries=[111,222,333,444,555]
    *会将没有对应关系的值存成列表然后赋值给紧跟其后的那个变量名,此处变量名为为_
    
    取后三个值
    *_,x,y,z=salaries=[111,222,333,444,555]
    
    解压字典默认解压出来的是key
    x,y,z=dic={'a':1,'b':2,'c':3}
    print(x,y,z)
    

    4.可变不可变类型

    • 可变类型:值改变,id不变,证明改的是原值,证明原值是可以改变的(list、dict)
    • 不可变类型:值改变,id也变了,证明是产生了新的值,压根没有改变原值,证明原值是不可以被修改的(int、float、str、tuple)
  • 相关阅读:
    SharePoint 2010 网站备份还原简单介绍
    SharePoint 2010 常用技巧及方法总结
    Javascript 中的window.parent ,window.top,window.self 详解
    SharePoint2013 此产品的试用期已结束
    SharePoint 2013 showModalDialog 弹出模式窗口
    SharePoint文档库,如何在新窗口打开中的文件
    sharepoint2013- Office web app server2013详细的安装和部署
    SharePoint 2013 入门教程之入门手册
    SharePoint 解决打开浏览器自动登录
    解决IIS进程回收后第一次访问慢的问题
  • 原文地址:https://www.cnblogs.com/Psc-mmf/p/13904640.html
Copyright © 2011-2022 走看看