python整数对象,Python整数类型

本文目录一览:

写出python中6种数据类型?

Python中的变量不需要声明。每个变量在使用前都必须赋值,变量赋值以后该变量才会被创建。

Python3中有六个标准的数据类型:Number(数字)+String(字符串)+List(列表)+Tuple(元组)+Sets(集合)+Dictionary(字典)。

Number(数字)数字类型是顾名思义是用来存储数值的,需要记住的是,有点和Java的字符串味道差不多,如果改变了数字数据类型的值,将重新分配内存空间。

可以使用del语句删除一些数字对象的引用delvar1[,var2[,var3[….,varN]]]]。Python支持三种不同的数值类型:

1.整型(Int)-通常被称为是整型或整数,是正或负整数,不带小数点。

Python3整型是没有限制大小的,可以当作Long类型使用,所以Python3没有Python2的Long类型。

2.浮点型(float)-浮点型由整数部分与小数部分组成,浮点型也可以使用科学计数法表示(2.5e2=2.5×102=250)

3.复((complex))-复数由实数部分和虚数部分构成,可以用a+bj,或complex(a,b)表示,复数的实部a和虚部b都是浮点型。数字类型转换1.int(x)将x转换为一个整数。

4.complex(x,y)将x和y转换到一个复数,实数部分为x,虚数部分为y。x和y是数字表达式。

Python3 & 基本数据类型(一)

Python提供的基本数据类型:数值(整型、浮点型、复数、布尔型等)、字符串、列表、元组、字典、集合等,将它们简单分类如下:

通常被称为整型,数值为正或者负,不带小数点。

Python 3的整型可以当做Long类型使用,所以Python 3没有

Python 2的Long类型。

Python 初始化的时候会自动建立一个小整数对象池,方便我们调用,避免后期重复生成!这是一个包含 262个指向整数对象的指针数组,范围是 -5 到 256 。

Python的浮点数就是数学中的小数,类似C语言中的double。

浮点数 也就是小数,如 1.23 , 3.14 , -9.01 等等。但是对于很大或很小的浮点数,一般用科学计数法表示,把10用e替代, 1.23×10^9 就是 1.23e9 ,或者 12.3e8 , 0.000012 可以写成1.2e-5 等等。

复数 由实数部分和虚数部分构成,可以用a + bj,或者complex(a,b)表示,复数的实部a和虚部b都是浮点。

对 与 错 、 0 和 1 、 正 与 反 ,都是传统意义上的布尔类型。

但在Python语言中,布尔类型只有两个值, True 与 False 。请注意,是英文单词的对与错,并且首字母要大写。

在Python中,0、0.0、-0.0、None、空字符串“”、空元组()、空列表[]、空字典{}都被当作False,还有自定义类型,如果实现了 nonzero ()或 len ()方法且方法返回0或False,则其实例也被当作False,其他对象均为True

布尔值还可以用and、or和not运算。

1)、and 运算是 与 运算,只有所有都为 True , and 运算的结果才是 True ;

2)、or 运算是 或 运算,只要其中有一个为 True , or 运算结果就是 True ;

3)、not 运算是 非 运算,它是单目运算符,把 True 变成 False,False 变成 True。

例如:

由以上案例可以看出,在做四则运算的时候,明显把 True 看做 1 , False 看做 0 。

4)空值

空值不是布尔类型,只不过和布尔关系比较紧密。

空值是Python里一个特殊的值,用 None 表示(首字母大写)。None不能理解为0,因为0是整数类型,而None是一个特殊的值。None也不是布尔类型,而是NoneType。

在某些特定的情况下,需要对数字的类型进行转换。

Python提供了内置的数据类型转换函数:

int(x) 将x转换为一个整数。如果x是一个浮点数,则截取小数部分。

float(x) 将x转换成一个浮点数。

complex(x) 将x转换到一个复数,实数部分为 x,虚数部分为 0。

complex(x, y): 将 x 和 y 转换到一个复数,实数部分为 x,虚数部分为 y。

Python字符串即可以用单引号也可以用双引号括起来,甚至还可以用三引号括起来,字符串是以”或””括起来的任意文本。

例如:’abc’,”xyz”等等。请注意,”或””本身只是一种表示方式,不是字符串的一部分,因此,字符串’abc’只有a,b,c这3个字符。如果’本身也是一个字符,那就可以用””括起来,比如”I’m OK”包含的字符是I,’,m,空格,O,K这6个字符。

字符串中包括特殊字符,可以用转义字符\来标识

但是字符串里面如果有很多字符都需要转义,就需要加很多\,为了简化,Python还允许用r”表示”内部的字符串默认不转义

例如:

print r’\\\t\\’ #输出:\\\t\\

字符串的一些常见操作

切⽚是指对操作的对象截取其中⼀部分的操作

语法:序列[开始位置下标:结束位置下标:步⻓]

a. 不包含结束位置下标对应的数据, 正负整数均可;

b. 步⻓是选取间隔,正负整数均可,默认步⻓为1。

find():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则返回-1。

index():检测某个⼦串是否包含在这个字符串中,如果在返回这个⼦串开始的位置下标,否则则报异常。

rfind(): 和find()功能相同,但查找⽅向为右侧开始。

rindex():和index()功能相同,但查找⽅向为右侧开始。

count():返回某个⼦串在字符串中出现的次数。

replace():替换

split():按照指定字符分割字符串。

join():⽤⼀个字符或⼦串合并字符串,即是将多个字符串合并为⼀个新的字符串。

capitalize():将字符串第⼀个字符转换成⼤写。

title():将字符串每个单词⾸字⺟转换成⼤写。

lower():将字符串中⼤写转⼩写。

upper():将字符串中⼩写转⼤写。

lstrip():删除字符串左侧空⽩字符。

rstrip():删除字符串右侧空⽩字符。

strip():删除字符串两侧空⽩字符。

ljust():返回⼀个原字符串左对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串。

rjust():返回⼀个原字符串右对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串,语法和

ljust()相同。

center():返回⼀个原字符串居中对⻬,并使⽤指定字符(默认空格)填充⾄对应⻓度 的新字符串,语

法和ljust()相同。

所谓判断即是判断真假,返回的结果是布尔型数据类型:True 或 False。

startswith():检查字符串是否是以指定⼦串开头,是则返回 True,否则返回 False。如果设置开

始和结束位置下标,则在指定范围内检查。

endswith()::检查字符串是否是以指定⼦串结尾,是则返回 True,否则返回 False。如果设置开

始和结束位置下标,则在指定范围内检查。

isalpha():如果字符串⾄少有⼀个字符并且所有字符都是字⺟则返回 True, 否则返回 False。

isdigit():如果字符串只包含数字则返回 True 否则返回 False。

isalnum():如果字符串⾄少有⼀个字符并且所有字符都是字⺟或数字则返 回 True,否则返回

False。

怎么用python表示正整数?

python整数的表示方法:

1、可以使用字符串str的isdigit方法判断字符串是否是一个仅有数字组成,也就是整数。如果是整数退出while循环,否则继续请求输入。

2、也可以使用try-except语句。如果输入的字符串是整数,那么它可以用用int()函数,转换为int类并退出循环,否则会出现ValueError,可以使用try-except语句捕获ValueError,然后继续请求输入。

基本信息

Python由荷兰数学和计算机科学研究学会的Guido van Rossum于1990年代初设计,作为一门叫做ABC语言的替代品。Python提供了高效的高级数据结构,还能简单有效地面向对象编程。

Python语法和动态类型,以及解释型语言的本质,使它成为多数平台上写脚本和快速开发应用的编程语言,随着版本的不断更新和语言新功能的添加,逐渐被用于独立的、大型项目的开发。

Python解释器易于扩展,可以使用C或C++(或者其他可以通过C调用的语言)扩展新的功能和数据类型。Python也可用于可定制化软件中的扩展程序语言。Python丰富的标准库,提供了适用于各个主要系统平台的源码或机器码。

Python对象

众所周知,Python是一门面向对象的语言,在Python无论是数值、字符串、函数亦或是类型、类,都是对象。

对象是在 堆 上分配的结构,我们定义的所有变量、函数等,都存储于堆内存,而变量名、函数名则是一个存储于 栈 中、指向堆中具体结构的引用。

要想深入学习Python,首先需要知道Python对象的定义。

我们通常说的Python都是指CPython,底层由C语言实现,源码地址: cpython [GitHub]

Python对象的定义位于 Include/object.h ,是一个名为 PyObject 的结构体:

Python中的所有对象都继承自PyObejct,PyObject包含一个用于垃圾回收的双向链表,一个引用计数变量 ob_refcnt 和 一个类型对象指针 ob_type

从PyObejct的注释中,我们可以看到这样一句:每个指向 可变大小Python对象 的指针也可以转换为 PyVarObject* (可变大小的Python对象会在下文中解释)。 PyVarObejct 就是在PyObject的基础上多了一个 ob_size 字段,用于存储元素个数:

在PyObject结构中,还有一个类型对象指针 ob_type ,用于表示Python对象是什么类型,定义Python对象类型的是一个 PyTypeObject 接口体

实际定义是位于 Include/cpython/object.h 的 _typeobject :

在这个类型对象中,不仅包含了对象的类型,还包含了如分配内存大小、对象标准操作等信息,主要分为:

以Python中的 int类型 为例,int类型对象的定义如下:

从PyObject的定义中我们知道,每个对象的 ob_type 都要指向一个具体的类型对象,比如一个数值型对象 100 ,它的ob_type会指向 int类型对象PyLong_Type 。

PyTypeObject结构体第一行是一个PyObject_VAR_HEAD宏,查看宏定义可知PyTypeObject是一个变长对象

也就是说,归根结底 类型对象也是一个对象 ,也有ob_type属性,那 PyLong_Type 的 ob_type 是什么呢?

回到PyLong_Type的定义,第一行 PyVarObject_HEAD_INIT(PyType_Type, 0) ,查看对应的宏定义

由以上关系可以知道, PyVarObject_HEAD_INIT(PyType_Type, 0) = { { _PyObject_EXTRA_INIT 1, PyType_Type } 0} ,将其代入 PyObject_VAR_HEAD ,得到一个变长对象:

这样看就很明确了,PyLong_Type的类型就是PyType_Typ,同理可知, Python类型对象的类型就是PyType_Type ,而 PyType_Type对象的类型是它本身

从上述内容中,我们知道了对象和对象类型的定义,那么根据定义,对象可以有以下两种分类

Python对象定义有 PyObject 和 PyVarObject ,因此,根据对象大小是否可变的区别,Python对象可以划分为 可变对象(变长对象) 和 不可变对象(定长对象)

原本的对象a大小并没有改变,只是s引用的对象改变了。这里的对象a、对象b就是定长对象

可以看到,变量l仍然指向对象a,只是对象a的内容发生了改变,数据量变大了。这里的对象a就是变长对象

由于存在以上特性,所以使用这两种对象还会带来一种区别:

声明 s2 = s ,修改s的值: s = ‘new string’ ,s2的值不会一起改变,因为只是s指向了一个新的对象,s2指向的旧对象的值并没有发生改变

声明 l2 = l ,修改l的值: l.append(6) ,此时l2的值会一起改变,因为l和l2指向的是同一个对象,而该对象的内容被l修改了

此外,对于 字符串 对象,Python还有一套内存复用机制,如果两个字符串变量值相同,那它们将共用同一个对象:

对于 数值型 对象,Python会默认创建0~2 8 以内的整数对象,也就是 0 ~ 256 之间的数值对象是共用的:

按照Python数据类型,对象可分为以下几类:

Python创建对象有两种方式,泛型API和和类型相关的API

这类API通常以 PyObject_xxx 的形式命名,可以应用在任意Python对象上,如:

使用 PyObjecg_New 创建一个数值型对象:

这类API通常只能作用于一种类型的对象上,如:

使用 PyLong_FromLong 创建一个数值型对象:

在我们使用Python声明变量的时候,并不需要为变量指派类型,在给变量赋值的时候,可以赋值任意类型数据,如:

从Python对象的定义我们已经可以知晓造成这个特点的原因了,Python创建对象时,会分配内存进行初始化,然后Python内部通过 PyObject* 变量来维护这个对象,所以在Python内部各函数直接传递的都是一种泛型指针 PyObject* ,这个指针所指向的对象类型是不固定的,只能通过所指对象的 ob_type 属性动态进行判断,而Python正是通过 ob_type 实现了多态机制

Python在管理维护对象时,通过引用计数来判断内存中的对象是否需要被销毁,Python中所有事物都是对象,所有对象都有引用计数 ob_refcnt 。

当一个对象的引用计数减少到0之后,Python将会释放该对象所占用的内存和系统资源。

但这并不意味着最终一定会释放内存空间,因为频繁申请释放内存会大大降低Python的执行效率,因此Python中采用了内存对象池的技术,是的对象释放的空间会还给内存池,而不是直接释放,后续需要申请空间时,优先从内存对象池中获取。

原创文章,作者:WNY1U,如若转载,请注明出处:https://www.506064.com/n/128225.html

(0)
WNY1UWNY1U
上一篇 2024-10-03
下一篇 2024-10-03

相关推荐

  • 深入探讨select concat函数

    一、基本介绍 select concat函数是MySQL中常用的字符串拼接函数之一,它将两个或多个字符串拼接成一个字符串。 concat函数的语法格式如下: SELECT CONC…

    编程 2024-10-04
  • module.js源码(html module)

    1、nodejs 运行错误:module.js:340 throw err;是什么原因 2、如何加载Nodejs模块 3、为什么nodejs的module.js里用了readFil…

  • 在php页面上(php 页面)

    本文目录一览: 1、php为何在网页上中文显示乱码 2、想在php页面上显示XML内容,该怎么办? 3、PHP在页面上中文会显示乱码 php为何在网页上中文显示乱码 1、这个是典型…

  • ES添加数据:从基础到进阶

    ES(ElasticSearch)是一个高可用性、可扩展性的开源全文搜索及分析引擎。在大数据环境下,它是一种性能强大、可扩展的分布式系统,能够管理和分析PB级别的数据。ES是基于L…

    编程 2024-10-04
  • 如何使用nowrap CSS属性对文本进行单行显示?

    一、nowrap属性介绍 nowrap是CSS中文本属性的一种,可以强制文本在一行内显示。具体而言,nowrap可以防止文本被中断,强制它在容器中保持单行显示。 nowrap是wh…

    编程 2024-10-03
  • Java Date格式详解

    一、简介 在Java程序开发中,Date类是一个重要的时间类,用来表示精确的日期和时间。Date类的格式在程序中十分重要,它默认的格式可能不适合当前的需求,因此对Date格式的处理…

    编程 2024-10-03
  • 服务器新装mysql,服务器新装网卡识别不了

    本文目录一览: 1、阿里云服务器如何安装MySQL数据库 2、linux服务器上怎么安装mysql 3、如何在一台服务器上安装两个mysql或者更多 4、怎么安装mysql服务端 …

    编程 2024-10-04
  • Java 输入输出流简介

    Java是一门可以进行文件读写操作的编程语言,而Java的输入输出流就是这样的一个文件读写系统。本文将介绍Java输入输出流的基础概念、输入流和输出流的区别、以及常用的输入输出类。…

    编程 2024-10-08
  • python语种检测,Python检测

    本文目录一览: 1、python的语言特点有哪些 2、python语言不区分大小写,但是eclipse做语法检查的时候,是区分大小写的,如何解决 3、python 判断一个字符串是…

    编程 2024-10-03
  • 深入理解Nginx Hash模块

    一、什么是Nginx Hash模块 Nginx Hash模块是Nginx的一项重要功能,可以提供基于hash算法的负载均衡支持。通过Hash算法,可以将每一个客户端请求都分配给一个…

    编程 2024-10-03

发表回复

登录后才能评论