服务器之家

服务器之家 > 正文

Python内置函数详谈

时间:2022-02-18 00:03     来源/作者:哦...

Python内置函数详谈

这种图皆取自python.org,列出了python3.10中的内置函数。

但是,这些真的都是函数吗?

我们来测试一下:

?
1
2
3
4
5
import types
import inspect
lst = dir(__builtins__)
for name in lst:
    print(name, eval(f'type({name})'))

lst获得的都是__builtins__模块中内容的名称,也就是说lst是一个由字符串组成的列表。但是每个字符串所代表的内容可各有含义。比如"sum"字符串所代表的就是个内置函数,"str"字符串所代表的就是个内置类。

通过eval的方式执行type函数我们可以获得每一个name对应的type对象描述,例如:

bool <class 'type'>

其实到这里我们已经可以发现,像type, dict,str,range,list,tuple,zip其实根本不是函数名称是类型名称:

dict <class 'type'>
list <class 'type'>
map <class 'type'>
range <class 'type'>
set <class 'type'>
str <class 'type'>
tuple <class 'type'>
type <class 'type'>
zip <class 'type'>

所以,类似range(10),type("c")这样的写法,是调用构造器创建了相应类型的实例。

接下来,我们再深挖一步,分别输出__builtins__中所有的内置函数和内置类型。

输出内置函数:

?
1
2
3
4
5
6
7
8
9
10
import types
import inspect
lst = dir(__builtins__)
for name in lst:
    if eval(f'type({name})') is types.BuiltinFunctionType:
        print(f'{name}是内置函数')
    if inspect.isbuiltin(getattr(__builtins__, name)):
        print(f'{name}是内置函数')
fs = inspect.getmembers(__builtins__, inspect.isbuiltin)
print(fs)

这里用了三种方式:

1. 如果其type对象是types.BuiltinFunctionType,则说明这是个内置函数。

2. Python中一切皆对象,那么getattr(__builtins__,name)就是把__builtins__模块视为对象,从中获取名字是name对应的具体内容,这其实就是反射在Python中的体现。获得具体内容后,利用inspect的isbuitin函数来检测是否是内置函数。(注意:inspect模块的isfunction函数只能用来检测普通函数,但内置函数不是普通函数,所以isfunction检测内置函数会得到False。要使用isbuiltin函数进行检测。)

3. 既然__builtins__是一个对象,那么完全可以使用inspect的getmemebers函数并增加一个过滤器inspect.isbuiltin,就可以直接将__builtins__中的内置函数过滤出来了。

接下来是输出内置类:

?
1
2
3
4
5
6
7
8
9
10
import types
import inspect
lst = dir(__builtins__)
for name in lst:
    print(name, eval(f'type({name})'))
for name in lst:
    if inspect.isclass(getattr(__builtins__, name)):
        print(f'{name}是内置类')
cs = inspect.getmembers(__builtins__, inspect.isclass)
print(cs)

因为types中并没有针对类这样的检测。所以这里都是使用inspect.isclass来进行检测。

换句话说,内置类也是类。

总结

本篇文章就到这里了,希望能够给你带来帮助,也希望您能够多多关注服务器之家的更多内容!

原文链接:https://blog.csdn.net/piglite/article/details/120863886

标签:

相关文章

热门资讯

蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整
蜘蛛侠3英雄无归3正片免费播放 蜘蛛侠3在线观看免费高清完整 2021-08-24
2022年最旺的微信头像大全 微信头像2022年最新版图片
2022年最旺的微信头像大全 微信头像2022年最新版图片 2022-01-10
背刺什么意思 网络词语背刺是什么梗
背刺什么意思 网络词语背刺是什么梗 2020-05-22
yue是什么意思 网络流行语yue了是什么梗
yue是什么意思 网络流行语yue了是什么梗 2020-10-11
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全
2020微信伤感网名听哭了 让对方看到心疼的伤感网名大全 2019-12-26
返回顶部