KeyError 发表于 2022-8-20 12:04:04

我竟然发现了Python的秘密数据类型!?

本帖最后由 KeyError 于 2022-11-16 19:40 编辑


打开Python交互模式,输入:
>>> type(3+3j)
输出:
<class 'complex'>
{:5_94:}
我们明明只知道Python数据类型有int,float,bool,str,list,tuple,dict呀,但Python说3+3j是complex类型呀,嗯……
还没完:
>>> type(None)
<class 'TypeNone'>
你以为完了?:
>>> type(type(4))
<class 'type'>
解释:
complex是Python的复数类型,(0+1j)是虚数单位*

因为type(4)就是一个类型,所以Python说它是一个类型。



*:直接输j会有NameError


任何类都是object的子类,type的对象。

临时号 发表于 2022-8-20 12:07:55

type其实是查看当前对象是由什么类实例化出来的
比如这个代码
>>> class hello:
...   pass
...
>>> a = hello()
>>> type(a)
<class '__main__.hello'>
>>>

KeyError 发表于 2022-8-20 12:09:54

这帖子会被删掉的,不用回复了。

KeyError 发表于 2022-8-21 10:54:59

>>>type(help)
<class '_sitebuiltins._Helper'>
>>> class A:
             pass

>>> type(A)
<class 'type'>
所以'type'是一个类的名称。
>>> type(type)
<class 'type'>
>>> a=A()
>>> type(a)
<class '__main__.A'>
>>> type(Ellipsis)
<class 'ellipsis'>
可以自己去看python Shell的Help。

KeyError 发表于 2022-8-21 10:59:49

本帖最后由 KeyError 于 2022-11-16 19:41 编辑

>>> def f():
             print(3)

>>> type(f)
3
<class 'function'>
函数在Python里的类型是'function'?

KeyError 发表于 2022-8-22 12:24:31

试试:
>>> type(print)
<class 'builtin_function_or_method'>
>>> type(input)
#跟print一样,省略。

KeyError 发表于 2022-8-22 12:26:32

>>> type
<class 'type'>
可见type()是将数据转换为type类型。

KeyError 发表于 2022-8-23 12:38:55

KeyError 发表于 2022-8-20 12:09
这帖子会被删掉的,不用回复了。

你们真不回复了?
{:10_266:}

KeyError 发表于 2022-8-23 12:44:42

>>> type(int.__add__)
<class'wrapper_descriptor'>
python中有些类型是找不到的,像魔法方法'wrapper_descriptor'。

临时号 发表于 2022-8-23 15:56:24

KeyError 发表于 2022-8-21 10:59
>>> def f():
             print(3)



f()在这里只会打印3,而你没有指定返回值,所以默认返回None,type(None)也是一样的效果

KeyError 发表于 2022-8-24 18:34:02

临时号 发表于 2022-8-23 15:56
f()在这里只会打印3,而你没有指定返回值,所以默认返回None,type(None)也是一样的效果

一个函数的类型应该就是它返回的值的类型吧(函数默认返回None)。

临时号 发表于 2022-8-24 18:41:27

KeyError 发表于 2022-8-24 18:34
一个函数的类型应该就是它返回的值的类型吧(函数默认返回None)。

不,你这里看得不是函数的类型,而是函数的返回值的类型
看函数的类型应该是
def f():
    print("Hello")

type(f)

KeyError 发表于 2022-9-10 18:32:25

python2:
>>> type(1234567890)
<class 'long'>
>>> type(b'abcde')
#错误提示信息
python3:
>>> type(1234567890)
<class 'int'>
>>> type(b'abcdef')
<class 'bytes'>
页: [1]
查看完整版本: 我竟然发现了Python的秘密数据类型!?