Python常用内置对象
在python中处理的一切都是对象
内置对象可直接使用,非内置对象需要导入模块才能使用
常量与变量
- 不需要事先声明变量名及其类型
- 直接赋值即可创建各种类型的对象变量
- python中的变量并不直接存储值,而是存储了值的内存地址或引用
-允许多个变量指向同一个值
- python采用基于值的内存管理方式,如果为不同变量赋值为相同值(-5至256的整数和短字符串),这个值在内存中只有一份。
- python是强类型编程语言,是动态类型语言。
- 定义变量名的规则;
数字
支持任意大的数字,由内存决定
尽量避免在实数之间进行相等性测试,而是应该以两者之差的绝对值是否足够小来作为依据
算数运算表达式求值时会进行隐式的类型转换(复数,实数,整数)
支持复数类型及其运算
内置函数abs(x):计算复数x的模
支持在数字中间使用单个下划线作为分隔提高可读性1_000_000
标准库fractions中的Fraction对象支持分数及其运算
from fractions import Fraction
x = Fraction(3,5) #x = 3/5
x.numerator #查看分子
x.denominator #查看分母
标准库fractions中的Decimal类实现了更高精度实数的运算
from fractions import Decimal
Decimal(1/9)
字符串与字节串
- python中没有字符常量和变量的概念
- 只有字符串类型的常量和变量,单个字符也是字符串。
- 使用单引号,双引号,三单引号,三双引号作为定界符表示字符串,不同的定界符之间可以互相嵌套。
- 可以使用中文作为变量名
- 字符串连接
```python
x = 'good''morning' #连接字符串,仅适用于字符串常量
# x:'good morning'
```
```python
x = 'good'
x = x'moring'
#ERROR,不适用于字符串变量
```
字符串变量、常量、变量与常量之间的连接可以使用‘+’。
- 对str类型的字符串调用encode()方法进行编码得到bytes字节串,对bytes字节串调用decode()方法并指定正确的编码格式得到str字符串。
```python
b'Hello world' #字节串
运算符与表达式
优先级:算术运算符、位运算符、成员测试运算符、关系运算符、逻辑运算符等。
算数运算符
+运算符除了用于算数加法外,还可以用于列表、元组、字符串的连接,但不支持不同类型对象之间相加或连接。
True+3 #True + 3 = 4
*运算符除了表示算数乘法,还可用于列表、元组、字符串与整数的乘法,表示序列元素的重复,生成新的序列对象。
//:向下取整
-15 // 4 # -15 // 4 = -4
关系运算符
可以连用
1<3<5 #等价于1<3 and 3<5
#True
具有惰性求值的特点
比较字符串之间,列表之间大小
测试是否子集
{1,2,3} < {1,2,3,4}
#True
in,is
in:测试一个对象是否为另一个对象的元素
3 in [1,2,3]
#True
is:测试两个对象是否为同一个
如果是,二者具有相同的内存地址
x = [300,300]
x[0] is x[1]
#True
x = [1,2,3]
y = [1,2,3]
x is y
#False
x[0] is y[0]
#True
位运算符与集合运算符
位运算符只能用于整数
集合运算符:交、并、差、对称差
逻辑运算符
and or not
and和or:惰性求值
and和or并不一定返回True或False,而是得到最后一个被计算的表达式的值;not一定返回True或False。
矩阵乘法运算符@
补充说明
Python不支持++和--运算符。
关键字
导入模块keyword后,使用print(koyword.kwlist)查看所有关键字。
常用内置函数
内置函数是python内置对象类型之一,不需要导入任何模块即可直接使用。
dir(builtins)查看所有内置函数和内置对象。
help(函数名)可以查看某个函数的用法。
类型转换与类型判断
bin(),oct(),hex()
将整数转换为二进制,八进制,十六进制。
参数必须为整数。
bin(524)
- int()
将其他形式的数字转换为(十进制)整数
第一个参数可以为整数,实数,分数或合法的数字字符串
参数为数字字符串时,还允许指定第二个参数base用来说明进制,base的取值为0或2-36之间的整数,0表示按数字字符串隐含的进制进行转换。
```python
int('0x22b',16)
out:555
float()将其他类型数据转换为实数,complex()生成复数。
complex(3,5)
out:3+5j
ord()和chr()
ord()用来返回单个字符的Unicode码,chr()返回Unicode编码对应的字符。
内置类bytes用来生成字节串,或把指定对象转换为特定编码的字节串。
list(),tuple(),dict(),set(),frozenset()
把其他类型的数据转换为列表,元组,字典,可变集合和不可变集合,或者创建空……。
type()和isinstance()可以用来判断数据类型
isinstance(3,int)
out:True
最值与求和
max(),min(),sum()
max()和min()还支持default参数和key参数,前者指定可迭代对象为空时默认返回的最大或最小值,后者指定比较大小的依据,可以说函数或lambda表达式。
sum()支持start参数,控制求和的初始值。
max(['2','111'],key = len)
out:'111'
print(max([],default = None))
out:None
sum((2, 3, 4), 1) # 元组计算总和后再加 1
out:10
输入和输出
input()
一律返回字符串
print()
print(value1,value2,...,sep = ' ',end = '\n',file = sys.stdout,flush = False)
eval()
对字符串求值,或类型转换
排序与逆序
sorted()
可以对所有可迭代的对象进行排序操作,返回新列表
sorted(iterable, cmp=None, key=None, reverse=False)
cmp -- 比较的函数,这个具有两个参数,参数的值都是从可迭代对象中取出,此函数必须遵守的规则为,大于则返回1,小于则返回-1,等于则返回0。
- key -- 主要是用来进行比较的元素,只有一个参数,具体的函数的参数就是取自于可迭代对象中,指定可迭代对象中的一个元素来进行排序。
- reverse -- 排序规则,reverse = True 降序 , reverse = False 升序(默认)。
>>> L=[('b',2),('a',1),('c',3),('d',4)]
>>> sorted(L, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函数
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>> sorted(L, key=lambda x:x[1]) # 利用key
[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
>>>students = [('john', 'A', 15), ('jane', 'B', 12), ('dave', 'B', 10)]
>>> sorted(students, key=lambda s: s[2]) # 按年龄排序
[('dave', 'B', 10), ('jane', 'B', 12), ('john', 'A', 15)]
reversed()
进行翻转(首尾交换)并返回可迭代的reversed()对象
枚举与迭代
enumerate()函数
枚举可迭代对象中的元素,返回可迭代的enumerate对象,其中每个元素都是包含索引和值的元组。
map(),reduce(),filter()
map()
把一个函数依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map()对象,每个元素是原序列的元素经过函数处理后的结果。
def add(x+y):
return x+y
list(map(add,range(5),range(5,10)))
out:[5,7,9,11,13]
reduce()
标准库functools
将一个接收2个参数的函数以迭代累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上,允许指定一个初始值。
-filter()
将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素。
range()
range(start, stop[, step])
左闭右开
zip()
zip()
将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表.