Python基础与拾遗1:Python中的数字

  • 写在前面
  • 数字常量
  • 表达式操作符
  • 变量
  • 除法
  • 复数
  • 二进制,八进制与十六进制
  • 常用内置数学工具
  • 小数与分数
  • 集合
  • 布尔

写在前面

转瞬之间,笔者已经有一年没有更新博客了。从硕士研究生毕业进入工作岗位后,也经历了一年半左右的时间。2019-2020是不平凡的两年,国际形势风云突变,时代的尘埃落在每个人的头顶上都是一座大山。在工业界中繁忙的工作之余,笔者也深切感受到基础的重要性。因此,从2021年开始,笔者决定多放送一些基础相关的干货。在计算机视觉领域中,Python语言是必不可少的数据处理,可视化,人工智能相关任务中所使用的工具,笔者打算从Python语言开始,为大家带来总结的干货与应用经验。

在博客写作中,笔者的风格是,偏重拾遗,而不过分重复互联网上现有的资源。个人才疏学浅,欢迎大家进行探讨与补充。

在笔者学习Python基础的过程中,主要使用到以下两类资源:

  1. 书籍资源。笔者主要参考机械工业出版社的《Python学习手册》第4版,Mark Luts著,李军 刘红伟等译。个人认为知识点覆盖比较细节,可以当成字典进行查阅或工作之余查缺补漏。本博客也主要借鉴书籍中的内容。

  2. 网络资源。读研时笔者通常会从菜鸟教程上学习Python相关基础,简洁明了,推荐大家借鉴。

由于现有主流使用的是Python3.x,视觉领域中也有部分框架使用的是Python2.x,比如Caffe 1.0。因此,在笔者的博客中,主要重点在Python 3.x的总结与拾遗,会捎带Python 2.x的用法。

废话不多说,下面开始干货,第一讲:Python中的数字。

数字常量

Python中常用的数字常量列表如下:

数字 常量
1234, -24, 0, 99999999999999 整数(无穷大小)
1.23, 1., 3.14e-10, 4E210, 4.0e+210 浮点数
0177, 0x9ff, 0b10101010 Python 2.6后的八进制,十六进制和二进制常量
0o(O)177, 0x(X)9ff, 0b(B)10101010 Python3.0后的八进制,十六进制和二进制常量
3+4j, 3.0+4.0j, 3J, complex(3, 4) 复数常量
  1. 整数就是十进制字符串,浮点数带“.”或者在整数与小数后面加上e或者E再跟上数字。
  2. 在超过32位时,Python 2.6及之后版本会自动给末未加上L或者l,为长整数。Python 3.0及之后版本则不会。
  3. 二进制,八进制,十六进制使用前缀。在Python 2.6及之后版本中,八进制可以仅以0开头,Python 3.0中不行。

表达式操作符

优先级由高到底列表如下:

操作符 描述
yield x 生成器函数发送协议
lambda args: expression 生成匿名函数
x if y else z 三元选择表达式
x or y 逻辑或(x为假才会计算y)
x and y 逻辑与(x为真才会计算y)
not x 逻辑非
x in y, x not in y 成员关系(可迭代对象,集合等)
x is y, x is not y 对象实体测试
x < y, x <= y, x > y, x >= y, x == y, x != y 大小比较,集合子集和超集值相等性操作符
x | y 按位或,集合并集
x ^ y 按位异或,集合对称差
x & y 按位与,集合交集
x << y, x >> y 左移或右移y位
x + y, x - y 加法/合并,减法,集合差集
x * y, x % y, x / y, x // y 乘法/重复,余数/格式化,除法真除法,除法floor除法
-x, +x 一元减法,识别
~x 按位求补(取反)
x ** y 幂运算
x[i] 索引(序列,映射或其他)点号区属性运算,函数调用
x[i:j:k] 分片
x(…) 调用(函数,方法,类及其他可调用的)
x.attr 属性引用
(…) 元组,表达式,生成器表达式
{…} 字典,集合,集合和字典解析
  1. Python 2.6及之后的版本中,值不相等除了!=,可以用<>,Python 3.0及之后的版本中不行。
  2. Python 2.6及之后的版本中,后引号表达式’X’与repr(X)作用相同,Python 3.0及之后的版本中移除,使用repr与str。
  3. Python 2.6及之后的版本中,除法/表示截断除法,Python 3.0及之后的版本中表示真正的除法
  4. 括号会改变优先级。
  5. 当两个混合类型相加时,会自动升级到复杂的数据类型,比如整数加浮点数。
  6. 连续比较,比分开单个比较更快,比如以下第一行速度快于第二行。连续比较允许任意长度。
X < Y < Z
X < Y and Y < Z

变量

  1. 变量在他第一次赋值时创建。
  2. 变量在表达式中使用将被替换为它们的值。
  3. 变量在表达式中使用以前必须被赋值。
  4. 变量像对象一样不需要在最开始就声明(注意与C,C++等语言的区别)。

除法

  1. X / Y。在 Python 2.6及之后的版本中如果都是整数,就执行Floor除法,否则执行真除法;在Python3.0中执行真除法。
  2. X // Y。在所有Python版本中都执行Floor除法。
  3. //执行Floor除法总是向下取整。5 // -2,结果为-3。
  4. 要在 Python 2.6及之后的版本中使得/做真除法。
# Python 2.6及之后的版本
# 真除法
X = 5
Y = 2
X / float(Y) # 2.5# 或者
from __future__ import division
X = 5
Y = 2
X / Y # 2.5

复数

  1. 复数的运算结果也是复数

二进制,八进制与十六进制

  1. 十进制与其他三种进制之间的转化,使用oct, hex和bin函数。
oct(64) # 八进制
hex(64) # 十六进制
bin(64) # 二进制
  1. 其他三种进制转化成十进制,使用int函数。
int('100', 8) # 八进制100转10进制
int('100', 16) # 十六进制100转10进制
int('100', 2) # 二进制100转10进制

常用内置数学工具

  1. math库。
import math
math.pi, math.e
math.sin(2 * math.pi / 180)
math.sqrt(144)
math.sqrt(2)
math.floor(-2.5)
math.trunc(-2.5)
  1. 次方运算。
pow(2, 4)
2 ** 4
  1. 绝对值与求和运算。
abs(-42.0)
sum((1, 2, 3, 4))
  1. 求最小与最大值运算。
min(3, 1, 4, 2)
max(3, 1, 2, 4)
  1. 取整运算(也可用来进制转换)。
int(2.5)
  1. 四舍五入运算。
round(2.5)
round(2.56789, 2)
  1. 随机值运算。
import random
random.random() # 随机生成[0, 1)范围内的数
random.randint(1, 10) # 在参数范围[1,10]内随机生成整数,注意能取到上界
random.choice([1, 2, 3, 4, 5, 6]) # 在列表中随机取值

小数与分数

  1. 小数问题由来。
0.1+0.1+0.1-0.3 # 结果是否为0.?
5.551115123125783e-17 # 真实结果

原因主要是因为计算机中对数字的存储格式决定的,详见知乎专栏《为什么0.1+0.2不等于0.3?原来编程语言是这么算的……》1,因此引入了小数模块

from decimal import Decimal
Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3') # 输出Decimal('0.0')
  1. 小数的全局精度。
decimal.getcontext().prec = 4 # 小数点后最多四位数
  1. 分数。
from fractions import Fraction
Fraction(4, 6) # Fraction(2, 3)
Fraction(0.25) # Fraction(1, 4)
  1. 分数和小数,都可以通过字符串创建。
Decimal('0.1')
Fraction('0.25')

集合

  1. 在Python 2.6及之后的版本中,用set关键字构造集合。
x = set('abcde')
y = set('bdxyz')

在Python 3.0及之后的版本中,也可以直接花括号构造集合,并支持集合解析。

x = {1, 2, 3, 4}
{x ** 2 for x in [1, 2, 3, 4]}
  1. 多种运算符。
x = set('abcde')
y = set('bdxyz')
'e' in x # True
x - y # set(['a', 'c', 'e'])
x | y, z = x.update(y) # set(['a', 'c', 'b', 'e', 'd', 'y', 'x', 'z'])
x & y, z = x.intersection(y) # set(['b', 'd'])
x ^ y # set(['a', 'c', 'e', 'y', 'x', 'z'])
x > y, x < y # False False
z.add('m') # set(['a', 'c', 'b', 'e', 'd', 'y', 'x', 'z', 'm'])
x.remove('a') # set(['b', 'e', 'd', 'c'])
S = set([1, 2, 3])
S.issubset(range(-5, 5)) # True
  1. 运算符的限制
{1, 2, 3} | [3, 4] # TypeError: unsupported operand type(s) for |: 'set' and 'list'
{1, 2, 3}.union([3, 4]) # {1, 2, 3, 4}
  1. 集合中只能包含不可变的元素,可变的元素不允许,比如列表,字典等。
  2. 普通的集合不能嵌入到其他集合中,frozenset这种冻结集合可以。

布尔

  1. bool类型数据,其值为True或者False。
  2. True和False看作是预定义的设置为整数1和0的变量。
type(True) # <class 'bool'>
isinstance(True, int) # True
True == 1 # True
True is 1 # False
True or False # True
True + 4 # 5

以上,欢迎各位读者朋友提出意见或建议。

欢迎阅读笔者后续博客,各位读者朋友的支持与鼓励是我最大的动力!

written by jiong
咬定青山不放松,脚踏实地加油干!


  1. https://zhuanlan.zhihu.com/p/87672024. ↩︎

Python基础与拾遗1:Python中的数字相关推荐

  1. Python基础与拾遗9:Python中的函数与作用域

    Python基础与拾遗9:Python中的函数与作用域 函数的作用 函数的设计理念 Python中的函数 Python中的函数关键字 Python中的多态 Python中函数的参数传递 Python中 ...

  2. Python基础与拾遗2:Python中的字符串与字符串格式化

    Python基础与拾遗2:Python中的字符串与字符串格式化 常见的字符串常量与表达式 字符串转义 索引和分片 原处修改字符串 字符串格式化 格式化表达式 格式化调用方法 添加具体格式化 本篇博文, ...

  3. Python基础知识点拾遗---文件IO(os、filecmp、shutil库)、sys库、序列化(pickle)、类

    Python基础知识点拾遗 文件IO 文本 目录 os 获取文件的创建.修改及最近访问时间 获取当前文件的大小 获取当前的登录用户名称 获取当前的cpu核数 调用操作系统底层的random生成器 sh ...

  4. python菜鸟基础教程-python基础菜鸟教程,Python的基础语法

    原标题:python基础菜鸟教程,Python的基础语法 什么是Python?Python是一门简单直观的编程语言,并且目前是开源的,可以方便任何人使用. Python的开发哲学:用一种方法,最好是只 ...

  5. Python基础班---第一部分(基础)---Python基础知识---第一个Python程序

    01. 第一个 HelloPython 程序 1.1 Python 源程序的基本概念 Python 源程序就是一个特殊格式的文本文件,可以使用任意文本编辑软件做 Python 的开发 Python 程 ...

  6. 什么是python基础教程-最好的Python入门教程是?

    Python教程领到手,学习不用愁!领! 作为一门编程语言,Python是属于入门比较简单的.所以身边不少人都选择了自学Python,而且网上相关资料也有很多,知识兔分享大量的Python教学课程,基 ...

  7. python基础教程菜鸟教程-python基础菜鸟教程,Python的基础语法

    原标题:python基础菜鸟教程,Python的基础语法 什么是Python?Python是一门简单直观的编程语言,并且目前是开源的,可以方便任何人使用. Python的开发哲学:用一种方法,最好是只 ...

  8. python基础教程是什么-python基础教程都有什么?

    分享一下传智播客的python基础教程 第一阶段 Python核心编程 可掌握的核心能力 1.掌握Python基础语法,具备基础的编程能力; 2.建立起编程思维以及面向对象程序设计思想.解决的现实问题 ...

  9. Python基础教程:用Python怎么telnet到网络设备

    Python基础教程:用Python怎么telnet到网络设备 0.前言 Telnet协议属于TCP/IP协议族里的一种,对于我们这些网络攻城狮来说,再熟悉不过了,常用于远程登陆到网络设备进行操作,但 ...

最新文章

  1. HANA report里默认filter的工作机制
  2. c malloc 头文件_干货笔记 | C/C++笔试面试详细总结(二)
  3. [剑指offer][JAVA]面试题第[15]题[二进制中1的个数][位运算]
  4. java http请求实现_JAVA实现HTTP请求方式
  5. python requirements.txt_python_requirements.txt使用
  6. SQLServer使用表值参数,高性能批量插入数据
  7. eclipse项目如何变成web项目_Eclipse中将Java项目转换成Web项目的方法
  8. 博客园五月纪念日——去你的写博无用论
  9. Atitit 视频编码与动画原理attilax总结
  10. CorelDRAWX8安装包下载 全新矢量图形编辑设计工具
  11. 射频放大电路的优化及ADS仿真
  12. 服务器装win10系统,win10服务器系统
  13. 计算几何常用的函数/方法
  14. vscode远程连接与控制使用
  15. 安卓学习 Day26:使用自定义视图绘制文本、图像与图形
  16. Android九环刀之RatingBar之评委请亮分
  17. h5微信f分享链接给对方获取对方手机号_企业微信可以搜索微信号添加好友/客户吗?怎样主动添加通过率高?...
  18. 免费体验,快速对接身份证实名认证API接口说明
  19. C程序设计-方法与实践(清华大学出版社)习题解析
  20. Shell编程学习(四)read读取、函数、文件归档、定时任务

热门文章

  1. linux socket错误提示errno分析
  2. 狼人杀游戏(单人联机)(C++)
  3. python多线程结束线程_Python多线程和Office第2部分
  4. 解决页面间体验问题的纯前端容器Lath
  5. 腾讯云部署Flask应用
  6. 关于jmeter中编写shell脚本json的应用
  7. FineReport——登录不到决策系统
  8. 关于2021年11月28日PMI认证考试的报名通知
  9. ERROR 2002 HY000 Can't connect to local MySQL server thro
  10. python 拼音识别_python识别一段由字母组成的字符串是否是拼音