Python 知识要点:常用内置函数

https://www.runoob.com/python/python-built-in-functions.html

 

filter(function, iterable)

作用:用于过滤序列,过滤掉不符合条件的元素。

参数:接收两个参数,第一个为函数,第二个为序列。

  • function -- 判断函数。
  • iterable -- 可迭代对象。

原理:序列的每个元素作为参数传递给函数进行判,然后返回 True 或 False,保留返回 True 的元素。

返回值:Pyhton2.x 返回列表;Python3.x 返回迭代器对象,若要转换为列表,可以使用 list() 来转换。

  • Python2.x 中返回的是过滤后的列表;Python3.x 中返回到是一个 filter 类。
  • filter 类实现了 __iter__ 和 __next__ 方法, 可以看成是一个迭代器。
# 过滤函数
def func(n):
    return n % 2 == 1


list_1 = [i for i in range(10)]

result_1 = filter(func, list_1)
print(result_1)   # <filter object at 0x0000017A4FF67AF0> 返回一个迭代器对象
print([t for t in result_1])  # [1, 3, 5, 7, 9]

result_2 = filter(lambda x: x % 3 == 1, list_1)
print(result_2.__next__())  # 使用 __next__ 和 next(),会分别迭代出迭代器对象 result_2 的一个元素
print(next(result_2))   # 这三个输出分别是:1,4,[7]
print([t for t in result_2])

 

map(function, iterable1, iterable2, ...)

作用:将传入的函数依次作用到序列的每个元素,并把结果返回。

参数:接收两个参数,第一个为函数,第二个为序列。

  • function -- 判断函数。
  • iterable -- 可迭代对象。

返回值:Pyhton2.x 返回列表;Python3.x 返回迭代器对象

注意报错:TypeError: 'map' object is not callable 一般出现的原因是迭代对象(str,abs等)或者函数(map)被修改,不再是原来的函数,导致出现不可迭代对象。

def fun(x, y):
    return x + y


result_1 = map(fun, [1, 2, 3], [1, 2, 3])
print(result_1)  # <map object at 0x000001A668BBB700>
print([t for t in result_1])    # [2, 4, 6]

# 如果函数有多个参数, 但每个参数的序列元素数量不一样, 会根据最少元素的序列进行
result_2 = map(lambda x, y, z: x + y + z, [1, 2, 3], [1, 2, 3, 4], [1, 2, 3, 4, 5])
print(result_2.__next__())  # 3
print(list(result_2))   # [6, 9]

 

reduce(function, iterable[, initializer])

作用:对参数序列中元素进行累积。

参数:有初始参数,从初始参数开始作为第一个参数累积

  • function -- 函数,有两个参数
  • iterable -- 可迭代对象
  • initializer -- 可选,初始参数

原理:函数将一个数据集合(链表,元组等)中的所有数据进行下列操作:用传给 reduce 中的函数 function(有两个参数)先对集合中的第 1、2 个元素进行操作,得到的结果再与第三个数据用 function 函数运算,最后得到一个结果。

返回值:单一结果返回值

注意:在 Python3 中,reduce() 函数已经被从全局名字空间里移除了,它现在被放置在 functools 模块里。

# reduce 函数
from functools import reduce

list_1 = [1, 2, 3]
result_1 = reduce(lambda a, b: a+b, list_1)
result_2 = reduce(lambda a, b: a+b, list_1, 100)
print(result_1)     # 6
print(result_2)     # 106

 

一、数学相关

1、绝对值:abs(-1)

2、最大最小值:max([1,2,3])、min([1,2,3])# 进行比较的数据类型必须都是一致的


a='1,2,3,4'
type(a)    # 类型为字符串 <type 'str'>
max(a)     # max 返回了最大值 '4',返回是字符串类型

a=[1,2,3,4]
type(a)    # 类型是列表 <type 'list'>
max(a)    #max函数也返回了最大值 4

a=[(1,2),(2,3),(3,4)]    # 列表里面是元组构成元素
max(a)    # (3, 4)
# 按照元素里面元组的第一个元素的ascii排列顺序,输出最大值(如果第一个元素相同,则比较第二个元素,输出最大值)
a=[('9',1), ('a',1),('A',1)] max(a) # ('a', 1) a={1:2,2:2,3:1,4:'aa'} # 比较字典里面的最大值,会输出最大的键值 max(a) # 4

3、序列长度:len('abc')、len([1,2,3])、len((1,2,3))

4、取模:divmod(5,2)  // (2,1) 返回一个包含商和余数的元组 (a // b, a % b)

取模和取余

只要 a 和 b 同符号,取模运算和取余运算结果就相同

因为两者的计算步骤都一样,主要的差别在于第一步的 c = a/b ,
取余运算向 0 取整,取模运算向负无穷取整

例如:4/(-3) 约等于 -1.3
在取余运算时候商值向 0 方向舍弃小数位为 -1
在取模运算时商值向负无穷方向舍弃小数位为 -2

在 Python 中,取余的计算公式与别的语言并没有什么区别:r=a-n*(a//n)

这里 r 是余数,a 是被除数,n 是除数。

不过在“a//n”这一步,当 a 是负数的时候,我们上面说了,会向下取整,即向负无穷方向取整。这也就得到:

-123%10 = -123 - 10 * (-123 // 10) = -123 - 10 * (-13) = 7

 

5、乘方:pow(2,3,4)  

import math
math.pow( x, y )    # 只能接收两个参数

内置的 pow() 方法
pow(x, y[, z])
函数是计算 x 的 y 次方,如果 z 存在(x,y 必须为整数),则再对结果进行取模,其结果等效于 pow(x,y) %z。

注意:pow() 通过内置的方法直接调用,内置方法会把参数作为整型,而 math 模块则会把参数转换为 float

 

6、浮点数:round(1)  // 1.0 返回浮点数“四舍五入”值

round( x [, n])    # 四舍五入,n 小数位数
round(0.5)    # 0 
round(1.5)    # 2

Python2.7,保留值将保留到离上一位更近的一端(四舍六入),如果距离两端一样远,
则保留到离0远的一边。所以round(0.5)会近似到1,而round(-0.5)会近似到-1。 Python3.5,如果距离两边一样远,会保留到偶数的一边。比如round(0.5)和round(-0.5)都会保留到0,
而round(1.5)会保留到2。

 

二、功能相关

1、函数是否可调用:callable(funcname),注意,funcname变量要定义过

callable() 函数用于检查一个对象是否是可调用的。如果返回 True,object 仍然可能调用失败;
但如果返回 False,调用对象 object 绝对不会成功。 对于函数、方法、
lambda 函式、 类以及实现了 __call__ 方法的类实例, 它都返回 True。

 

2、类型判断:isinstance(x,list/int)

a = 2
isinstance(a, int)    # True
isinstance(a, str)    # False
isinstance(a, (str, int, list))    # True

# isinstance() 与 type() 区别:
# type() 不会认为子类是一种父类类型,不考虑继承关系。
# isinstance() 会认为子类是一种父类类型,考虑继承关系。

class A:
    pass
 
class B(A):
    pass
 
isinstance(A(), A)    # True
type(A()) == A        # True
isinstance(B(), A)    # True
type(B()) == A        # False

 

3、比较:cmp('hello','hello')

cmp(x,y) 函数用于比较2个对象,如果 x < y 返回 -1, 如果 x == y 返回 0, 如果 x > y 返回 1。

Python 3.X 的版本中已经没有 cmp 函数,如果你需要实现比较功能,需要引入 operator 模块,适合任何对象,包含的方法有:

import operator
operator.eq('hello', 'name')    # False
operator.eq('hello', 'hello')    # True

 

4、快速生成序列:(x)range([start,] stop[, step])

start: 计数从 start 开始。默认是从 0 开始。例如range(5)等价于range(0, 5);
stop: 计数到 stop 结束,但不包括 stop。例如:range(0,
5) 是[0, 1, 2, 3, 4]没有5
step:步长,默认为1。例如:range(0,
5) 等价于 range(0, 5, 1)

 

三、类型转换

1、int(x)

2、long(x)

3、float(x)

4、complex(x)  // 复数

5、str(x)

6、list(x)

7、tuple(x)  // 元组

8、hex(x)  // 整数转换为十六进制

9、oct(x)  // 整数转换为八进制

10、chr(x)  // 返回 x 对应的字符,如chr(65)返回‘A'

11、ord(x)  // 返回字符对应的ASC码数字编号,如ord('A')返回65

12、repr(x)  // 将对象 x 转换为表达式字符串

13、eval(x)  // 用来计算在字符串中的有效 Python 表达式,并返回一个对象

14、unichr(x)  // 将整数转换为 Unicode 字符,Python3 中已合并到 chr()

 

四、字符串处理

1、首字母大写:str.capitalize

2、字符串替换:str.replace

3、字符串切割:str.split

 

五、序列处理函数

1、len:序列长度

2、max:序列中最大值

3、min:最小值

4、filter:过滤序列

5、map:并行遍历,可接受一个function类型的参数

6、reduce:归并

7、zip:并行遍历

zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

如果各个迭代器的元素个数不一致,则返回列表长度与最短的对象相同,利用 * 号操作符,可以将元组解压为列表。

zip 方法在 Python 2 和 Python 3 中的不同:在 Python 3.x 中为了减少内存,zip() 返回的是一个对象。如需展示列表,需手动 list() 转换。

a = [1, 2]
b = [3, 4, 5]
c = [6, 7, 8, 9]
zipped = list(zip(a, b, c))    # [(1, 3, 6), (2, 4, 7)]
print(list(zip(*zip(a,b,c))))    
# 与 zip 相反,*zipped 可理解为解压,返回二维矩阵式
# [(1, 2), (3, 4), (6, 7)]

nums = ['123', '456', '789']
for i in zip(*nums):
    print(i)

('1', '4', '7')
('2', '5', '8')
('3', '6', '9')

print(list(zip(*nums)))

[('1', '4', '7'), ('2', '5', '8'), ('3', '6', '9')]
posted @ 2020-09-06 01:05  颗粒成仓  阅读(219)  评论(0编辑  收藏  举报