• python入门005


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

    1、引用计数

    x = 10 # 直接引用
    print(id(x))
    y = x
    z = x

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

    x=10
    x=[10,]

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

    2、标记清除:用来解决循环引用带来的内存泄露问题

    循环引用=>导致内存泄露
    l1 = [111, ]
    l2 = [222, ]

    l1.append(l2) # l1=[值111的内存地址,l2列表的内存地址]
    l2.append(l1) # l2=[值222的内存地址,l1列表的内存地址]

    print(id(l1[1]))
    print(id(l2))

    print(id(l2[1]))
    print(id(l1))

    print(l2)
    print(l1[1])

    del l1
    del l2

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

    一:接收用户的输入

    在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(): 要求用户必须输入一个明确的数据类型,输入的是什么类型,就存成什么类型

    age=input(">>>>>>>>>>>>>>>>>>>>>: ")

    : 18
    age,type(age)
    (18, <type 'int'>)

    x=input(">>>>>>>>>>>>>>>>>>>>>: ")

    : 1.3
    x,type(x)
    (1.3, <type 'float'>)

    x=input(">>>>>>>>>>>>>>>>>>>>>: ")

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

    二:字符串的格式化输出

    2.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")

    2.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)

    了解知识

    """

    2.4 填充与格式化

    先取到值,然后在冒号后设定填充格式:[填充字符][对齐方式][宽度]

    <10:左对齐,总共10个字符,不够的用号填充

    print('{0:<10}'.format('开始执行')) # 开始执行*****

    >10:右对齐,总共10个字符,不够的用号填充

    print('{0:*>10}'.format('开始执行')) # ******开始执行

    ^10:居中显示,总共10个字符,不够的用号填充

    print('{0:*^10}'.format('开始执行')) # 开始执行
    2.5 精度与进制

    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

    """

    2.3 f:python3.5以后才推出
    x = input('your name: ')
    y = input('your age: ')
    res = f'我的名字是{x} 我的年龄是{y}'
    print(res)

    1、算数运算符

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

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

    print(10 > 3)
    print(10 == 10)

    print(10 >= 10)
    print(10 >= 3)

    name=input('your name: ')
    print(name == 'egon')

    3、赋值运算符

    3.1 =:变量的赋值
    3.2 增量赋值:
    age = 18

    age += 1 # age=age + 1

    print(age)

    age*=3
    age/=3
    age%=3
    age=3 # age=age3

    3.3 链式赋值

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

    3.4 交叉赋值

    m = 10
    n = 20
    print(m,n)
    交换值
    temp=m
    m=n
    n=temp
    print(m,n)

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

    3.5 解压赋值

    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)

    作者:Joab
    本文版权归作者和博客园所有,欢迎转载,转载请标明出处。
    如果您觉得本篇博文对您有所收获,请点击右下角的 [推荐],谢谢!
  • 相关阅读:
    javaScript面向对象继承方法经典实现
    javascript面向对象之Javascript 继承
    js面向对象 多种创建对象方法小结
    JavaScript 三种创建对象的方法
    正常上线的流程
    java.lang.NoClassDefFoundError: javax/servlet/ServletInputStream
    org/eclipse/jetty/util/component/Container$Listener
    java.io.IOException: Cannot find any registered HttpDestinationFactory from the Bus.
    java.lang.NoClassDefFoundError: javax/wsdl/extensions/ElementExtensible
    java.lang.ClassNotFoundException: org.objectweb.asm.ClassWriter
  • 原文地址:https://www.cnblogs.com/linqiaobao/p/12430317.html
Copyright © 2020-2023  润新知