【Python学习笔记】二、对象与变量

2.1对象(Object)

对象是python语言中最基本的概念,在python中处理的每样东西都是对象

python中有许多内置对象可供编程者使用

数字、字符串、序列(列表、元组、字典、集合)、命令、函数等

非内置对象需要导入模块(package)才能使用

对象包含的三个基本要素,分别是:id(身份标识)、type(数据类型)和value(值)

• ==比较操作符:用来比较判断两个对象的value(值)是否相等

• is同一性运算符:比较判断的是对象间的唯一身份标识,也就是id是否相同

查询对象类型

内置的 type() 函数可以用来查询变量所指的对象类型。

>>> a, b, c, d= 20,5.5, True,4+3j

>>> print(type(a), type(b), type(c), type(d))

<class 'int'><class 'float'><class 'bool'><class 'complex'>

isinstance 和type 的区别在于:

type()不会认为子类是一种父类类型。

isinstance()会认为子类是一种父类类型。

class A:

    pass

 

class B(A):

    pass

 

isinstance(A(), A) #returns True

type(A())== A      # returns True

isinstance(B(), A)   #returns True

type(B())== A        # returns False

2.2变量(Variable)

Python的变量用来存放Python对象的引用

(1)变量的定义

在定义变量名的时候,需要注意以下问题:

•   变量名必须以字母或下划线开头,但以下划线开头的变量在Python中有特殊含义

•   变量名中不能有空格以及标点符号(括号、引号、逗号、斜线、反斜线、冒号、句号、问号等等)

•   不能使用关键字作变量名,可以导入keyword模块后使用print(keyword.kwlist)查看所有Python关键字

•   不建议使用系统内置的模块名、类型名或函数名以及已导入的模块名及其成员名作变量名,这将会改变其类型和含义,可以通过dir(__builtins__)查看所有内置模块、类型和函数

•   变量名对英文字母的大小写敏感,例如student和Student是不同的变量

(2)变量的使用

Python中一切都是对象,变量实际上是“没有类型”的,是一个指针,变量中存放的是对象的引用,而对象的引用指向这个对象。

所以在Python中,不需要事先声明变量名及其类型,直接赋值即可创建各种类型的对象变量,Python解释器会根据赋值或运算来自动推断变量类型,指向什么类型的值(对象)的变量就是什么类型的变量。

赋值的作用就是让变量指针(对象引用)指向某个对象如果对象尚未存在,则在内存中创造对象,一个对象在内存中唯一存在。如果对象引用(变量)尚未存在,则将变量和对象进行绑定。如果对象引用已经存在,就进行简单的重新绑定,以便引用“=”右边的对象。

举个例子,指向同一个对象的变量的值是相同的,但当为其中一个变量修改值以后,其内存地址将会变化,但这并不影响另一个变量。

>>> x = 3

>>> id(x)

1786684560

>>> y = x

>>> id(y)

1786684560

>>> x += 6

>>> id(x)

1786684752

>>> y

3

>>> id(y)

1786684560                                 

• 字符串和元组属于不可变序列,这意味着不能通过下标的方式来修改其中的元素值。

>>> x = (1,2,3)

>>> print(x)

(1, 2, 3)

>>> x[1] = 5

Traceback (most recentcall last):

  File "<pyshell#7>", line 1,in <module>

    x[1] = 5

TypeError: 'tuple' objectdoes not support item assignment

•   对于列表、集合、字典等可变序列类型而言,情况稍微复杂一些。以列表为例,列表中包含的是元素值的引用,而不是直接包含元素值。如果是直接修改序列变量的值,则与Python普通变量的情况是一样的:

•   而如果是通过下标来修改序列中元素的值,或通过可变序列对象自身提供的方法来增加和删除元素时,序列对象在内存中的起始地址不变的,仅仅是被改变值的元素地址发生变化:

a中包含的是a[0],a[1],a[2](元素的引用),它们指向元素1,2,3,而不是a直接包含元素1,2,3。

a相当于指向一个链表的头节点变量a[0]的头指针

某节点变量a[n]指向内存中的一个对象,同时指向链表中的下一个节点变量a[n+1](列表尾除外)

若a=[1],b=1,则a==[b],id(a[0])==id(b),a[0]==b

若a=[1],b=[1],则a==b, a[0]==b[0],id(a[0])==id(b[0]),但id(a)!=id(b)

它们指向的不是一个链表

若a=[1],b=a,则a==b, a[0]==b[0],id(a[0])==id(b[0]),id(a)==id(b)

它们指向的是一个链表

(3)变量的删除

使用del命令来显式删除变量(解除与对象之间的指向关系),若删除变量后对象不再有变量指向,则删除该对象

列表中部分元素删除后,列表会自动收缩其内存空间以保证各元素连续存储

del命令无法删除元组或字符串中的指定元素,但可以删除整个元组或字符串

(4)动态类型机制与基于值的内存管理模式

Python使用“动态类型”机制,也就是说,在Python程序中,任何时候可以根据需要,某个对象引用都可以重新绑定到另一个不同的对象上(不要求是相同的类型),这和其他强化型语言如(C++,Java)不太一样,只允许重新绑定相同类型的对象上。在Python中,因为有“动态类型”机制,所以一个对象引用可以执行不同类型的对象适用的方法

动态类型机制决定了Python基于值(对象)的内存管理模式

基于值的内存管理方式,即如果为不同变量赋值为相同值,这个值在内存中只有一份,多个变量指向同一块内存地址。

Python具有自动内存管理功能,对于没有任何变量指向的值,Python自动将其删除。Python会跟踪所有的值,并自动删除不再有变量指向的值。因此,Python程序员一般情况下不需要太多考虑内存管理的问题。尽管如此,仍可显式使用del命令删除不需要的值或显式关闭不再需要访问的资源

下面介绍Python的几种对象类型

2.3数字(Number)

Number属于Python不可变对象,可以是任意大的数值

Python3 的数字类型分为 int(整数类型)、float(浮点数类型)、bool(布尔类型)、complex(复数类型)

注意:在Python2 中没有布尔型的,它用数字 0 表示 False,用 1 表示True。到 Python3 中,把 True 和 False 定义成关键字了,但它们的值还是 1 和 0,它们可以和数字相加。Python3中也没有Python2 中的 Long。

(1)整数类型

• 十进制整数:如,0、-1、9、123

• 十六进制整数:以0x开头,如0x10、0xfa、0xabcdef

• 八进制整数:以0o开头,如0o35、0o11

• 二进制整数:以0b开头,如,0b101、0b100

(2)浮点数类型

小数,可以用科学计数法e、E作为幂的符号

deffunctionname( parameters ):

   "函数_文档字符串"

 

(3)虚数类型

>>>c= 8+10j

>>>c.real #查看复数实部

8.0

>>>c.imag #查看复数虚部

10.0

>>>a.conjugate() #返回共轭复数

(3-4j)

>>>a*b #复数乘法

(-9+38j)

>>>a/b #复数除法

(0.6393442622950819+0.03278688524590165j)

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值