zoukankan      html  css  js  c++  java
  • python入门——垃圾回收机制、与用户交互、运算符

    1.1什么是垃圾回收机制

      垃圾回收机制(简称GC)是Python解释器自带一种机,专门用来回收不可用的变量值所占用的内存空间

    1.2为什么要用垃圾回收机制?

      程序运行过程中会申请大量的内存空间,而对于一些无用的内存空间如果不及时清理的话会导致内存使用殆尽(内存溢出),导致程序崩溃,因此管理内存是一件重要且繁杂的事情,而python解释器自带的垃圾回收机制把程序员从繁杂的内存管理中解放出来。

    2.1直接引用与间接引用
    ​   直接引用指的是从栈区出发直接引用到的内存地址。
    ​   间接引用指的是从栈区出发引用到堆区后,再通过进一步引用才能到达的内存地址。

    x = 10  # 直接引用
    print(id(x))
    y = x
    z = x
    print(id(y))
    print(id(z))
    
    l = ['a', 'b', x]  # 间接引用
    print(id(l[2]))  
    
    d = {'mmm': x}  # 间接引用
    print(id(d['mmm']))
    
    x=10
    l=['a','b',x] # l=['a'的内存地址,'b'的内存地址,10的内存地址]
    x=123
    print(l[2])
    print(id(l[2]))

    2.2标记清除

      用来解决循环引用带来的内存泄露问题

      循环引用=>导致内存泄

    2.3分代回收:

      用来降低引用计数的扫描频率,提升垃圾回收的效率

    3.1接收用户的输入input

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

      在python2中,存在一个raw_input功能与python3中的input功能一模一样

      在python2中,还存在一个input功能,需要用户输入一个明确的数据类型,输入什么类型就存成什么类型

      因为Python2的设定不利于使用者,所以在Python3中去除了这一设定。

    3.2字符串的格式化输出
      1 % 

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

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

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

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

      1.2 %s 可以接收任意类型  而%d只能接收整型int

      2 str.format:兼容性好

      2.1按照位置传值

    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.1填充与格式化

    # 先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]
    # *<10:左对齐,总共10个字符,不够的用*号填充
    print('{0:*<10}'.format('开始执行')) # 开始执行******
    
    # *>10:右对齐,总共10个字符,不够的用*号填充
    print('{0:*>10}'.format('开始执行')) # ******开始执行
    
    # *^10:居中显示,总共10个字符,不够的用*号填充
    print('{0:*^10}'.format('开始执行')) # ***开始执行***

      3.2精度与进制

    print('{salary:.3f}'.format(salary=1232132.12351))  #精确到小数点后3位,四舍五入,结果为:1232132.124
    print('{0:b}'.format(123))  # 转成二进制,结果为:1111011
    print('{0:o}'.format(9))  # 转成八进制,结果为:11
    print('{0:x}'.format(15))  # 转成十六进制,结果为:f
    print('{0:,}'.format(99812939393931))  # 千分位格式化,结果为:99,812,939,393,931

      3.3 f:Python3.5以后才推出

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

    4.基本运算符

      4.1算术运算符

       ​ python支持的算数运算符与数学上计算的符号使用是一致的

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

      4.2比较运算符

       比较运算用来对两个值进行比较,返回的是布尔值True或False

    print(10 > 3) #大于
    print(10 < 3) #小于
    print(10 == 10) #等于
    print(10 >= 10) #大于等于
    print(10 <= 3) #小于等于
    print(10 != 3) #不等于

      4.3赋值运算符

       4.3.1增量赋值

    # =:变量的赋值
    #
    age = 18
    age += 1  # 等同于前面的方法  age=age + 1
    print(age)
    #
    # age+=3
    # age-=3
    # age*=3
    # age/=3
    # age//=3
    # age%=3
    # age**=3 # age=age**3

       4.3.2链式赋值

    z = y = x = 10 # 链式赋值
    print(x, y, 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,mon1,mon2,mon3,mon4=salaries
    print(mon0)
    print(mon1)
    print(mon2)
    print(mon3)
    print(mon4)

     

    ps:有些内容借鉴大神:小猿取经

  • 相关阅读:
    Openwrt单独编译某一个模块而不是整个固件
    在ubuntu 14.04 编译android 2.3.1 错误解决办法
    使用cydia substrate 来进行android native hook
    使用Privoxy转化SSH到HTTP代理
    使用xposed 来解阿里ctf-2014 第三题
    一个android dex 转java源码工具
    git CVE-2014-9390 验证以及源码对比
    一键结束port 5037占用
    运动物体检测——光流法(摄像机固定)
    运动目标检测ViBe算法
  • 原文地址:https://www.cnblogs.com/liuxinging/p/12422807.html
Copyright © 2011-2022 走看看