python 3内置函数(待补充)

 

1.简介


如其他计算机语言一般, python 也有自己的内置函数,本文会一一实现python的所有内置函数,并注明一些需注意的地方

2.内置函数一览


3.实现


目录

(1)dir()

(2)help (obj)

(3)bin()、oct() 、hex()

(4)ord()、chr()、str()

(5)max( )、 min( )、 sum()

(6)type() 和 isinstance()

(7)sorted() 

(8)reversed()

(9)range( )

(10)enumerate()

(11)map()

(12)reduce( )

(13)filter( )

(14)zip()



(1)dir()

返回指定对象或模块obj的成员列表,如果不带参数则返回单前作用域内所有表识符

import keyword
# dir() 返回指定对象或模块obj的成员列表,如果不带参数则返回单前作用域内所有表识符
print(dir())
print(dir(keyword))

 运行结果

 ['In', 'Out', '_', '__', '___', '__builtin__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', '_dh', '_i', '_i1', '_i2', '_i3', '_i4', '_i5', '_ih', '_ii', '_iii', '_oh', 'exit', 'func', 'get_ipython', 'keyword', 'quit', 'seq', 'seq2', 'x']


['__all__', '__builtins__', '__cached__', '__doc__', '__file__', '__loader__', '__name__', '__package__', '__spec__', 'iskeyword', 'kwlist', 'main']


(2)help (obj)

 obj对象的帮助信息,类似于java的api文档

# help (obj) obj对象的帮助信息
help(keyword) # 类似于java的api文件

Help on module keyword:

NAME
keyword - Keywords (from "graminit.c")

DESCRIPTION
This file is automatically generated; please don't muck it up!

To update the symbols in this file, 'cd' to the top directory of
the python source tree after building the interpreter and run:

./python Lib/keyword.py

FUNCTIONS
iskeyword = __contains__(...) method of builtins.frozenset instance
x.__contains__(y) <==> y in x.

DATA
__all__ = ['iskeyword', 'kwlist']
kwlist = ['False', 'None', 'True', 'and', 'as', 'assert', 'break', 'cl...

FILE
d:\softwave\python\lib\keyword.py


(3)bin()、oct() 、hex()

传入十进制数转 bin()二进制 、oct()八进制 、hex()十六进制

返回值以字符串形式表示

print(bin(5))
print(oct(7))
print(hex(9))

0b101

0o7

0x9


(4)ord()、chr()、str()

ord(x) 返回1个字符x的ascii编码或Unicode编码

chr(x) 返回 ascii编码或unicode编码为x的字符

#str(x) 将任意类型的x转为字符串

print( ord('a'))
print(chr(ord('a')+1))


print(str((1,2,4)))
print(type(str((1,2,4))))

97

b

(1, 2, 4)

<class 'str'>


(5)max( )、 min( )、 sum()

最大值、最小值,序列元素之和

import random # 随机数生成器

print(random.randint(1,100))

#小案例
#需求  随机生成10数  存放在列表中,取最大值 最小值 求和
arr1=[]
for i in range(1,10):                   # 循环九次 range表示范围
    arr1.append(random.randint(1,100))  # 在列表里添加随机生成的数
print(arr1)
print( max(arr1 ),min(arr1) ,sum(arr1))

print("-------------")
# 方案二 列表推导生成式 聚合写法 从右向左看
arr2=[ random.randint(1,100) for i in range(10)]
print(arr2)
print(max(arr2) ,min(arr2),sum(arr2))
# 求均值 
print( sum(arr2)/len(arr2))

1
[58, 32, 52, 75, 100, 96, 76, 87, 22]
100 22 598
-------------
[38, 81, 52, 50, 73, 67, 8, 72, 83, 59]
83 8 583
58.3


# max(x) min(x) 的key参数可以用来指定比较规则 x为序列


x=['21','1234','9','99']
print(max(x))             # 默认按照字符串的ascii码大小
print(max(x, key=len))    # 按照字符串长度 key是一个函数function len()

'''模拟底层实现
    def max(l,key=None):
        maxobj=l[0]
        for i in l:
            if key!=None:
                if key(i)>key(maxobj):
                    maxobj=i
            else:
                if i>maxobj:
                    maxobj=i
        return maxobj
'''

print( max(x,key=int)) #按照元素经过int()后的大小比较  字符串需为数字,否则报错

99
1234
1234


 # 结合前面的列表推导式,随机数生成器,max()函数


x=[ [ random.randint(1,100) for j in range(6)]   for i in range(5)       ]
for item in x:
    print(item)
print(max(x,key=sum))

'''
    def max(x,key=sum):
        maxobj=x[0]
        for i in x:
            if sum(i)>sum(maxobj)
                maxobj=i
        return maxobj
'''

[100, 86, 20, 72, 2, 42]
[27, 67, 75, 57, 77, 39]
[56, 83, 93, 97, 81, 89]
[11, 53, 34, 11, 29, 27]
[76, 14, 30, 9, 32, 50]
[56, 83, 93, 97, 81, 89]


# sum(x,start=0) 返回序列x中所有元素之和 返回start+sum(x),即设置初始值


print (sum([1,2,3,4]))
print(sum([1,2,3,5],20))
'''
    def sum(l,start=0):
        result=0
        for i in l:
            result+=sum(i) ->sum([1,2,3])+0
        return start+result
''' 
arr2=[[1,2,3],[2,3,4]]
print(sum(arr2,[5])) #start的类型要与序列元素一致

10
31
[5, 1, 2, 3, 2, 3, 4]

(6)type() 和 isinstance()

type(x) 查看参数x的类型

isinstance(x,y) 判断x是否是y的实例

type([3])  #查看3的类型

type({3}) in (list ,tuple,dict) # {}是set 集合      in 判断是否在in()的元素里

isinstance(3,int) # 判断3是否是int类型的实例

isinstance(3j,(int ,float,str,complex)) #complex 判断3j是否为int float str 或complex类型

 list

False

True

True


(7)sorted() 

对列表 、元组、 字典 、集合或其他可迭代对象进行排序并返回新列表

# sorted(iterable,*,key=None,reverse=False) iterable可迭代对象 ,* 多个, key 指定排序规则,reverse:是否逆序 默认为false
x=['aaa','bc','d','b','ba','AB']
print( sorted(x,key=len))
print( sorted(x,key=str))
print( sorted(x,key=str.lower)) # 返回的是列表

['d', 'b', 'bc', 'ba', 'AB', 'aaa']

['AB', 'aaa', 'b', 'ba', 'bc', 'd']

['aaa', 'AB', 'b', 'ba', 'bc', 'd']


(8)reversed()

对可迭代对象 (生成器对象和具有惰性求值对象特性的zip、map、filter,enumerate等对象除外)进行反转,并返回一个迭代的reverse对象

# reverse(seq 序列) 
x=['aaa','bc','d','b','ba']
print(reversed(x)) # 返回一个reverse对象
print( list ( reversed(x)))

<list_reverseiterator object at 0x000001CAA8CC1748>
['ba', 'b', 'd', 'bc', 'aaa']


(9)range( )

惰性求值得到range对象 惰性:不改变原序列

range(stop)

range(start,stop[,step]) 起点(默认0) 终点(范围不包括终点) 步长(默认1)

print(range(5))
print(type(range(5)))
print( list( range(5)))
print( range(0,5,3))
print(list(range(0,5,3)))

range(0, 5)
<class 'range'>
[0, 1, 2, 3, 4]
range(0, 5, 3)
[0, 3]


(10)enumerate()

  枚举 。返回 可迭代的enumerate对象 每个元素都包含索引,值的元组

# enumerate(iterable,start=0)
print(enumerate('abcde'))
print( list(enumerate('abcdee'))) # 返回 一个enumerate对象,每个元素为一个元组,元组的元素为可迭代对象每个元素的下标索引+元素值
for index,value in enumerate('abcde'):
    print( index,":",value)
print( list(enumerate([1,2,3,4])))

 <enumerate object at 0x00000284FBB111F8>
[(0, 'a'), (1, 'b'), (2, 'c'), (3, 'd'), (4, 'e'), (5, 'e')]
0 : a
1 : b
2 : c
3 : d
4 : e
[(0, 1), (1, 2), (2, 3), (3, 4)]


(11)map()

映射,将一个函数参数映射到序列或迭代器的对象的每个元素上,并返回一个个迭代的map对象,这个对象的每个元素是原序列中元素经过函数处理后的结果

#用户自定义函数
def addTen(num):
    return num+10
print( list(map(addTen,range(5))))

['0', '1', '2', '3', '4']


#用户自定义函数
def addTen(num):
    return num+10
print( list(map(addTen,range(5))))
[10, 11, 12, 13, 14]

def addTen2(num1,num2):
    return num1+num2
print(  list( map(addTen2 ,range(5) ,range(10,15) ) ) )

[10, 12, 14, 16, 1

# 使用lambda: 匿名函数,有返回值
lam1=lambda num:num+10
print( list(map(lam1,range(5))))
print( list(map(lambda num:num+10,range(5))))
print( list(map (lambda _:_+10,range(5))))
[10, 11, 12, 13, 14]
[10, 11, 12, 13, 14]
[10, 11, 12, 13, 14]
lam2=lambda num1,num2:num1+num2
print( list(map(lam2,range(5),range(10,15))))
print(list(map(lambda num1,num2:num1+num2 ,range(5),range(10,15))))
print( list(map(lambda _1,_2:_1+_2,range(5),range(10,15))))

[10, 12, 14, 16, 18]
[10, 12, 14, 16, 18]
[10, 12, 14, 16, 18]

#
def myMap(iterable,op,value):
    if op not in  ['+','-','*','/','//','**']:
        return 'Error operatoe'
    lam1=lambda _:eval( str(_)+op+str(value))
    return map(lam1,iterable)
print( myMap([1,2,3],'+',5))
print(list (myMap([1,2,3],'+',5)))
print( list(myMap([1,2,3],'^',5)))

<map object at 0x00000284FBB4A7F0>
[6, 7, 8]
['E', 'r', 'r', 'o', 'r', ' ', 'o', 'p', 'e', 'r', 'a', 't', 'o', 'e']

# 取出整数每一位,
x=random.randint(1,1e30)
print(x)
print(list(str(x)))
print( list(map (int,str(x))))

438251004955062915134138002088
['4', '3', '8', '2', '5', '1', '0', '0', '4', '9', '5', '5', '0', '6', '2', '9', '1', '5', '1', '3', '4', '1', '3', '8', '0', '0', '2', '0', '8', '8']
[4, 3, 8, 2, 5, 1, 0, 0, 4, 9, 5, 5, 0, 6, 2, 9, 1, 5, 1, 3, 4, 1, 3, 8, 0, 0, 2, 0, 8, 8]


(12)reduce( )

标准库 functools中的函数reduce()可以将一个接收2个参数的函数以迭代器累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上,并且允许指定一个初始值

from functools import reduce
seq=list(range(1,100))
print(seq)
print(reduce(lambda _1,_2:_1+_2,seq))

[1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99]
4950

# opeator 模块 操作符
# 。add() sub() mul() div()
import operator
print( operator.add(1,2))
print( operator.mul(1,2))
print( reduce (operator.add,seq))

print( reduce( operator.mul,range(1,11)))

3
2
4950
3628800

(13)filter( )

内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对,如果指定函数为none,则返回序列中等价于True的函数

seq=['sada','1sd','***','?!']
def func(value):
    return value.isalnum()  # 判断是否为字母或数字
print(filter (func,seq))
print(list(filter(func,seq)))

seq2=[33,55,88,99]
print( list( filter(lambda _:_>60 ,seq2)))

<filter object at 0x000001CAA8C23160>
['sada', '1sd']
[88, 99]


(14)zip()

zip()函数用来把多个可迭代对象的元素压缩到一起,返回一个可迭代的zip对象,其中每个元素都是包含原来的多个可迭代对象对应位置上元素的元组,如同拉拉链一样

print( zip('abc',[1,2,3]))
print( list( zip('abc',[1,2,3])))
print(list(zip('abcd',[1,2,3,4],[4,5,6,7,8,9])))

<zip object at 0x000001CAA8C796C8>
[('a', 1), ('b', 2), ('c', 3)]
[('a', 1, 4), ('b', 2, 5), ('c', 3, 6), ('d', 4, 7)]


4.map、filter、enumerate、zip等对象不仅具有惰性求值的特点,还有另外一个特点,访问过的元素不可再次访问

x=map(str,range(10))
print(list(x))
print(list(x))
x=map(str,range(10))
x=list(x)
print(x)
print(x)

['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
[]
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']
['0', '1', '2', '3', '4', '5', '6', '7', '8', '9']

猜你喜欢

转载自blog.csdn.net/qq_38148749/article/details/82763337