zoukankan      html  css  js  c++  java
  • Python的第3堂课

    20181119笔记

    一、内存管理相关

    ①Cpython解释器的垃圾回收机制

    什么是垃圾:当一个值没有被绑定任何变量名(即该值的引用计数为零时),该值就是垃圾。

    垃圾回收是收回值占用的内存空间。

    引用计数增加:
    age=18   # 18的引用计数为1
    x=18     # 18的引用计数为2
    print(age)
    print(x)
    引用计数减少:
    age=19  #18的引用计数变为1
    del x #18的引用计数变为0,del是解除变量名与值的绑定关系,并不能简单地理解为删除
    ②变量值的三个特征

    id:反应的是内存地址

    type:数据类型

    值:

    age=18
    print(id(age))
    print(type(age))
    print(age)

    总结:id相同,值一定相同

    值相同,id可以不同

    cmd下测试:
    >>> x='name:egon age:18***'
    >>> y='name:egon age:18***'
    >>> id(x)
    2847698422856
    >>> id(y)
    2847698422928
    ③比较运算符==和身份运算符is的区别

    ==:验证值是否相等

    is:id是否相等(即内存地址是否一致)

    ④可变类型和不可变类型

    可变类型:值改变,id不变,证明就是在改变原值

    不可变类型:值改变,id也变,证明根本不是在改变原值,而是创建了新值,原值就是不可变类型

    >>> x=10
    >>> print(id(x))
    1924296448
    >>> x=12
    >>> print(id(x))
    1924296512
    a=['alex','123','www.z.cn','egon']
    print(id(a))
    a[0]='baidu'
    print(a)
    print(id(a))
    输出结果为:
    2431705698248
    ['baidu', '123', 'www.z.cn', 'egon']
    2431705698248
    ⑤用户态与内核态

    内核态: CPU可以访问内存所有数据,包括外围设备,例如硬盘,网卡。 CPU也可以将自己从一个程序切换到另一个程序。

    用户态:只能受限的访问内存,且不允许访问外围设备。占用CPU的能力被剥夺,CPU资源可以被其他程序获取。

    ⑥小整数池

    对整数N [-5, 256],解释器对他们做了单独的处理,放进了固定的内存中,不因每次运行而变化。

    不仅对小整数有这样的处理,内建的类(int,staticmamethod,object,TypeError,,,)也都是这样处理的。 看一个变量的内存是不是这样处理的,无需运行两次,只要看id()编号的长度就行,它们都是10位的,普通变量都是十三位的。 其实并不是每次运行结果都是一样的,比如重启一下电脑再试试。 不同的软件打开的同一个python解释器结果也是不同的(最先打开的那个会影响其他的),比如先打开pycharm、cmd、jupyter得到的是不同的结果。只要把解释器全部关闭再打开某一个,其余的都会是这个软件的值。电脑不关机的话,软件重复关闭打开id值是一样的。

    ·cmd下:
    >>> print(id(1))
    1923378656
    >>> print(id(666))
    1857984630576
    ·pycharm下:
    print(id(1))
    print(id(666))
    1923378656
    2061107886992

    二、python2与python3中不同的一点

    ①在python3中只有一个input:

    特点:会将用户输入的任意内容都存成str类型。

    ②在python2中,与python3中input相同的是raw_input;

    python2中input要求必须输入一个明确的类型,输入的类型是什么就是什么类型。

    三、数据类型的基本使用

    python3中数据类型主要有以下七种:

     

     

     

    1、数字类型

    ①整型int

    作用:用来记录年龄、号码等状态

    定义:age=10 # age=int(10)

    print(type(age))

    ②浮点型float

    作用:用来记录身高、体重等状态

    定义:salary=3.1 # salary=float(3.1)

    print(type(salary))

    2、字符串类型str

    作用:用来记录描述性质的状态,比如名字、性别

    定义:在单引号('')、双引号("")、三引号(""" """,''' ''')中包含一系列的字符

    x='abc' # x=str('abc')

    print(type(x))

    其中如果字符串中已经有单引号时,注意就不可以再使用单引号了:

    a="I'm good boy."

    如果字符串需要换行,则必须使用三引号:

    x="""
    go
    stop
    go on
    """

    字符串可以直接相加或相乘:

    a="I'm a "
    b='good boy.'
    print(a+b)
    I'm a good boy.
    print('abc'*3)   # *后面只能是数字
    'abcabcabc'

    字符串也可以比较大小(依据ASCII表编码):

    x='job'
    y='zzz'
    print(x>y)
    print('z'<'a')
    注意:字符串不能和数字比大小
    3、列表类型list

    作用:用来记录多个值,用索引对应值,索引反映的是位置。

    定义:在[]内用逗号分隔开多个任意类型的值。

    eg:x=[1,2.3,'abc',['a','b','c']] # 列表可以嵌套列表

    使用:print(x[0]) #索引从0开始,即0是第一个

    print(x[3]#[0]) # 去掉中间#号,系统原因,无法连续两个方括号。

    4、字典类型dict

    作用:用来记录多个值,用key对应value,其中key对value有描述的功能 定义:在{}内,用逗号分隔多个元素,每一个元素都是key:value的形式,其中value可以是任意类型,而key通常是str类型。 d={'x':'1','z':[1,2],a:{'aaa':'123'}} 使用:print(d['x'])

    print(d['a']#['aaa']) # 去掉中间#号,系统原因,无法连续两个方括号。

    5、布尔类型:

    True False 所有数据类型自带布尔值 布尔值为假的的数据类型:0,None,空

    6、 None

    print(type(None))

    <class 'NoneType'>

    四、基本运算符

    1、比较运算符

    所有的比较运算符返回1表示真,返回0表示假,等同于True和False。比较运算符只能返回真或者假。Python2中<>表示不等于。

    ==等于:比较对象是否相等
    != 不等于:比较两个对象是否不想等
    > 大于:返回是否大于
    < 小于:返回是否小于
    >= 大于等于:返回是否大于等于
    <= 小于等于:返回是否小于等于
    2、逻辑运算符

    and:连接左右两个条件,只有两个条件同时成立时and运算的结果为True

    or:连接左右两个条件,两个条件成立任意一个or运算的结果就为True

    not:not是对紧跟其后的取反 is not

    假设a=10,b=20

    运算符逻辑表达式描述实例
    and x and y 布尔“与”:如果x为False,x and y就返回False,否则返回y的计算值 (a and b)返回20
    or x or y 布尔“或”:如果x是非0,就返回x的值,否则返回y的计算值 (a or b)返回10
    not not x 布尔“非”:如果x为True,就返回False,如果x为False,就返回True。 not(a and b)返回False
  • 相关阅读:
    C++ const
    facebook hacker cup 2013资格赛第二题
    最大全1子矩阵
    java HashMap的keyset方法
    树状数组
    Java entry
    一个数学证明:1(1x1)(1x2)...(1xn)<=x1+x2+...+xn, xi在[0,1]
    传教士野蛮人过河问题python
    在cmd中为命令设置别名以及启动cmd时自动执行bat
    合取Λ,析取V,容易记混吗?
  • 原文地址:https://www.cnblogs.com/realadmin/p/9984118.html
Copyright © 2011-2022 走看看