第11天内置函数详解
参考博客地址:https://www.cnblogs.com/sesshoumaru/p/6140987.html#p2
人生三问
什么是内置函数
内置函数就是python解释器给我们已经定义好的一系列函数,我们可以直接进行调用,而不必进行定义的。 为什么要用内置函数
对于一些常用的功能,我们没有必要重新去一个一个的实现,因为有人已经帮我们实现了,我们只需要进行调用就可以了。提高我们的开发效率 怎么使用内置函数
就和我们自定义的函数使用方法是一样的,通过函数名加括号就可以了。
例如:max()
未完待续:
5. 装饰器(3个)待定 10. 反射操作(8个)(待定) super object(待定) memoryview
python的内置函数(总共68个)
1. 常用的 max, min, sorted,map, filter, reduce
参考博客: https://www.cnblogs.com/huwentao/p/9766004.html
2. 文件操作(1个)
open函数 常用的: f = open('a.txt', 'rt', encoding='utf-8') f.read()
3. 交互操作(2个)
input
res = input('>>>')
print(res, end='=?')
4. 变量操作(2个)
globals 返回当前作用域内的全局变量和其值组成的字典 locals 返回当前作用域内的局部变量和其值组成的字典
print(globals())
print(locals())
5. 装饰器(3个)待定
property() 标示属性的装饰器 staticmethod() 标示方法为静态方法的装饰器 classmethod() 标示方法为类方法的装饰器
6. 编译执行(4个)
compile 将字符串编译为代码,使得返回值能够被exec来执行或者eval来求值 eval 执行动态表达式来求值
eval('1+2+3') exec 执行动态语句块
exec('a = 1')
a
repr 返回一个对象的字符串表示形式
# compile 需要三个参数 # source: 需要执行的代码段 # filename: 从文件读取需要编译的代码, 如果有source,filename传递一个空字符串即可 # mode:执行模式,exec执行流程语句,eval简单的求值表达式,single交互式语句 # 例一:exec执行流程语句,没有返回值 source = ''' for i in range(10): print(i) ''' res = compile(source, '', mode='exec') print(exec(res)) # 例一:eval执行简单的一些求值表达式,返回值 source = '''1+2+3+4''' res = compile(source, '', mode='eval') print(eval(res)) # 例三: exec执行交互式命令 source = ''' name = input('>>').strip() ''' res = compile(source, '', mode='single') exec(res)
repr: 返回一个对象的字符串表现形式,大部分和str是类似的,只是当他转化一个字符串的时候会存在差异。如下:
7. 数学运算(7个)
abs 绝对值
abs(-1) ====》 1 max 最大值
max([1,2 ,3]) =====》 3 min 最小值
min([1,2,3 ]) =====》 1 sum 和
sum([1,2 ,3 ])======》 6
divmod 返回两个数值的商和余数
power 返回幂运算值或者与其指定的数值的模
round 对浮点数进行四舍五入取值
print(max([1,2,3])) # 1 print(min([1,2,3])) # 2 print(sum([1,2,3])) # 6 print(divmod(5, 2)) # (2, 1) print(pow(2, 3, 5)) # =====》 2 ** 3 % 5 结果为3 print(round(1.5)) # ====> 2
8.对象操作(7个)
dir 返回对象或者当前作用域内的属性列表 ascii 返回对象的可打印表字符串表现方式 vars 返回当前作用域内的局部变量和其值组成的字典,或者返回对象的属性列表 format 格式化输出字符串 help 返回对象的帮助信息 id 返回对象的唯一标识符 type 返回对象的类型 hash 返回对象的hash值 len 返回对象的长度
dir
>>> dir() # 显示当前作用域内的属性列表 ['__annotations__', '__builtins__', '__doc__', '__loader__', '__name__', '__package__', '__spec__', 'a'] >>> globals().keys() # 全局作用域的属性key dict_keys(['__name__', '__doc__', '__package__', '__loader__', '__spec__', '__annotations__', '__builtins__', 'a']) >>> import math >>> dir(math) # 显示的是当前对象math所具有的属性,也就是它的方法 ['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'copysign', 'cos', 'cosh', 'degrees', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'pi', 'pow', 'radians', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc'] >>>
ascii和之前说的repr是一样的只是在出现中文的时候表现形式不一样的额
>>> >>> repr('中国') "'中国'" >>> ascii('中国') "'\\u4e2d\\u56fd'" >>> repr('hello') "'hello'" >>> ascii('hello') "'hello'" >>>
id, type, hash, len, help
>>> id('hello') # 返回当前对象的唯一标示符,也也就是它的地址 9883616 >>> type('hello') # 返回当前对象的类型 <class 'str'> >>> hash('hello') # 返回一个hash值 73169866 >>> len('hello') # 返回对象的长度 5 >>> help(str) # 返回当前对象的帮助信息 help on class str in module builtins: class str(object) | str(object='') -> str | str(bytes_or_buffer[, encoding[, errors]]) -> str | | create a new string object from the given object. if encoding or | errors is specified, then the object must expose a data buffer | that will be decoded using the given encoding and error handler. | otherwise, returns the result of object.__str__() (if defined) | or repr(object). | encoding defaults to sys.getdefaultencoding(). | errors defaults to 'strict'. | | methods defined here: | | __add__(self, value, /) | return self+value. | | __contains__(self, key, /) | return key in self. | | __eq__(self, value, /) | return self==value.
vars
(1) 当函数不接收参数时,其功能和locals函数一样,返回当前作用域内的局部变量。
>>> vars() {'__name__': '__main__', '__doc__': none, '__package__': none, '__loader__': <class '_frozen_importlib.builtinimporter'>, '__spec__': none, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': [1, 2, 3], 'math': <module 'math' (built-in)>} >>> locals() {'__name__': '__main__', '__doc__': none, '__package__': none, '__loader__': <class '_frozen_importlib.builtinimporter'>, '__spec__': none, '__annotations__': {}, '__builtins__': <module 'builtins' (built-in)>, 'a': [1, 2, 3], 'math': <module 'math' (built-in)>} >>>
(2)当函数接收一个参数时,参数可以是模块、类、类实例,或者定义了__dict__属性的对象。返回的是当前的属性和dir一样,只是vars返回的是字典
>>> dir(dict) ['__class__', '__contains__', '__delattr__', '__delitem__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setitem__', '__sizeof__', '__str__', '__subclasshook__', 'clear', 'copy', 'fromkeys', 'get', 'items', 'keys', 'pop', 'popitem', 'setdefault', 'update', 'values'] >>> vars(dict).keys() dict_keys(['__repr__', '__hash__', '__getattribute__', '__lt__', '__le__', '__eq__', '__ne__', '__gt__', '__ge__', '__iter__', '__init__', '__len__', '__getitem__', '__setitem__', '__delitem__', '__contains__', '__new__', '__sizeof__', 'get', 'setdefault', 'pop', 'popitem', 'keys', 'items', 'values', 'update', 'fromkeys', 'clear', 'copy', '__doc__']) >>>
format在字典阶段已经介绍过了,这里不再赘述
9. 序列操作(8个)
all 判断可迭代对象每个元素是否都是true any 判断可迭代对象中是否又true的元素 zip 聚合传入的每个迭代器中的相同位置的元素,返回一个新的元祖类型迭代器 reversed 反转序列生成新的可迭代对象 next 返回迭代器对象中的下一个元素值
filter 过滤 map 映射 sorted 排序
all
>>> all([]) # 首先空的可迭代对象返回的是true true >>> all([1,2 ,3]) # 判断里面的值是不是都是true true >>> all([1,2 ,0]) false >>> all([1,2 ,'']) false
any
>>> any([]) # 可迭代对象为空的时候any返回为false false >>> any([1,2,3]) # 可迭代对象中只要又true就返回true true >>> any(['', 0]) false >>> any(['', 1]) true >>>
zip
>>> zip([1,2 ,3], (4, 5,6)) # 组合两个可迭代对象的值 <zip object at 0x009c2260> >>> a = zip([1,2 ,3], (4, 5,6)) >>> list(a) [(1, 4), (2, 5), (3, 6)] >>>
reversed
>>> list(reversed('hello world!')) ['!', 'd', 'l', 'r', 'o', 'w', ' ', ' ', 'o', 'l', 'l', 'e', 'h'] >>> reversed('hello world!') <reversed object at 0x00980d70> >>>
next返回迭代器下一个元素,就是调用__next__方法
>>> a = iter('abcd') >>> next(a) 'a' >>> next(a) 'b'
filter, map, reduce 在文章开头已经给了地址
10. 反射操作(8个)(待定)
hasattr getattr setattr delattr callable isinstance issubclass __import__
11. 类型转换(24个)
bytearray 根据传入的参数创建一个新的字节数组
bytes 根据传入的参数创建一个新的不可变字节数组 memoryview 根据传入的参数创建一个新的内存查看对象 frozenset 根据传入的参数创建一个新的不可变集合
enumerate 根据可迭代对象创建枚举对象 slice 根据传入的参数创建一个切片对象 super 根据传入的参数创建一个新的子类和父类的关系的代理对象 object 创建一个新的object对象
iter 根据传入的参数创建一个新的可迭代对象 range
ord chr
# 二进制八进制和十六进制 bin 二进制 hex 十六进制 oct 八进制 # 数据类型 bool int float complax str tuple list dict set
bytearray
>>> >>> len(bytearray()) # 如果不传值,返回的是一个长度为0的字节数组 0 >>> b = bytearray('中国', encoding='utf-8') # 其实就是把传递进来的字符串编码成了utf-8的形式 >>> len(b) 6 >>> bytearray('中国', encoding='utf-8') bytearray(b'\xe4\xb8\xad\xe5\x9b\xbd') >>>
bytes 其实和bytearray是一样的,只是在创建的过程中bytes是不可修改的
>>> b = bytes(10) >>> b b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00' >>> b[0] 0 >>> b[1] = 1 #不可修改 traceback (most recent call last): file "<pyshell#6>", line 1, in <module> b[1] = 1 typeerror: 'bytes' object does not support item assignment >>> b = bytearray(10) >>> b bytearray(b'\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00') >>> b[1] = 1 #可修改 >>> b bytearray(b'\x00\x01\x00\x00\x00\x00\x00\x00\x00\x00')
memoryview 返回一个内存查看对象(没搞懂)
>>> b = memoryview(b'abcd') # 获得一个内存对象 >>> b <memory at 0x008568b8> >>> b[1] # 可以通过索引去查看当前位置所对应的值 98 >>> b[-1] 100 >>> b[1:2] <memory at 0x008562a0> >>>
frozenset
>>> a = frozenset(range(10)) # 创建了一个不可变集合 >>> a frozenset({0, 1, 2, 3, 4, 5, 6, 7, 8, 9}) >>> a.add(2) # 创建的集合是不能够改变的 traceback (most recent call last): file "<stdin>", line 1, in <module> attributeerror: 'frozenset' object has no attribute 'add' >>>
enumerate
>>> seasons = ['spring', 'summer', 'fall', 'winter'] >>> b = enumerate(seasons) # 默认是从0开始一一对应列表中的值 >>> list(b) [(0, 'spring'), (1, 'summer'), (2, 'fall'), (3, 'winter')] >>> b = enumerate(seasons, start=1) # 可以通过start去指定开始的值 >>> list(b) [(1, 'spring'), (2, 'summer'), (3, 'fall'), (4, 'winter')] >>>
slice
>>> b = list(range(10)) >>> b [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] >>> c = slice(5) # 定义一个切片的规则,然后通过下面去调用 >>> b[c] [0, 1, 2, 3, 4] >>> c = slice(1,5) >>> b[c] [1, 2, 3, 4] >>> c = slice(1,5, 2) >>> b[c] [1, 3] >>>
super object(待定)
iter
>>> a = iter([1,2,3]) # 创建一个可迭代对象 >>> next(a) 1 >>> next(a) 2 >>> next(a) 3 >>> next(a) traceback (most recent call last): file "<stdin>", line 1, in <module> stopiteration >>>
range
>>> list(range(0)) # 结束的值小于等于0的时候会返回一个空字符串 [] >>> list(range(-1)) [] >>> list(range(1, 10, -2)) [] >>> list(range(1, 10, 2)) # 第三个数是步长,默认是一 [1, 3, 5, 7, 9] >>>
ord , chr
>>> ord('a') # unicode字符对应的整数 97 >>> chr(97) # 整数对应的unicode字符 'a' >>> ord('中') 20013 >>> ord('20013') traceback (most recent call last): file "<stdin>", line 1, in <module> typeerror: ord() expected a character, but string of length 5 found >>> chr(20013) '中' >>>