Python-pip指令
Python-字符编码
Python-XML库
Python-openpyxl库
# -*- coding: UTF-8 -*-
'''
多行注释
创建员工类
'''
class Employee:
# 单行注释,员工类
empCount = 0
def __init__(self, name, salary):
self.name = name
self.salary = salary
Employee.empCount += 1
def displayCount(self):
print("Total Employee " Employee.empCount)
def displayEmployee(self):
print("Name : ", self.name, "Salary: ", self.salary)
employee1 = Employee('xiaoming', 2000)
salary = employee1.salary
在Python中不遵守编译器的规定,编译器在编译时就会报错,这个规定叫作规则。
# -*- coding: UTF-8 -*-
Python中单行注释以 #
开头,多行注释用'''注释'''
或者"""注释"""
。
python最具特色的就是使用缩进来表示代码块,不需要使用大括号{}
。缩进的空格数是可变的,但是同一个代码块的语句必须包含相同的缩进空格数。
Python 通常是一行写完一条语句,但如果语句很长,我们可以使用反斜杠\
来实现多行语句,例如:
total = item_one + \
item_two + \
item_three
[]
,{}
, 或()
中的多行语句,不需要使用反斜杠\
,例如:total = ['item_one', 'item_two', 'item_three',
'item_four', 'item_five']
面向对象是将数据和操作数据相关的方法封装到对象中,组织代码和数据的方式更加接近人的思维:
class MyClass(FatherClass) # 创建MyClass类,父类为FatherClass
self.my_attribute = value # MyClass具有属性my_attribute
def __init__(self) # 创建MyClass时执行初始化操作
super().__init__() # 继承FatherClass的初始化操作
# code # MyClass新增的初始化操作
def myMethod(self) # MyClass的方法
# code
面向对象三大特征:封装(私有),继承,多态。
在Python中,一切内容都是对象,一切函数都是对象的方法。
对于Python内置库的标准类,Python提供了查看类信息的方法。在CMD的Python编辑状态或者Pycharm软件的Python Console中可使用。
dir()
查看类的方法和属性dir(str)
得到以下结果:
['__add__',
'__class__',
'__contains__',
'__delattr__',
'__dir__',
'__doc__',
'__eq__',
'__format__',
'__ge__',
'__getattribute__',
'__getitem__',
'__getnewargs__',
'__gt__',
'__hash__',
'__init__',
'__init_subclass__',
'__iter__',
'__le__',
'__len__',
'__lt__',
'__mod__',
'__mul__',
'__ne__',
'__new__',
'__reduce__',
'__reduce_ex__',
'__repr__',
'__rmod__',
'__rmul__',
'__setattr__',
'__sizeof__',
'__str__',
'__subclasshook__',
'capitalize',
'casefold',
'center',
'count',
'encode',
'endswith',
'expandtabs',
'find',
'format',
'format_map',
'index',
'isalnum',
'isalpha',
'isascii',
'isdecimal',
'isdigit',
'isidentifier',
'islower',
'isnumeric',
'isprintable',
'isspace',
'istitle',
'isupper',
'join',
'ljust',
'lower',
'lstrip',
'maketrans',
'partition',
'replace',
'rfind',
'rindex',
'rjust',
'rpartition',
'rsplit',
'rstrip',
'split',
'splitlines',
'startswith',
'strip',
'swapcase',
'title',
'translate',
'upper',
'zfill']
以上是字符串str类
所具有的全部方法,对字符串可以进行的全部操作都由上面的方法定义。
比如dir(str)
这个函数的效果就是由__dir__
方法定义的。
比如str1 + str2
这个操作符的效果就是由 __add__
方法定义的。
help()
可以查看类和类方法的说明文档help(str) # 查看str类说明和所有方法说明
help(str.__len__) # 查看方法str.__len__的说明
注意,所有方法都可以采用 类实例名.方法名()
的方式调用,比如:
str.__len__()
str.upper()
但是,len()
并不是str类
的方法,而是 __len__
方法中定义的函数表达式,所以
len(str) # 正确
str.len() # 错误
前后双下划线的__方法名__
是系统定义的特殊方法,通常对应特殊的语法,运算符和函数。
对于自己安装的第三方库,无法使用 dir()
和 help()
查看信息,可以在CMD 控制台和Pycharm软件的Terminal中输入指令:
python -m pydoc -p 1234
浏览器会打开help目录,你所有安装过的第三方库api都可以查看,当然内置标准库也早在这里也可以看到。
对于MyClass类
,创建类实例 x
,如果类具有以下属性,则x
从类中获得相应的方法:
x = MyClass()
方法 | 说明 | 所写代码 |
---|---|---|
__doc__ |
类型帮助信息 | help(x) |
__init__ |
创建类实例时初始化 | x = MyClass() |
__str__ |
类的文本形式 | print(x) |
__dir__ |
列出所有属性和方法 | dir(x) |
__len__ |
序列的长度 | len(x) |
__contains__ |
了解某序列是否包含特定的值 | a in x |
__eq__ |
相等 | x == y |
__ne__ |
不相等 | x != y |
__lt__ |
小于 | x < y |
__le__ |
小于或等于 | x <= y |
__gt__ |
大于 | x > y |
__ge__ |
大于或等于 | x >= y |
__bool__ |
布尔上上下文环境中的真值 | if x: |
__enter__ |
内存访问资源 | open() |
__exit__ |
内存清除资源 | close() |
__new__ |
类构造器 | x = MyClass() |
__del__ |
类析构器 | del x |
__add__ |
加法运算发 | x + y |
__call__ |
回调 | x() |
__getattribute_ |
属性调用 | x.属性 |
python中数字有四种类型:整数、布尔型、浮点数和复数。
Python中定义数字没有字节数限制,无需做int
,char
等声明,可直接赋值。
Python用True
/False
表示布尔值。
a = 3452
b = True
c = 3E-2
d = 1+2j
x = y = 100
x,y = y,x
运算符 | 说明 |
---|---|
+ |
加 |
- |
减 |
* |
乘 |
** |
幂方 |
/ |
除 |
// |
整除 |
% |
求余 |
String类 | 说明 |
---|---|
=self[start:end:step] |
字符串的切片只能读取,不能赋值 |
=self.index(str) |
返回子串首位在字符串中的下标 没有则报 ValueError |
=self.find(str) |
返回子串首位在字符串中的下标 没有则返回 -1 |
=self.count(str) |
返回字串在字符串中出现次数 |
=self.replace(str1, str2) |
将str1 换成str2 ,返回字符串找不到 str1 则返回原字符串 |
=self.split(tr) |
以子串分隔字符串,默认为空格。返回字符串列表 |
=self.partition(str) |
字符串分割为sub 前,sub 和sub 后,默认为空格。返回字符串元组 |
=self.join(list) |
使用字符串连接列表中的字符串。返回字符串list ->字符串列表 |
=self.capitalize() |
全句第一个字符大写 |
=self.title() |
单词第一个字符大写 |
=self.upper() |
全部字符大写 |
=self.lower() |
全部字符小写 |
=self.swapcase() |
全部字符大小写对换 |
=self.strip(str) |
去除字符串首尾的子串,默认为空格 |
=self.lstrip(str) |
去除字符串左边的子串,默认为空格 |
=self.rstrip(str) |
去除字符串右边的子串,默认为空格 |
=self.center(n, str) |
居中对齐,用子串将字符串填充到n 位 |
=self.ljust(n, str) |
向左对齐,用子串将字符串填充到n 位 |
=self.rjust(n, str) |
向右对齐,用子串将字符串填充到n 位 |
=len(self) |
字符串元素数量 |
x1 = '' # 空字符串
x2 = 'abc'
x3 = str(123)
a = '''
x
y
z
'''
转义字符 | 说明 |
---|---|
\' |
单引号‘ |
\" |
双引号“ |
\\ |
反斜杠\ |
\n |
换行 |
\ (在行尾) |
续行符 |
\t |
TAB键 |
在print()
时,默认在字符串后加上换行符\n
,可用end=''
取消或者修改
print('sxt1', end='连接')
print('sxt2')
print('sxt3')
结果
sxt1连接sxt2
sxt3
x = 'a' + 'b' # x = 'ab'
y = 'ab' * 3 # y = 'ababab'
x = x + 'c' # x = 'abc'
对字符串x= 'abcde'
的每一个字符有两种定位方式:
字符串 | a | b | c | d | e |
---|---|---|---|---|---|
正序定位 | 0 | 1 | 2 | 3 | 4 |
逆序定位 | -5 | -4 | -3 | -2 | -1 |
使用[start:end:step]
选择区域,step
默认为1
,记住包头不包尾(包括start
,不包括end
)
x = 'abcde'
x = x[1] # 'b'
x = x[-4] # 'b'
x = x[:] # 'abcde'
x = x[2:] # 'cde'
x = x[:2] # 'ab'
x = x[:-2] # 'abc'
x = x[-2:] # 'de'
x = x[2:4] # 'cd'
x = x[0:4:2] # 'ac'
x = x[::-1] # 'edcba'
x = 'abcde'
x = x.replace('c','高')
结果:
x = 'ab高de'
x = 'ab cde'
x1 = x.split() #默认以空格分隔
x1 = x.split('c')
x2 = x.partition()
x2 = x.partition('c')
结果为:
x1 = ['ab', 'cde']
x1 = ['ab ', 'de']
x2 = ('ab', ' ', 'cde')
x2 = ('ab ', 'c', 'de')
x = '*'.join(['good','man'])
y = ''.join(['good','man'])
结果为:
x = 'good*man'
y = 'goodman'
x.find('*') # '*'第一次出现位置
x.count('*') # '*'出现次数
x = '我叫{0},年龄{1}'.format('小明',18)
y = '我叫{name},年龄{age}'.format(name = '小明', age = 18)
结果为:
x = '我叫小明,年龄18'
y = '我叫小明,年龄18'
字符串的所有排版,都不改变原变量,要有新变量接收
x = ‘I love you, I LOVE YOU’
# 句首字母大写
y1 = x.capitalize() # y1='I love you, i love you'
# 词首字母大写
y2 = x.title() # y2='I Love You, I Love You'
# 全大写
y3 = x.upper() # y3='I LOVE YOU, I LOVE YOU'
# 全小写
y4 = x.lower() # y4='i love you, i love you'
# 大小写对换
y5 = x.swapcase() # y5='i LOVE YOU, i love you'
x = '*I*love*you*'
y1= x.strip('*') # y1='I*love*you'
y2= x.lstrip('*') # y2='I*love*you*'
y3= x.rstrip('*') # y3='*I*love*you'
x = 'Love'
y1= x.center(10, '*') # y1='***Love***'
y2= x.ljust(10, '*') # y2='Love******'
y3= x.rjust(10, '*') # y3='******Love'
List类 | 说明 |
---|---|
=self[start:end:step] self[start:end:step]= |
列表的切片的可以读取或赋值 |
=self.index(elem) |
返回元素在列表中的下标,没有则报ValueError |
=self.count(elem) |
返回元素在字符串中出现次数 |
self.append(elem) |
向列表末尾追加单个元素 |
self.extend(list) |
向列表末尾追加列表 |
self.clear() |
清空列表 |
self.insert(index, elem) |
在指定位置插入元素 |
self.remove(elem) |
删除第一次出现的元素 |
self.pop([index]) |
弹出指定下标的元素,缺省时弹出最后一个 |
self.reverse() |
列表的反转,改变原列表的先后顺序 |
self.sort(reverse = False) |
将列表中的元素进行排序 默认按升序排列 |
=len(self) |
列表元素数量 |
=max(self) |
列表最大元素 |
=min(self) |
列表最小元素 |
=sum(self) |
列表元素和 |
x1 = [] # 空列表
x2 = list()
x3 = [10, 20, 'abc', True]
x4 = list('abcde')
x5 = list(range(10))
x6 = [range(10)]
结果为:
x1 = []
x2 = []
x3 = [10, 20, 'abc', True]
x4 = ['a', 'b', 'c', 'd', 'e']
x5 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
x6 = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
接受解包的变量数必须和列表元素数量相同
x = [10, 20, 30]
a, b, c = x
print a, b, c # 10, 20 ,30
x = [0, 1, 2, 3, 4]
x = x[1:4]
print(x) # x=[1, 2, 3]
列表+
运算两端必须都是列表
x = [0]
x = x + [1]
print(x) # [0, 1]
x = [10, 20]
y = x.append('*') # 元素添加到x尾部
结果为:
x = [10, 20, '*']
y = None
x = [10, 20]
b = [30, 40]
x.extend(b) # x=[10, 20, 30, 40]
x = [10, 20, 30]
x.insert(2, 25) # 在index=2处插入值25, x=[10, 20, 25, 30]
列表删除都是在原变量直接修改,不需要新变量接收结果
x = [10, 20, 30]
x.remove(20) # 删除x中首个元素20
print('x1 = ', x)
x = [10, 20, 30]
x.pop(1) #删除 index=1 处的元素,可用列表多选
print('x2 = ', x)
x.clear() #删除所有元素,变为空列表
print('x3 = ', x)
结果如下:
x1 = [10, 30]
x2 = [10, 30]
x3 = []
x = [10, 20 ,30]
y1 = x.index(20) #返回第一个元素20的index
y2 = x.count(20) #返回元素20的个数
y3 = len(x) #返回x的长度
y4 = max(x) #返回最大元素
y5 = min(x) #返回最小元素
y6 = sum(x) #返回元素和
升序/降序
x = [20, 10, 30, 40]
x.sort()
print('x1 = ', x)
x.sort(reverse=True)
print('x2 = ', x)
x = [20, 10, 30, 40]
x3 = x[::-1]
print('x3 = ', x3)
结果如下:
x1 = [10, 20, 30, 40]
x2 = [40, 30, 20, 10]
x3 = [40, 30, 10, 20]
元组是不可变序列,列表是可变序列
元组不能修改、增加、删除
Tuple类 | 说明 |
---|---|
=self[start:end:step] |
元组的切片只能读取 |
=self.index(elem) |
返回元素在元组中的下标 没有则报 ValueError |
=self.count(elem) |
返回元素在字符串中出现次数 |
=len(self) |
元组元素数量 |
=max(self) |
元组最大元素 |
=min(self) |
元组最小元素 |
=sum(self) |
元组元素和 |
del self |
删除元组 |
x = (10, 20, 30)
x = 10, 20, 30
x = (10,) #只有一个元素的元组要加逗号
x = tuple([10])
元组的访问操作和列表相同
元组不能增加、删除、排序元素,但是可以切片slice
x = (0, 1, 2, 3, 4)
x = x[1:4]
print(x) # x=(1, 2, 3)
元组的切片不能赋值
x = (0, 1, 2, 3, 4)
x[1] = 5 # 错误
集合是无序列表,元素不可重复
集合元素没有index
,没有切片
Set类 | 说明 |
---|---|
self.add(elem) |
添加一个元素 |
self.update(set) |
合并一个集合 |
self.remove(elem) |
删除一个元素 |
x = set() #空集合
x = {
10, 20, 30}
x = set([10, 20, 30])
注意,空集合是x=set()
,空字典是x={}
x = {
10, 20, 30}
x.add(40)
x.remove(20)
集合操作符 | 说明 |
---|---|
x | y |
并集 |
x & y |
交集 |
x - y |
差集 |
字典是键(key
)值(value
)成对的无序可变序列,其中键不可重复不可变,值可重复可变
Dictionary类 | 说明 |
---|---|
=self[key] self[key]= |
按键读取或写入对应的值 |
=self.get(key) self.get(key)= |
按键读取或写入对应的值 |
self.pop(key) |
删除指定键值对 |
self.clear() |
清空字典 |
self.update(dict) |
合并一个字典,同键的值覆盖 |
=self.keys() |
返回所有键组成的列表 |
=self.values() |
返回所有值组成的列表 |
=self.items() |
返回(键,值)元组组成的列表 |
以下创建方式等效:
x = {
} #空字典
x = {
'key1':10, 'key2':20, 'key3':30}
x = dict(key1 = 10, key2 = 20, key3 = 30)
x = dict([('key1', 10), ('key2', 20), ('key3', 30)])
x = dict(zip(['key1', 'key2', 'key3'], [10, 20, 30]))
x = {
'key1':10, 'key2':20, 'key3':30}
x.get('key1') = 10
x.get('key4', '不存在') # 输出‘不存在’
y = [x.keys()] # y = ['key1', 'key2', 'key3']
y = [x.values()] # y = [10, 20, 30]
x = {
'key1':10, 'key2':20, 'key3':30}
x['key1'] = 15 # 修改
x.update({
'key4': 40}) # 添加或覆盖
x.pop('key2') # 删除
clear(x) # 清除
x = {
'key1':10, 'key2':20, 'key3':30}
a1,a2,a3 = x.items() # 键值对解包
b1,b2,b3 = x.keys() # 键解包
c1,c2,c3 = x.values() # 值解包
结果:
a1 = ('key1', 10)
a2 = ('key2', 20)
a3 = ('key3', 30
b1 = 'key1'
b2 = 'key2'
b3 = 'key3'
c1 = 10
c2 = 20
c3 = 30
在Python中,能够使用in
关键字提取成分的是迭代器(Iterable
)。
5 in range(10) # True
迭代器包括两类,一类是集合数据类型,如list
、tuple
、dict
、set
、str
等;一类是生成器(generator)。
生成器记录列表的生成规律,但不创建和保存完整的列表,从而节省大量的空间。
range()
是最简单的生成器:
g = range(10)
g = range(0, 10, 2)
生成器不能用下标g[0]
表达,但是能用for...in
语句迭代。通过迭代能在range()
基础上生成更复杂的生成器
g = (x * x for x in range(10))
for n in g:
print(n)
生成器可使用 if
筛选
g = (x * x for x in range(10) if x % 2 == 0)
生成器可以两层迭代
g = (m+n for m in 'ABC' for n in '123')
生成器可以随时转为列表
list()
方法:g = list(range(10))
()
换成[ ]
可直接得到列表:g = [x for x in range(10)]
zip()
将多个迭代器的相同位置元素组成元组,形成新的列表用于迭代。
与两层迭代对比:
x = [a+b for a in 'ABC' for b in '123'] # 两层迭代
y = [a+b for a, b in zip('ABC', '123')] # 打包迭代
结果为:
x = ['A1', 'A2', 'A3', 'B1', 'B2', 'B3', 'C1', 'C2', 'C3']
y = ['A1', 'B2', 'C3']
enumerate()函数将可遍历的数据对象(如列表、元组或字符串)的下标和元素对应打包
for index, value in enumerate('ABC'):
print index, value
结果为:
0 A
1 B
2 C
文件平时放在电脑的硬盘中,而CPU只能读写内存中的数据。所以电脑处理文件需要分为3步:
__enter__
方法__exit__
方法。如果允许写入,则同时修改硬盘数据注意项:
_io.TextIOWrapper
格式,只能使用文件指针进行操作,对应read()
和write()
方法read()
可以将内存中文件数据转换成字符串赋值给变量f = open('/tmp/simple.txt', 'r', encoding='utf-8', errors='ignore') # f是_io.TextIOWrapper格式
data = f.read() # 将_io.TextIOWrapper格式转为字符串赋值给data
f.close() # 清除_io.TextIOWrapper格式数据,释放内存
Python内置函数open()
用于打开文件或创建文件对象
f = open(file_name, mode, encoding, errors)
file_name
:文件名或文件地址mode
:指定文件的打开模式模式 | 说明 |
---|---|
r |
以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式 |
rb |
以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式 |
r+ |
打开一个文件用于读写。文件指针将会放在文件的开头 |
rb+ |
以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头 |
w |
打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件 |
wb |
以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件 |
w+ |
打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件 |
wb+ |
以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件 |
a |
打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
ab |
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入 |
a+ |
打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写 |
ab+ |
以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写 |
encoding
:编码格式,通常'utf-8'
f
:文件指针,有以下方法
f.read(n)
:读取n
个字节,n
缺省时把文件读完,文件指针会随着读取移动f.close()
:关闭文件f.write(s)
:在文件指针处写入字符串open()
语句之后一定要有close()
,否则内存会一直被占用。Python提供了上下文管理器with
,程序在退出with
语句块时自动调用close()
。
即使with
语句中发生错误导致程序中断,程序依然会调用close()
保护内存。
with open('/tmp/simple.txt', 'r', encoding='utf-8', errors='ignore') as f:
data = f.read()
with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
f.write('[新建text内容]')
with open('textsimple.txt', 'r', encoding='utf-8', errors='ignore') as f:
data1 = f.read() # data1在with语句外有效,f在with语句外无效
with open('textsimple.txt', 'r', encoding='utf-8', errors='ignore') as f:
data2 = f.read() # 在with语句外已经无法再读取,data2错误
read()
和write()
的同时会移动指针with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
f.write('[新建text内容,内容需要写的比较长]')
with open('textsimple.txt', 'r', encoding='utf-8', errors='ignore') as f:
data1 = f.read()
data2 = f.read()
print(data1) # data1能读出数据
print(data2) # data2时指针已在末尾,数据为空
r+
方式从头写入,覆盖原数据,会导致乱码with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
f.write('[新建text内容,内容需要写的比较长]')
with open('textsimple.txt', 'r+', encoding='utf-8', errors='ignore') as f:
f.write('[r+]方式写入的内容')
with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
f.write('[新建text内容,内容需要写的比较长]')
with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
f.write('[w+]方式写入的内容')
with open('textsimple.txt', 'w+', encoding='utf-8', errors='ignore') as f:
f.write('[新建text内容,内容需要写的比较长]')
with open('textsimple.txt', 'a+', encoding='utf-8', errors='ignore') as f:
f.write('[a+]方式写入的内容')
Python中的 isinstance()
函数,是Python中的一个内置函数,用来判断一个函数是否是一个已知的类型,类似 type()
isinstance()
会认为子类是一种父类类型,考虑继承关系type()
不会认为子类是一种父类类型,不考虑继承关系isinstance('a', str) # True
eval(str)
作用是将字符串转换成表达式,并且执行
x = input()
print(eval(x))
# 在命令行输入1+2,并按回车,输出3
用于写简短的处理语句,配合下面其他函数使用
lambda x:f(x)
lambda x,y:f(x,y)
sorted()
函数可以对任何可迭代对象进行排序,并返回列表
# 对列表升序操作
a = sorted([1,9,7,3,5,4,6])
print(a)
# 输出:[1, 3, 4, 5, 6, 7, 9]
# 对元组倒序操作
a = sorted((1,9,8,7,3,4), reverse=True)
print(a)
# 输出:[9, 8, 7, 4, 3, 1]
# 使用参数key,根据自定义,按字符串长度来排序:
a = ['dog', 'monkey', 'bird', 'elephant']
b = sorted(a, key=lambda x:len(x))
print(b)
# 输出:['dog', 'bird', 'monkey', 'elephant']
# 先按照第二个元素再按照第一个元素排序
a=[[12, 34],[23, 56],[47, 12],[23, 90]]
>>> b=sorted(a, key=lambda x:(x[1],x[0]))
reversed()
函数接受一个序列,将序列里的元素反转,并最终返回迭代器
a = reversed('good morning')
print(list(a))
# 输出:['g', 'n', 'i', 'n', 'r', 'o', 'm', ' ', 'd', 'o', 'o', 'g']
map()
函数会把序列里的每一个元素用指定的方法加工一遍,最终返回给你加工好的序列
a = ['dog', 'monkey', 'bird', 'elephant']
b = map(lambda x:x.upper(), a)
print(list(b))
# 输出:['DOG', 'MONKEY', 'BIRD', 'ELEPHANT'
educe()
会对参数序列中元素进行累积。第一、第二个元素先进行函数操作,生成的结果再和第三个元素进行函数操作,以此类推,最终生成所有元素累积运算的结果
from functools import reduce
a = [1,2,3,4,5,6]
b = reduce(lambda x,y:x*y, a)
print(b)
# 输出:720
filter()
函数用于过滤序列,过滤掉不符合条件的元素,返回一个迭代器
a = ['dog', 'cat', 'monkey', 'elephant', 'donkey', 'duck']
b = filter(lambda x:'o' in x, a)
print(list(b))
# 输出:['dog', 'monkey', 'donkey']