Python黑帽编程2.2 数值类型

简介:

Python黑帽编程2.2  数值类型

数值类型,说白了就是处理各种各样的数字,Python中的数值类型包括整型、长整型、布尔、双精度浮点、十进制浮点和复数,这些类型在很多方面与传统的C类型有很大的区别。

Python中的数值类型都是不可变类型,意味着创建、修改数字的值,都会产生新的对象,当然这是幕后的操作,编程过程中大可不必理会。

2.2.1 标准整型和长整型

标准整型等价于C中的有符号长整型(long),与系统的最大整型一致(如32位机器上的整型是32位,64位机器上的整型是64位),可以表示的整数范围在[-sys.maxint-1, sys.maxint]之间。整型字面值的表示方法有3种:十进制(常用)、八进制(以数字“0”开头)和十六进制(以“0x”或“0X”开头)。

# -*- coding:utf-8 -*-

 

a = 0101

print 'a='+str(a)

 

b=64

print 'b='+str(b)

c=-237

print 'c='+str(c)

d=0x80

print 'd='+str(d)

e=-0x92

print 'e='+str(e)

上面的代码输出结果为:

2

长整型是整型的超集,可以表示无限大的整数(实际上只受限于机器的虚拟内存大小)。长整型字面值的后面带有字母“L”或“l”(推荐使用大写的“L”)。

长整型和标准整型,目前已经基本统一,当数学运算遇到整型异常的情况,在Python2.2以后的版本,会自动转换为长整型。例如:

3

2.2.2  布尔型和布尔对象

布尔型其实是整型的子类型,布尔型数据只有两个取值:TrueFalse,分别对应整型的10

每一个Python对象都天生具有布尔值(TrueFalse),进而可用于布尔测试(如用在ifwhile中)。

以下对象的布尔值都是False,除此之外是True

None

False(布尔型)

0(整型0

0L(长整型0

0.0(浮点型0

0.0+0.0j(复数0

''(空字符串)

[](空列表)

()(空元组)

{}(空字典)

   用户自定义的 类实例,该类定义了方法 __nonzero__()  __len__(),并且这些方法返回0False

下面我们通过几段代理来加深对布尔类型的认识。

# -*- coding:utf-8 -*-

#基本测试

print bool(1)

print bool(True)

print bool('0')

print bool([])

pring bool((1,))

结果如下:

4

下面我们看看bool类型作为只有01取值的特殊整型的特性。

# -*- coding:utf-8 -*-

 

#使用bool

foo = 42

bar = foo<42

print bar

 

print bar+10

print '%s' %bar

print '%d' %bar

运行结果如下:

5

再来验证下没有_nonzero_()方法的对象,默认是True

 

#_nozero_()

class C:pass

 

c=C()

print bool(c)

运行结果如下:

6

2.2.3 双精度浮点型

Python里的浮点型数字都是双精度,类似C语言的double类型。可以用十进制或者科学计数法表示。下面我们看一些典型的浮点型数字。

# -*- coding:utf-8 -*-

print 0.0

print -777.

print -5.555567119

print 96e3 * 1.0

print -1.609E-19

运行结果如下:

7

2.2.4 复数

Python中,有关复数的概念如下:

l  虚数不能单独存在,它们总是和一个值为0.0的实数部分一起来构成一个复数。

l  复数由实数部分和虚数部分组成。

l  表示虚数的语法:real+imagj.

l  实数部分和虚数部分都是浮点型。

l  虚数部分必须有后缀jJ

下面是几个复数的例子:

print 64.375+1j

print 1.23e-045+6.7e+089j

运行结果如下:

8

2.2.5 十进制浮点型

十进制浮点通常称为decimal类型,主要应用于金融计算。双精度浮点型使用的是底和指数的表示方法,在小数表示上精度有限,会导致计算不准确,decimal采用十进制表示方法,看上去可以表示任意精度。

下面我们看一下十进制浮点的例子。

from decimal import *

 

dec=Decimal('.1')

print dec

print Decimal(.1)

print dec +Decimal(.1)

使用decimal类型,首先要引入decimal模块,然后通过Decimal类来初始化一个Decimal对象。

运行结果如下:

9

2.2.6 操作符

下表是主要的操作类型,供参考。

操作

说明

bool

int

long

float

complex

x ** y

指数运算

+x

符号不变

-x

符号取反

~x

按位取反

   

x * y

乘法

x / y

除法

x // y

地板除

x % y

取余

x + y

加法

x - y

减法

x << y

位左移

   

x >> y

位右移

   

x & y

按位与

   

x ^ y

按位异或

   

x | y

按位或

   

abs(x)

取绝对值

bin(x)

整型->二进制字符串

   

bool(x)

布尔型转换

chr(x)

ASCII->单字符串

   

complex(re, im)

实部为re,虚部为im的复数

divmod(x, y)

除法及取余

float(x)

浮点转换函数

 

hex(x)

整型->十六进制字符串

   

int(x)

整型转换

 

long(x)

长整型转换

 

pow(x)

指数运算

oct(x)

整型->八进制字符串

   

round(x[, n])

保留n位小数并四舍五入

 

unichr(x)

ASCII->Unicode单字符串

 



Python中同时支持不同数值类型的数字进行混合运算,数字类型不一致怎么做运算?这个时候就涉及到强制类型转换问题。这种操作不是随意进行的,它遵循以下基本规则: 

首先,如果两个操作数都是同一种数据类型,没有必要进行类型转换。仅当两个操作数类型不一致时,Python才会去检查一个操作数是否可以转换为另一类型的操作数。如果可以,转换它并返回转换结果。

由于某些转换是不可能的,比如果将一个复数转换为非复数类型,将一个浮点数转换为整数等等,因此转换过程必须遵守几个规则。要将一个整数转换为浮点数,只要在整数后面加个.0就可以了。要将一个非复数转换为复数,则只需要要加上一个0j”的虚数部分。

这些类型转换的基本原则是:整数转换为浮点数,非复数转换为复数。在 Python 语言参考中这样描述coerce()方法: 

如果有一个操作数是复数,另一个操作数被转换为复数。 

否则,如果有一个操作数是浮点数,另一个操作数被转换为浮点数。

否则如果有一个操作数是长整数,则另一个操作数被转换为长整数;

否则,两者必然都是普通整数,无须类型转换。

数字类型之间的转换是自动进行的,程序员无须自己编码处理类型转换。Python 提供了 coerce() 内建函数来帮助你实现这种转换。

转换流程图如下图所示:

10

2.2.7转换工厂

函数 int(), long(), float()  complex() 用来将其它数值类型转换为相应的数值类型。从Python2.3开始,Python 的标准数据类型添加了一个新成员:布尔(Boolean)类型。从此 true false 现在有了常量值即 True  False(不再是10)

下面是使用工厂函数的简单例子。

11

2.2.8 进制转换

目前我们已经看到Python支持8进制、十进制和十六进制整型,同时还提供了oct()hex()内建函数来返回八进制和十六进制字符串。

12

2.2.9 ASII 转换

chr函数和ord函数分别用来将数字转换为字符,和字符转换为数字。

13

2.2.10 小结

本节对Python数值类型做个比较全面的讲解,网络编程过程中会有大量的数值运算。

更高级的科学计算,推荐大家了解下两个著名的第三方包,NumPySciPy

 

2.3节《字符串、列表和元组》已经在微信订阅号抢先发布,心急的同学进入订阅号(二维码在下方),从菜单网络安全”—>”Python黑帽编程进入即可。

本节视频教程获取方法,请扫描二维码,在菜单网络安全”——>”Python黑帽编程中找到对应的本文2.2.10节,有详细方法。

 

由于教程仍在创作过程中,在整套教程完结前,感兴趣的同学请关注我的微信订阅号(xuanhun521,下方二维码),我会第一时间在订阅号推送图文教程和视频教程。问题讨论请加qq群:Hacking 1群):303242737   Hacking 2群):147098303

 

关注之后,回复请回复“Python”,获取更多内容。

 


本文转自玄魂博客园博客,原文链接:http://www.cnblogs.com/xuanhun/p/5728975.html,如需转载请自行联系原作者

目录
相关文章
|
5月前
|
索引 Python
Python的变量和简单类型
本文介绍了Python中变量命名规则、常用变量类型及字符串操作。变量命名需遵循字母、数字和下划线组合,不能以数字开头且不可与关键字冲突。字符串支持单引号、双引号或三引号定义,涵盖基本输出、转义字符、索引、拼接等操作。此外,还详细解析了字符串方法如`islower()`、`upper()`、`count()`等,帮助理解字符串处理技巧。
114 15
|
28天前
|
安全 JavaScript Java
Python中None与NoneType的真相:从单例对象到类型系统的深度解析
本文通过10个真实场景,深入解析Python中表示“空值”的None与NoneType。从单例模式、函数返回值,到类型注解、性能优化,全面揭示None在语言设计与实际编程中的核心作用,帮助开发者正确高效地处理“无值”状态,写出更健壮、清晰的Python代码。
126 3
|
5月前
|
机器学习/深度学习 数据可视化 算法
Python数值方法在工程和科学问题解决中的应用
本文探讨了Python数值方法在工程和科学领域的广泛应用。首先介绍了数值计算的基本概念及Python的优势,如易学易用、丰富的库支持和跨平台性。接着分析了Python在有限元分析、信号处理、优化问题求解和控制系统设计等工程问题中的应用,以及在数据分析、机器学习、模拟建模和深度学习等科学问题中的实践。通过具体案例,展示了Python解决实际问题的能力,最后总结展望了Python在未来工程和科学研究中的发展潜力。
108 0
|
1月前
|
缓存 数据可视化 Linux
Python文件/目录比较实战:排除特定类型的实用技巧
本文通过四个实战案例,详解如何使用Python比较目录差异并灵活排除特定文件,涵盖基础比较、大文件处理、跨平台适配与可视化报告生成,助力开发者高效完成目录同步与数据校验任务。
79 0
|
1月前
|
IDE API 开发工具
Python类型注解:让代码“开口说话”的隐形助手
Python类型注解为动态语言增添类型信息,提升代码可读性与健壮性。通过变量、函数参数及返回值的类型标注,配合工具如mypy、IDE智能提示,可提前发现类型错误,降低调试与协作成本。本文详解类型注解的实战技巧、生态支持及最佳实践,助你写出更高质量的Python代码。
106 0
|
3月前
|
Python
Python编程基石:整型、浮点、字符串与布尔值完全解读
本文介绍了Python中的四种基本数据类型:整型(int)、浮点型(float)、字符串(str)和布尔型(bool)。整型表示无大小限制的整数,支持各类运算;浮点型遵循IEEE 754标准,需注意精度问题;字符串是不可变序列,支持多种操作与方法;布尔型仅有True和False两个值,可与其他类型转换。掌握这些类型及其转换规则是Python编程的基础。
211 33
|
2月前
|
数据采集 分布式计算 大数据
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
不会Python,还敢说搞大数据?一文带你入门大数据编程的“硬核”真相
87 1
|
4月前
|
Python
Python技术解析:了解数字类型及数据类型转换的方法。
在Python的世界里,数字并不只是简单的数学符号,他们更多的是一种生动有趣的语言,用来表达我们的思维和创意。希望你从这个小小的讲解中学到了有趣的内容,用Python的魔法揭示数字的奥秘。
114 26
|
3月前
|
设计模式 安全 Python
Python编程精进:正则表达式
正则表达式是一种强大的文本处理工具,用于搜索、匹配和提取模式。本文介绍了正则表达式的语法基础,如`\d`、`\w`等符号,并通过实例展示其在匹配电子邮件、验证电话号码、处理日期格式等场景中的应用。同时,文章提醒用户注意性能、编码、安全性等问题,避免常见错误,如特殊字符转义不当、量词使用错误等。掌握正则表达式能显著提升文本处理效率,但需结合实际需求谨慎设计模式。
135 2
|
4月前
|
人工智能 安全 IDE
Python 的类型安全是如何实现的?
本文探讨了 Python 的类型安全实现方式。从 3.5 版本起,Python 引入类型提示(Type Hints),结合静态检查工具(如 mypy)和运行时验证库(如 pydantic),增强类型安全性。类型提示仅用于开发阶段的静态分析,不影响运行时行为,支持渐进式类型化,保留动态语言灵活性。泛型机制进一步提升通用代码的类型安全性。总结而言,Python 的类型系统是动态且可选的,兼顾灵活性与安全性,符合“显式优于隐式”的设计哲学。

热门文章

最新文章

推荐镜像

更多