返回顶部
首页 > 资讯 > 后端开发 > Python >[PYTHON] 核心编程笔记之四-Py
  • 213
分享到

[PYTHON] 核心编程笔记之四-Py

之四核心笔记 2023-01-31 02:01:02 213人浏览 独家记忆

Python 官方文档:入门教程 => 点击学习

摘要

4.1 python 对象Python 使用对象模型来存储数据所有的Python对象都拥有三个特性: 身份,类型和值:身份: 每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到,这个值可以认为是该对象的内存地

4.1 python 对象

Python 使用对象模型来存储数据


所有的Python对象都拥有三个特性: 身份,类型和值:

身份: 每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到,这个值可以认为是该对象的内存地址(只读)


类型: 对象的类型决定了该对象可以保存什么类型的值,可以用内建函数type()查看python对象的类型(只读)


值: 对象表示的数据项

例:

>>> a = 1

>>> id(a)

139464880

>>> type(a)

<type 'int'>


4.1.1 对象属性

某些Python对象有属性,值或相关联的可执行代码,比如方法(method).Python用点(.)标记法来访问属性


4.2 标准类型

数字(分为几个子类型,其中有三个是整型)

整型

布尔型

长整型

浮点型

复数型

字符串

列表

元祖

字典


4.3 其他内建类型

类型

Null对象(None)

文件

集合/固定集合

函数/方法

模块


4.3.1 类型对象和type类型对象


>>> type(42)

<type 'int'>


<type 'int'>是一个类型对象,它输出了一个字符串来告诉你它是个int型对象


>>> type(type(42))

<type 'type'>

所有类型对象的类型都是type,它也是所有Python类型的根和所有Python标准类的默认元类(metaclass)


4.3.2 None,Python的Null对象

Python有一个特殊的类型,被称作Null对象或者NoneType,它只有一个值,那就是None,它不支持任何运算也没有任何内建方法


None没有什么有用的属性,它的布尔值总是False


注:下列对象的布尔值天生是False

None

False

所有值为零的数:

0(整型)

(浮点型)

0L(长整型)

0.0+0.0j(复数)

""(空字符串)

[](空列表)

()(空元祖)

{}(空字典)


4.4 内部类型

代码

跟踪记录

切片

省略

Xrange


4.4.1 代码对象

代码对象时编译过的Python源代码片段,它是可执行对象,通过调用内建函数complile()可以得到代码对象.代码对象可以被exec命令或eval()内建函数来执行


4.4.2 帧对象

帧对象表示Python的执行栈帧


4.4.3 跟踪记录对象

当代码出错,Python就会引发一个异常,如果异常未被捕获或处理,解释器就会推出脚本运行,并显示类似下面的诊断信息:


Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

TypeError: id() takes exactly one argument (0 given)


4.4.4 切片对象

当使用Python扩展切边语法时,就会创建切片对象


例:

>>> foostr = 'abcde'

>>> foostr[::-1]    

'edcba'

>>> foostr[::-2]    

'eca'

>>> foolist = [123,'xba',342.23,'abc']

>>> foolist[::-1]

['abc', 342.23, 'xba', 123]


4.4.5 省略对象

省略对象用于扩展切片语法中,起记号作用


4.4.6 XRange对象

调用内建函数xrange()会生成一个Xrange对象,xrange()是内建函数,range()的兄弟版本,用于需要节省内存使用或range()无法完成超大数据集场合


4.5 标准类型运算符


4.5.1 对象值的比较

比较运算符用来判断同类型对象是否相等


>>> 2 == 2      

True

>>> 2.34 <= 8.32

True

>>> 5 + 4j >= 2 - 3j

Traceback (most recent call last):

 File "<stdin>", line 1, in <module>

TypeError: no ordering relation is defined for complex numbers

>>> 'abc' == 'xyz'

False

>>> 'abc' > 'xyz'

False

>>> 'abc' < 'xyz'

True

>>> [3,'abc'] == ['abc',3]

False

>>> [3,'abc'] == [3,'abc']

True


多个比较操作可以在同一行上进行


>>> 3 < 4 < 7

True

>>> 4 > 3 == 3

True

>>> 4 < 3 < 5 != 2 < 7

False


比较操作时针对对象的值进行的,也就是说比较的是对象的数值而不是对象本身


4.5.2 对象身份比较

将变量名看做对象的一个链接


例1: foo1和foo2指向相同的对象

foo1 = foo2 =4.3


4.3的数字对象被创建,然后这个对象的引用被赋值给foo1和foo2,结果就是foo1和foo2指向同一个对象


例2: fool和foo2指向相同的对象

foo1 = 4.3

foo2 = foo1

Python通过传递引用来处理对象,foo2就成为原始值4.3的一个新的引用,结果就是foo1和foo2指向同一个对象


例3: foo1和foo2指向不同的对象

foo1 = 4.3

foo2 = = 1.3 +3.0


尽管两个对象保存的是同样大小的值,但在系统中保存的都是两个独立对象


每个对象都天生具有一个计数器,记录它自己的引用次数


a is b 等价于 id(a) == id(b)


对象身份比较运算符拥有同样的优先级

下面的例子,我们创建了一个变量,然后将第二个变量指向同一个对象

>>> a = [5,'hat',-9.3]

>>> b = a

>>> a is b

True

>>> a is not b

False

>>> b = 2.5e-5  

>>> b

2.5e-05

>>> a

[5, 'hat', -9.3]

>>> a is b

False

>>> a is not b

True


运算符功能

obj1 is obj2obj1和obj2是同一个对象

obj1 is not obj2obj1和obj2不是同一个对象


注: 整数对象和字符串对象是不可变对象,所以Python会很高效的缓存它们


>>> a = 1

>>> id (a)

139464880

>>> b = 1

>>> id(b)

139464880

>>> c = 1.0

>>> id(c)

140438956

>>> d = 1.0

>>> id(d)

140438972


a和b指向了相同的整数对象,但c和d并没有指向相同的浮点数对象

Python仅缓存简单整数,因为在Python应用程序中这些小整数会经常被用到,通常缓存的整数范围是(-1,100)

字符串不会被缓存


4.5.3 布尔类型

布尔逻辑运算符and,or和not都是Python关键字,优先级如下


运算符功能

not exprexpr的逻辑非(否)

expr1 and expr2expr1和expr2的逻辑与

expr1 or expr2expr2的逻辑或


>>> x, y = 3.1415926, -1024

>>> x < 5.5

True

>>> not (x <5.0)

False

>>> (x < 5.0) or (y > 2.718281828)

True

>>> (x < 5.0) and (y > 2.718281828)  

False

>>> not (x is y)

True


Python支持一个表达式进行多种比较操作,其实这个表达式本质上是由多个隐式的and连接起来的多个表达式


>>> 3 < 4 < 7 # same as "( 3 < 4 ) and (4 < 7)"

True


4.6 标准类型内建函数


函数功能

cmp(obj1,obj2)比较obj1和obj2,根据比较结果返回整数i:

i<0 if obj1<obj2

i>0 if obj1>obj2

i==0 if obj1 ==obj2

repr(obj)或'obj'返回一个对象的字符串表示

str(obj)返回对象适合可读性好的字符串表示

type(obj)得到一个对象的类型,并返回相应的type对象


4.6.1 type()


type()接受一个对象作为参数,并返回他的类型,它的返回值是一个类型对象


>>> type(4)

<type 'int'>

>>> type('Hello World')

<type 'str'>

>>> type(type(4))

<type 'type'>


4.6.2 cmp()


内建函数cmp()用于比较两个对象obj1和obj2


>>> a, b =-4, 12

>>> cmp(a,b)

-1

>>> cmp(b,a)

1

>>> b = -4

>>> cmp(a,b)

0

>>> a, b ='abc','xyz'

>>> cmp(a,b)

-1

>>> cmp(b,a)

1

>>> b ='abc'

>>> cmp(a,b)

0


4.6.3 str()和repr()(及 '' 运算符)


内建函数str和repr()或反引号运算符('')可以以字符串的方式获取对象的内容,类型,数值属性等信息

str()得到的字符串可读性好,但返回结果无法用于eval()求值,可用于print语句输出

repr()得到的字符串可以重新获得该对象

obj ==eval(repr(obj))


>>> str(4.53-2j)

'(4.53-2j)'

>>> str(1)

'1'

>>> str(2e10)

'20000000000.0'

>>> str([0,5,9,5])

'[0, 5, 9, 5]'

>>> repr([0,5,9,5])

'[0, 5, 9, 5]'

>>> '[0, 5, 9, 5]'

'[0, 5, 9, 5]'


4.6.4 type()和isinstance()


>>> type('')  

<type 'str'>

>>> s = 'xyz'

>>> type(s)  

<type 'str'>

>>> type(100)

<type 'int'>

>>> type(0+0j)

<type 'complex'>

>>> type(0L)  

<type 'long'>

>>> type(0.0)

<type 'float'>

>>> type([])

<type 'list'>

>>> type(())

<type 'tuple'>

>>> type({})

<type 'dict'>

>>> type(type)

<type 'type'>


>>> class Foo:pass

...

>>> foo = Foo()    

>>> class Bar(object): pass

...

>>> bar = Bar()

>>> type(Foo)

<type 'classobj'>

>>> type(foo)

<type 'instance'>

>>> type(Bar)

<type 'type'>

>>> type(bar)

<class '__main__.Bar'>


例4.1 检查类型(typechk.py)

函数displayNumType()接受一个数值参数,它使用内建函数type()来确认数值的类型

# vi typechk.py

----------------------------

#!/usr/bin/env python


def displayNumType(num):

   print num, 'is',

   if isinstance(num,(int,long,float,complex)):

       print 'a number of type:',type(num).__name__

   else:

       print 'not a number at all!!'


displayNumType(-69)

displayNumType(9999999999999999999999999999999999999L)

displayNumType(98.6)

displayNumType(-5.2+1.9j)

displayNumType('xxx')

----------------------------


# python typechk.py

-----------------------

-69 is a number of type: int

9999999999999999999999999999999999999 is a number of type: long

98.6 is a number of type: float

(-5.2+1.9j) is a number of type: complex

xxx is not a number at all!!

-----------------------


4.7 类型工厂函数

Python 2.2同意了类型和类,所有内建类型现在也都是类,在这个基础上,原来所谓内建转换函数像int(),type(),list()等等,现在都成了工厂函数,也就是说虽然他们看上去有点象函数,实际上他们是类,当你调用他们时,实际上市生成了该类型的一个实例

int(),long(),float(),complex()

str(),unicode(),basestring()

list(),tuple()

type()


dict()

   bool()

   set(),frozenset()

   lbject()

   claSSMethod()

staticmethod()

super()

property()

file()


4.8 标准类型的分类


基本,是指这些类型都是Python提供的标准或核心类型

内建,是由于这些类型是Python默认就提供的

数据,因为他们呢用于一般数据存储

对象,因为对象是数据和功能的默认抽象

原始,提供最底层的粒度数据存储

类型,因为他们就是数据类型


4.8.1 存储模型


存储模型

分类Python类型

标量/原子类型数值(所有数值类型),字符串(全部是文字)

容器类型列表,元祖,字典


4.8.2 更新模型


存储模型

分类Python类型

可变类型列表,字典

不可变类型数字,字符串,元祖


加上id()调用,就会清楚看到对象实际上已经被替换了:


>>> x = 'Python numbers and strings'

>>> print id(x)

139797637900016

>>> x = 'are immutable?!? What gives?'

>>> print id(x)

139797637889960

>>> i = 0

>>> print id(i)

16988128

>>> i = i + 1

>>> print id(i)

16988104


注:返回值与该对象当时分配的内存地址相关,所以不同机器都不同


>>> aList = ['ammonia',83,85,'lady']

>>> aList

['ammonia', 83, 85, 'lady']

>>> aList[2]

85

>>> id(aList)

139797637819280

>>> aList[2] = aList[2] + 1

>>> aList[3] = 'stereo'

>>> aList

['ammonia', 83, 86, 'stereo']

>>> id(aList)

139797637819280

>>> aList.append('gaudy')

>>> aList.append(aList[2] + 1)

>>> aList

['ammonia', 83, 86, 'stereo', 'gaudy', 87]

>>> id(aList)

139797637819280


注: 列表的值无论怎么改变,列表的ID始终保持不变


4.8.3 访问模型

在访问模型中共有三种访问模式:

直接存取,顺序和映射


以访问模型为标准的类型分类


访问模型

分类Python类型

直接访问数字

顺序访问字符串,列表,元祖

映射访问字典


标准类型分类


数据类型  存储模型  更新模型  访问模型

数字  Scalar    不可更改  直接访问

字符串    Scalar    不可更改  顺序访问

列表  Container 可更改    顺序访问

元祖  Container 不可更改  顺序访问

字典  Container 可更改    映射访问


4.9 不支持的类型


char 或 byte


指针


--结束END--

本文标题: [PYTHON] 核心编程笔记之四-Py

本文链接: https://lsjlt.com/news/185985.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • [PYTHON] 核心编程笔记之四-Py
    4.1 Python 对象Python 使用对象模型来存储数据所有的Python对象都拥有三个特性: 身份,类型和值:身份: 每一个对象都有一个唯一的身份标识自己,任何对象的身份可以使用内建函数id()来得到,这个值可以认为是该对象的内存地...
    99+
    2023-01-31
    之四 核心 笔记
  • [PYTHON] 核心编程笔记之七-Py
    7.1 映射类型:字典字典是Python语言中唯一的映射类型,映射类型对象里哈希值(键)和指向的对象(值)是一对多的关系,字典对象可变,它是一个容器类型,能存储任意个Python对象注:什么是哈希表哈希表是一种数据结构:哈希表中存储的每一条...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记之八-Py
    8.1 if语句if expression:    expr_true_suite8.1.1 多重条件表达式单个if 语句可以通过使用and,or和not实现多重判断条件或是否定判断条件if not warn and (system_loa...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记之十-Py
    10.1 什么是异常10.1.1 错误错误时语法或是逻辑上的,语法错误指示软件的结构上有错误,导致不能被解释器解释或编译器无法编译当Python检测到一个错误时,解释器就会支出当前流已经无法继续执行下去,这时就出现了异常10.1.2 异常1...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记之六-Py
    6.序列:字符串,列表和元祖6.1序列6.1.1标准类型操作符6.1.2序列类型操作符成员关系操作符(in,not in)判断一个元素是否属于一个序列字符串判断一个字符是否属于这个字符串元祖判断一个对象是否属于该对象序列in/not in ...
    99+
    2023-01-31
    之六 核心 笔记
  • [PYTHON] 核心编程笔记之九-Py
    9.2 文件内建函数[open()和file()]内建函数open()[以及file()]提供了初始化输入/输出(I/0)操作的通用接口,open()内建函数成功打开文件后会返回一个文件对象,否则引发一个错误,当操作失败,Python会产生...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记之五-Py
    5.1 数字类型创建数值对象和给变量赋值anInt = 1aLong = -9999999999LaFloat = 3.1415926aComplex = 1.23+4.56j如何更新数字对象变量像一个指针指向装变量值的盒子,对不可变类型来...
    99+
    2023-01-31
    之五 核心 笔记
  • [PYTHON]核心编程笔记(15.Py
    核心笔记:查找与匹配的比较15.1.1 您的第一个正则表达式:15.2 正则表达式使用的特殊符号和字符常用正则表达式符号和特殊符号:记号       说明                                          举...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(16.P
    16.1 介绍16.1.1 什么是客户/服务器架构硬件的客户/服务器架构软件客户/服务器架构16.1.2 客户/服务器网络编程16.2 套接字: 通讯端点16.2.1 什么是套接字套接字是一种具有通讯端点感念的计算机网络数据结构16.2.2...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(14.P
    在python中有多种运行外部程序的方法,比如,运行操作系统命令或另外的python脚本,或执行一个磁盘上的文件,或通过网络来运行文件在特定执行场景包括:在当前脚本继续运行创建和管理子进程执行外部命令或程序执行需要输入的命令通过网络来调用命...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(13.P
    13.1 介绍类与实例:类与实例相互关联,类是对象的定义,而实例是"真正的实物",它存放了类中所定义的对象的具体信息下面的示例展示如何创建一个类:class MyNewObjectType(bases):    'define MyNewO...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(17.P
    17.1 什么是因特网客户端17.2 文件传输17.2.1 文件传输因特网协议流行的有文件传输协议(FTP),Unix-to-Unix复制协议(UUCP),以及网页的超文本传输协议(HTTP),另外,还有(Unix下的)远程文件复制指令sc...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(11.P
    11.1 什么是函数函数式对程序逻辑进行结构化或过程化的一种编程方法,能够整块代码巧妙地隔离成易于管理的小块以下为创建,使用,或引用函数的方法:declaration/definition def foo(): print 'bar'fun...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • [PYTHON] 核心编程笔记(20.W
    20.1 介绍20.1.1 Web应用:客户端/服务器计算20.1.2 因特网20.2 使用Python进行Web应用:创建一个简单的Web客户端20.2.1 统一资源定位符20.2.2 urlparse模块urlparse(urlstr,...
    99+
    2023-01-31
    核心 笔记 PYTHON
  • Python核心编程的四大神兽
    本文将主要分为4大部分,分别介绍Python核心编程中的迭代器、生成器 、闭包以及装饰器。 生成器 生成器是生成一个值的特殊函数,它具有这样的特点:第一次执行该函数时,先从头按顺序执行,在碰到yield关键字时该函数会暂停执行该函数...
    99+
    2023-01-30
    神兽 核心 Python
  • 《Python核心编程》第五章
    5-1.整型。讲讲Python普通整型和长整型的区别?   答案:    在大多数32位机器上,标准整型的取值范围是-2^31~2^31-1,如果在64位机器上使用64位编译器编译的Python,则整型是64位的。而长整型能表示的数值仅仅与...
    99+
    2023-01-31
    第五章 核心 Python
  • Python核心编程第三版
    Python核心编程第三版高清版 PDF链接: https://pan.baidu.com/s/16jAUKZc3wHUoFZbPnhpVMw 密码: 2y8d ...
    99+
    2023-01-31
    第三版 核心 Python
  • Python核心编程习题解答
    最近在学Python,准备把《Python核心编程(第二版)》上课后有意思的习题做一做,也算是对语言的内容更熟悉一些。我做的代码在github上(链接),可以上去根据题号查看或搜索。难免有理解或做得不对的地方,请指正或一起讨论。慢慢来,踏实...
    99+
    2023-01-31
    习题 核心 Python
  • c++核心编程之函数的重载
    目录1.函数重载概述2.函数重载的注意事项1.函数重载概述 ​作用​:函数可以相同,提高复用性 ​函数重载必须满足的条件​: 1​.同一个作用域下​2.​函数名称相同​3.函数​参...
    99+
    2024-04-02
  • python核心编程(第三版)网络编程错
    //服务器端代码from socket import * from time import ctime host='localhost' port=3330 bufsize = 1024 addr = (host,port) tcp...
    99+
    2023-01-30
    第三版 网络编程 核心
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作