zoukankan      html  css  js  c++  java
  • 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')]
  • 相关阅读:
    SqlBulkCopy 的2篇不错的文章
    xml、json反序列化得到相应的类
    DataTable的使用操作持续更新
    asp.net mvc 添加下拉列表
    asp.net mvc 简单实现权限控制
    ASP.NET 实现上传EXCEL,利用NOPI操作,转换得到DataTable
    asp.net mvc code first 在本地数据库中生成数据库
    第一个随笔
    vb中字母排列组合输出函数
    使用SQL语句查询某表中所有的主键、唯一索引以及这些主键、索引所包含的字段
  • 原文地址:https://www.cnblogs.com/dc2019/p/13620460.html
Copyright © 2011-2022 走看看