PS:【笔记+代码+图片】在GitHub上持续更新,欢迎star:https://github.com/gdouchufu/Core-Python-Programming
介绍Python对象、最常用的标准类型、标准运算符、内建函数、标准类型的分类方式(三种模型)、Python目前不支持的类型
id()
获取,只读type()
查看对象的类型,注意返回的是对象而不是简单的字符串,只读数字、整型、布尔型、长整型、浮点型、复数型、字符串、列表、元组、字典
对象的类型本身也是对象,对象类型的类型都是 type
(类似Java里的Object
),它是所有Python类型的根和所有Python标准类的默认元类(metaclass)。
Python2.2 统一了类型和类。
null对象
所有标准对象均可用于布尔测试,同类型的对象之间可以比较大小。
布尔值为False的情况:
测试两个变量是否指向同一个对象: is
和 is not
,a is b
等价于 id(a) == id(b)
不可变对象:整数对象和字符串对象,Python会缓存[-5, 256]的整数对象和比较小的字符串对象。
not 运算符拥有最高优先级,只比所有比较运算符低一级。 and 和 or 运 算符则相应的再低一级。
cmp(obj1, obj2)
: 比较 obj1 和 obj2, 根据比较结果返回整数 i: repr(obj)
或 `obj`
:返回一个对象的字符串表示(不鼓励使用 “)str(obj)
: 返回对象适合可读性好的字符串表示type(obj)
:得到一个对象的类型,并返回相应的 type 对象repr()
函数得到的字符串可以用来重新获得该对象(通过求值运算 eval()
), 通常情况下 obj == eval(repr(obj))
这个等式是成立的。str()
用于生成一个对象的可读性好的字符串表示,它的返回结果通常无法用于eval()
求值, 但很适合用于 print 语句输出。repr()
输出对 Python 比较友好, 而 str()
的输出对人比较友好。if isinstance(7, int)
比 if type(7) is types.IntType
简洁
优化:通过使用 from-import,可以减少一次查询:from types import IntType
(为了得到整数的对象类型,解释器会先查找 types 这个模块的名字,然后在该模块的字典中查找 IntType。)
三种不同的模型对基本类型进行分类,每种模型都表示这些类型之间的相互关系。
Decimal
)1. Python 对象。与所有 Python 对象有关的三个属性是什么?请简单的描述一下。
- 身份:对象的唯一标识,是对象的内存地址
- 类型:通过type()
查看对象的类型
- 值:对象的数据
2. 类型。不可更改(immutable)指的是什么?Python 的哪些类型是可更改的 (mutable),哪些不是?
immutable:对象创建成功之后,其值不可以被更新。
- 可变类型:列表、字典
- 不可变类型:数字、字符串、元组
3. 类型。哪些 Python 类型是按照顺序访问的,它们和映射类型的不同是什么?
顺序访问:字符串、列表、元组。
顺序访问的索引使用顺序的数字偏移量取值,而映射类型的元素是无序存放的,通过一个唯一的 key 来访问。
4. type()。内建函数 type()做什么?type()返回的对象是什么?
type()用于获取对象的类型,返回的对象是对应的type对象
5. str() 和 repr()。内建函数 str()与 repr()之间的不同是什么?哪一个等价于反引号运算符?
参照知识点的【repr(obj) 和 str(obj)】
repr(obj)
等价于 `obj`
6. 对象相等。 您认为 type(a) == type(b)和 type(a) is type(b)之间的不同是什么? 为什么会选择后者?函数 isinstance()与这有什么关系?
1. ==
判断对象的值是否相等,is
判断两个对象是否相同(同一内存地址)。
2. 选择type(a) is type(b)
是因为,我们需要判断的是对象是否为同一个类型对象。
3. isinstance()
等同于type(a) is type(b)
,简化了语法。
7. 内建函数 dir()。在第二章的几个练习中,我们用内建函数 dir()做了几个实验, 它接受一个对象,然后给出相应的属性。请对 types 模块做相同的实验。记下您熟悉的类型, 包括您对这些类型的认识,然后记下你还不熟悉的类型。在学习 Python 的过程中,你要逐步将 “不熟悉”的类型变得“熟悉”起来。
import types
dir(types)
[‘BooleanType’, ‘BufferType’, ‘BuiltinFunctionType’, ‘BuiltinMethodType’, ‘ClassType’, ‘CodeType’, ‘ComplexType’, ‘DictProxyType’, ‘DictType’, ‘DictionaryType’, ‘EllipsisType’, ‘FileType’, ‘FloatType’, ‘FrameType’, ‘FunctionType’, ‘GeneratorType’, ‘GetSetDescriptorType’, ‘InstanceType’, ‘IntType’, ‘LambdaType’, ‘ListType’, ‘LongType’, ‘MemberDescriptorType’, ‘MethodType’, ‘ModuleType’, ‘NoneType’, ‘NotImplementedType’, ‘ObjectType’, ‘SliceType’, ‘StringType’, ‘StringTypes’, ‘TracebackType’, ‘TupleType’, ‘TypeType’, ‘UnboundMethodType’, ‘UnicodeType’, ‘XRangeType’]
8. 列表和元组。列表和元组的相同点是什么?不同点是什么?
列表和元组都是容器存储类型,按顺序进行数据的存储和访问,不同的是列表是可变的,而元组不可变。
9. 练习,给定以下赋值:
a = 10
b = 10
c = 100
d = 100
e = 10.0
f = 10.0
请问下面各表达式的输出是什么?为什么?
Answer:
原因:Python会缓存[-5, 256]的整数对象,而不会缓存可变类型float的对象。
注意:如果使用以下方式赋值,e is f
的结果是True
!
a = 10; b = 10; c = 100; d = 100; e = 10.0; f = 10.0