Python-2.语言基础

砂糖桑
Aug 12, 2022
Last edited: 2022-8-14
type
Post
status
Published
date
Aug 12, 2022
slug
python-2
summary
本篇主要学习Python的基本数据类型、模块函数和系统内置函数、以及运算符。通过本节的学习基本可以使用Python的命令行解释器,进行简单的运算等操作。
tags
Python课堂笔记合集
category
Python
icon
password
Property
Aug 14, 2022 11:17 AM
本篇主要学习Python的基本数据类型(整型、浮点型、复数型、字符串类型)和常用模块和内置函数(mathcmathrandom)。

基本数据类型

Python内置的数据类型包括数值型、字符串型、布尔型等基本(简单)数据类型以及列表、元组、字典、集合等复杂数据类型。现在关注的是基本数据类型,复杂数据类型后面一一学习。

整型

Python 2.x中的整型包括int和long两种,长整型无需考虑溢出的问题。到了3.x,统一采用了长整型。
Python 3.x中整型数据的大小可以是任意大,无需考虑溢出。它的原理是将整型的数值用int数组来存储,当要溢出的时候就增加数组的空间。正是因为不用考虑数值的溢出,使用Python对大数据进行计算是很方便的。
整型可以表示为十进制、二进制、八进制和十六进制:
  1. 十进制:默认使用
  1. 二进制:前面加上0b或0B
  1. 八进制:前面加上0o或0O
  1. 十六进制:前面加上0x或0X
notion image

浮点型

浮点型表示的是一个实数,它有小数形式和指数形式两种表示方式:
  1. 小数形式
    1. 包括整数和小数部分,用小数点分隔。如果小数点后面没有数,那么默认小数部分为0,如34.=34.0。
  1. 指数形式
    1. 格式为[数值部分]e/E[指数部分]。需要注意数值部分和指数部分必须都要有,且指数部分必须为整数。如e4、4e、3.4e3.5这样的表示都是非法的。
注意Python 3.x默认提供的浮点数总共有17位有效数字的精度。超过的话就会减去低位。
此外,由于计算机需要将数据先转化为二进制再进行计算。而十进制小数转化为二进制小数时可能出现无限小数(乘2取整),且Python中浮点数精度有限,所以精度以外的数值都会被舍弃,所以最后结果可能接近预期结果但不相等。如果某位的后面全是0,那么就不会显示后面的0。
为什么0.1+0.2不等于0.3?原来编程语言是这么算的......
打开你的 Python,输入「0.1+0.2=」,结果是多少?0.30000000000000004 对不对?为什么结果不是 0.3?本文作者给出了详细的解释。 选自Medium,作者:Parul Malhotra,机器之心编译,参与:高璇、张倩。 从小我们就知道 0.1 + 0.2=0.3。但是,在光怪陆离的计算世界中,运算方式却大相径庭。 我最近开始用 JavaScript 进行编码,在阅读数据类型时,我注意到 0.1 + 0.2 不等于 0.3 的奇怪行为。我向 Stack Overflow 寻求帮助,在上面找到了一些有用的帖子。如下图所示: 经过大量的研究和数学运算后,我得出结论,这不是错误。这是数学运算中的浮点运算。让我们进一步了解内在机制。 问题描述:为什么 0.1 + 0.2 = 0.30000000000000004? 如果你用 Java 或 C 语言编过程,那你一定知道用于存储值的不同数据类型。我们在前面的讨论中将考虑两种数据类型:整数型和浮点型。 整数型存储整数,而浮点型存储小数。 在这之前,我们先来了解一个小概念:为了实现计算,数字是如何表示的?极小数和极大数通常用科学计数法表示,即: 同样,如果一个用科学计数法书写的数字小数点前有一个非零的十进制数,则该数字是标准化写法。例如,0.0005606 用科学计数法的标准化写法为: Significant 是指不包含零的有效数字,base 表示所使用的进制--此处为十进制(10)。Exponent(指数)表示小数点需要向左或向右移动的步数。 现在,有两种显示浮点数的方法:单精度和双精度。在进行浮点运算时,单精度使用 32 位,而双精度使用 64 位。 与许多其他编程语言不同,JavaScript 并未定义不同类型的数字数据类型,而是始终遵循国际 IEEE 754
为什么0.1+0.2不等于0.3?原来编程语言是这么算的......
notion image
notion image

复数型

工程上复数的计算用得很多,而Python本身就提供复数类型,所以Python的使用领域很广。
复数的格式为a+bj/J。a为实部,b为虚部,可以通过.real和.imag分别获取到a和b。获取到的a和b都是浮点型。
notion image

字符串类型

Python可以使用单引号’或双引号”来定义一个行内字符串,使用三个引号’’’或”””来定义一个多行字符串(文本块)。也可以在字符串中使用转移字符。
可以对字符串可以进行的操作有:
  1. 按照下标访问对应位置的字符
  1. 给定下标范围对字符串进行切片
  1. 使用eval()函数删去字符串最外面那层引号
    1. notion image
  1. 使用len()函数获取字符串的长度
notion image
不能对字符串进行的操作:
  • 不能修改字符串的某个字符,只能重新赋值。这是Python的语言特性,重新赋值后原来的字符串就会被解释器自动进行垃圾回收。

布尔类型

包括True和False。和C++不同,它们的首字母要大写。
需要注意浮点数判等的方法:
notion image

常用模块函数

math模块

  1. math.e表示自然常数e
  1. math.pi表示圆周率pi
  1. fabs(x)返回x的绝对值(浮点数)
  1. sqrt(x)返回x的平方根(浮点数)
  1. pow(x,y)返回x的y次方
  1. exp(x)返回e的x次方
  1. log(x,y)返回 的结果
    1. log(x)返回 的结果
    2. log10(x)返回 的结果
  1. ceil(x)返回x向上取整的结果
  1. floor(x)返回x向下取整的结果
  1. degrees(x)将x(弧度)转化为角度
  1. radians(x)将x(角度)转化为弧度
  1. sin(x)、cos(x)、tan(x)的x为弧度
>>> import math >>> math.e 2.718281828459045 >>> math.pi 3.141592653589793 >>> math.fabs(-4) 4.0 >>> math.sqrt(2) 1.4142135623730951 >>> math.pow(2,3) 8.0 >>> math.exp(2) 7.38905609893065 >>> math.log(100,10) 2.0 >>> math.log10(100) 2.0 >>> math.log(math.exp(2)) 2.0 >>> math.ceil(0.5) 1 >>> math.floor(0.5) 0 >>> math.degrees(math.pi) 180.0 >>> math.radians(180) 3.141592653589793 >>> math.radians(180)/math.pi 1.0

camth模块

它的函数和math模块基本一致,区别是它由于复数运算。

random模块

  1. 使用random.seed(x)设置生成随机数的种子。它是一系列随机操作的依据。
  1. 使用random.choice(array)按照种子从数组的元素中选择一个元素。
  1. 使用random.sample(array, k)按照种子从array中挑选k个元素。
  1. 使用random.shuffle(array)按照种子将array中的元素随机排序。
  1. 使用random.random()随机生成[0,1)的一个实数。
  1. 使用random.uniform(a, b)随机生成[a, b)范围内的一个实数。
  1. 使用random.randint(a, b)随机生成[a, b]范围内的一个整数。
notion image
🖊️
随机操作都和种子有关。当种子一样时结果也是一样的。如果不设定种子默认采用系统时间。所以说这里的随机实际上是种子的随机。

常用内置函数

当我们使用type()查看类型时,就会发现区别。
notion image
这就类似于shell中的命令包括内置命令、可执行程序和shell脚本一样,Python中的函数也有内置函数和模块函数。模块又有内置模块和第三方模块,不要搞混了!常用的内置函数如下:

range()函数

一个典型的使用range的场景是在for循环中:
for i in range(0, 6): print(i)
range的基本格式为range([start],[end],[step]),说明如下:
  1. range返回的是一个可迭代对象
  1. 相当于从start开始,以step为公差,一直到end的等差数列。范围是左闭右开[start, end)。
  1. 如果要逆序,则将step设为负值即可。
  1. start缺省默认为0,step缺省默认为1。
python常用函数--Range函数使用方法(3.X版本)【21年10月更新】
以下内容都是基于python3.X版本,后续出了python4.X版本再进行更新。 本文主要是向小白讲解range函数的用法,老鸟可以略过 python基础语法--while循环语句详解(3.X版本) python基础语法--for循环语句详解(3.X版本) python常用函数--Range函数使用方法(3.X版本) 1、range函数的功能: range()是用来返回一个迭代对象,而不仅仅是计算某一个值,所以在实际使用当中range经常搭配for语句使用。 2、 range函数的语法 起始值: 对象最初迭代开始的值,若缺省起始值的情况下默认为0,例如range(3)等同于range(0,3); 终值: 对象迭代的最终结束值,例如range(0,3)就是按顺序从0,1,2进行迭代; 步长: 可以简单的理解为迭代值的跨度,例如range(0,4,2)的意思是按0,2进行迭代 注意:range迭代对象遵循左闭右开的原则 3、 range函数可以反方向迭代 range函数是支持负方向迭代的,把步长设为负数即可 举个例子说明:range(0,-8,-2)表示为按0,-2,-4,-6进行迭代。 4、range函数迭代的对象可以通过下标访问 访问range函数迭代对象的内容跟列表、元组都非常相似,可以通过下标方式访问,range函数也可以理解为一个数列。 例如a=range(1,3),我们用下标来访问a当中的元素,a[0]=1,a[1]=2 a=range(1,3) print(a) print(a[0],a[1]) 运行结果 上面讲过range函数返回的是一个迭代的对象,是无法输出某一个值的,如果整个对象都需要进行输出,那么就得将range函数的内容转化成数组的形式。 转化方法: range函数转列表:list(range( ) ) range函数转元组:tuple(range( ) ) range函数转集合:set(range( ) ) 接下来用一个实例来说明 a=list(range(0,-8,-2)) b=tuple(range(0,-8,-2)) c=set(range(0,-8,-2)) print(a) print(b) print(c) 运行结果 如果把range函数理解成一个数列的话,那么for语句起到的作用就是遍历整个数列,下面我们通过一个例子来说明。 例子: 用for语句和range函数来写一个程序,计算1+2+3+4+5+6.......+100,并输出最终结果 b=0 for a in range(0,101): b+=a print(b) 运行结果 从这个实例当中可以看到,每进行一次累加计算都会输出一次计算的结果,之前讲while语句的时候也计算过这个例子,而for语句则更加简洁的就能完成这个计算, 在这个例子当中,变量a实际上是充当了一个计数器的作用。
python常用函数--Range函数使用方法(3.X版本)【21年10月更新】

数值运算函数

这里的部分函数和math模块的函数很相似。都能用的话还是尽可能使用内置函数:
notion image

基本运算符

算数运算符

包括+、-、*、/、//(整除)、%、**(乘方)
  1. //返回商的整数部分,与%配套。如果//的一个操作数是浮点数,那么结果返回的也是浮点数。
  1. x**y的结果和pow(x, y)一样。乘方运算符的优先级高于乘除。

位运算

包括&、|、~、^、>>、<<。和C++中的位运算符一样。

强制类型转换

格式都是 类型(操作数) 的形式。
  1. int(x)将x转化为整型——截尾取整或向零取整:int(-1.2)=-1。
  1. float(x)
  1. complex(x)将x转化为复数,实部为x,虚部为0。
  1. complex(x, y),实部为x,虚部为y。
Python-1.背景Python-3.程序结构