zoukankan      html  css  js  c++  java
  • python学习第四天

    python中 关联/绑定/引用的含义
    在python中,变量只是一个名字,当中不保存任何数据、没有类型,只是指向到一个对象。
    关联/绑定/引用都是只变量和一个对象的关联关系

    在交互模式下查看变量的绑定关系:
    python查看变量的绑定关系,需要我们用到help命令,具体写法为hlep('__main__'),我们在python交互模式下输入该命令。
    >>>help('__main__')

    Help on module __main__:

    NAME
    __main__

    FILE
    (built-in)
    (END)

    我们可以看到上述内容(linux下按Q退出),
    然后将变量a与整数1关联、变量b与变量a关联、变量c与变量a与变量b之和关联
    a=1
    b=a
    c=a+b
    再次输入help('__main__'),
    >>> help('__main__')

    Help on module __main__:

    NAME
    __main__

    DATA
    a = 1
    b = 1
    c = 2

    FILE
    (built-in)
    (END)
    故,我们可以通过此种方式查看当前环境下我们的所有变量。

    python中的自动化内存管理
    解释这个概念前,先进行如下操作
    a = 5
    b = 6
    a = a+b
    请问,这段代码中,计算机内存中究竟发生了哪些事儿?
    首先,a = 5 ,程序会在内存中创建一个为5的数据,然后再创建一个变量a,而后将a与5相关联,作为变量保存在内存中
    通俗来说可以将对象看作河中的小船,把变量看作是岸边的木桩,通过关联变量的操作,将小船固定在岸边不至于飘走。
    树桩上有标签,标签对应着对象,通过标签我们就可以直接使用对象中的数据了。
    同理,b = 6,程序会在内存中创建一个为6的数据,而后与b相关联,作为变量保存在内存中
    当定义a=a+b的时候等于先前关联的变量a与b先做运算得出结果11,最后再一次与变量a相关联,由于变量a本身存在,
    所以重新关联此变量的关联对象。
    实机运行的结果
    >>> a=5
    >>> b=6
    >>> help('__main__')

    Help on module __main__:

    NAME
    __main__

    DATA
    a = 5
    b = 6

    FILE
    (built-in)
    >>> a=a+b
    >>> help('__main__')
    Help on module __main__:

    NAME
    __main__

    DATA
    a = 11
    b = 6

    FILE
    (built-in)
    由此可见,python拥有内存自动管理机制,只要没有关联变量的数据,python会自动回收,释放计算机的内存,可以供计算机其他应用使用。

    序列赋值的语法:
    变量名1,变量名2,......变量名n = 对象名1,对象名2,......,对象名n
    变量名1,变量名2,......变量名n = (对象名1,对象名2,......,对象名n)
    变量名1,变量名2,......变量名n = [对象名1,对象名2,......,对象名n]
    例如
    x,y,z,a=10,1000*35,25//2,15**15
    等于是通过序列赋值的方法对xyza四个变量分别赋值,其结果与
    x=10
    y=1000*35
    z=25//2
    a=15**15
    相同,使用help('__main__')查询已经关联的变量后,我们可以发现:
    Help on module __main__:

    NAME
    __main__

    DATA
    a = 437893890380859375
    x = 10
    y = 35000
    z = 12

    FILE
    (built-in)

    变量的交换绑定练习:
    已知有两个变量:
    a绑定10000
    b绑定20000
    问,在不创建任何新对象的情况下,如何让a和b交换关联的对象?
    首先创建两个变量a和b,而后使用help('__main__')查看变量
    a = 10000
    b = 20000
    使用help('__main__')
    Help on module __main__:

    NAME
    __main__

    DATA
    a = 10000
    b = 20000

    FILE
    (built-in)
    然后根据python的内存自动管理机制,使用序列赋值重新定义a与b关联的对象

    a,b=b,a
    最后,使用help('__main__')查看变量关联的对象是否成功交换
    Help on module __main__:

    NAME
    __main__

    DATA
    a = 20000
    b = 10000

    FILE
    (built-in)
    需要注意的是,这种方法只可以在python中实现。
    在不限制创建变量的情况下,我们还可以通过经典的交换算法进行变量关联交换
    即,
    temp = 10000 #首先声明第三个变量temp,在内存中保存住10000的值
    a = b #然后重新关联a=b
    b = temp #最后关联b=temp
    is/is not运算符
    作用:
    判断两个对象是否绑定同一对象,如果是同一对象返回True,否则返回False
    is not与is作用相反
    语法:
    x is y
    x is not y
    例如:
    创建一个is_or_isnot.py文件
    x = y =10000
    z = 10000

    print(x is y)
    print(x is not y)
    print(x is z)
    print(x is not z)
    运行该文件后
    tarena@tedu:~/study/souce_code$ python3 is_or_isnot.py
    True
    False
    False #虽然x与z关联的对象数值相同,但这两个数字在内存当中互为毫不相干的两个独立对象,所以python返回Flase。
    True
    小整数对象池
    CPython中整数-5到256永远存在于小整数池中,不会释放并可重复使用
    示例
    a = 5
    b = 5
    a is b 返回 True
    说明
    由于-5~256的所有整数永远储存在python的解释执行器之内,当变量赋值在这个范围之内的时候,python不会创建一个新的数字对象,而是会直接
    从小整数对象池中直接调用,所以在示例情况中,可以解释为直接在当中提取5的对象,两个对象相同,所以返回True。
    此现象同样适用于对象为计算结果在-5~256范围内的数学表达式,如
    a = 1+3
    b = 2+2
    a is b 同样返回True.

    id 函数
    作用:
    返回一个对象在内存中的地址,在未来的开发中,主要用于判断该变量的对象是否是None。
    格式:
    id(对象)
    引用id函数的概念后,我们再来证明is/is not运算符返回结果的过程
    在交互模式中创建4个变量
    >>>a = 5
    >>>b = 2+3
    >>>c = 10000
    >>>d = 5000+5000
    使用help(__main__)查看这些变量
    >>>help(__main__)
    Help on module __main__:

    NAME
    __main__

    DATA
    a = 5
    b = 5
    c = 10000
    d = 10000

    FILE
    (built-in)
    使用id函数,查看内存地址
    >>> id(a)
    10919552
    >>> id(b)
    10919552
    >>> id(c)
    140633354719024
    >>> id(d)
    140633330369744
    由于内存地址的不同,所以变量所关联的对象也就完全不同,但这种现象只限于交互模式。写在.py文件当中的变量
    会提前优化好,如果相同对象重复命名变量,则python会通过引用计数的方式,对这个对象进行共用,从而达到节省内存的目的。
    del 语句(delete的简写)
    作用:
    用于删除变量,同时删除与对象的关联关系。如果可能则释放对象
    语法:
    del 变量名
    python的内存管理和引用计数
    每个对象都会记录有几个变量引用自身,相同对象重复引用时,其数量+1,当引用的数量为0时,则对象被销毁,此种自动化内存管理叫做引用计数

    复合赋值算术运算符
    运算符 说明
    y+=x 等同于 y=y+x
    y-=x 等同于 y=y-x
    y*=x 等同于 y=y*x
    y/=x 等同于 y=y/x
    y//=x 等同于 y=y//x
    y%=x 等同于 y=y%x
    y**=x 等同于 y=y**x
    例如:
    >>> y = 100
    >>> y +=1
    >>> y
    101

  • 相关阅读:
    【数据分析】6 点发的文章在博客园阅读量最高?
    canvas api 速记
    leetcode 315. Count of Smaller Numbers After Self 两种思路
    一道闭包题题解
    一道经典JS题(关于this)
    HTML5 — 让拖放变的流行起来
    你应该知道的25道Javascript面试题
    关于base64编码的原理和实现
    Python中的None
    Python字符编码和转码
  • 原文地址:https://www.cnblogs.com/superSXC/p/10106356.html
Copyright © 2011-2022 走看看