首页 新闻 会员 周边 捐助

内置函数有的要对象.函数名,有的直接函数名

0
[已解决问题] 解决于 2025-09-10 22:10

内置函数有的要对象.函数名,有的直接函数名

_java_python的主页 _java_python | 小虾三级 | 园豆:984
提问于:2025-09-10 22:08
< >
分享
最佳答案
0

在 Python 里,把“函数”分成两大类,就能解释你看到的两种写法:
1. 真正独立的内置函数(built-in function)
它们活在 builtins 模块里,解释器启动时就自动帮你放到当前全局作用域。
因此直接写名字就能用,不需要、也不能在前面加“对象.”。
例:len('abc')、print('hello')、str(123)、type([])……
2. 定义在某个类型里的“方法”(method)
这些函数是类型对象的属性,必须“绑”到一个实例上才能调用,于是出现
实例.方法名(...) 的写法。
例:
'abc'.upper() # str 类型里的 upper
[1,2,3].append(4) # list 类型里的 append
f = open('a.txt'); f.read() # 文件对象的方法 read
小结
• 只要名字前面没有点,就是“独立函数”;
• 只要出现 对象.函数名(...),那一定是该对象所属类里定义的方法。
补充:为什么 len() 不是 list.len()?
Python 把最常用的“协议性”操作(求长、转字符串、迭代、哈希……)做成独立内置函数,内部只是去调用对象所属类的魔术方法,例如:

len(obj) → obj.__len__()
str(obj) → obj.__str__()

3. repr(x) → x.__repr__()

repr(123)             # 显示开发者友好的字符串表示
4. iter(x) → x.__iter__()

iter([1, 2, 3])       # 而不是 [1,2,3].iter()
5. next(x) → x.__next__()

it = iter([1, 2, 3])
next(it)              # 而不是 it.next()
6. bool(x) → x.__bool__() 或 x.__len__()

bool([])              # False,而不是 [].bool()
bool([1, 2])          # True
7. hash(x) → x.__hash__()

hash("hello")         # 而不是 "hello".hash()
8. abs(x) → x.__abs__()

abs(-5)               # 而不是 (-5).abs()
9. int(x) → x.__int__()

int(3.14)             # 而不是 3.14.int()
10. float(x) → x.__float__()

float(5)              # 而不是 5.float()
11. complex(x) → x.__complex__()

complex(3, 4)         # 创建复数
12. round(x) → x.__round__()

round(3.14159, 2)     # 而不是 3.14159.round(2)
13. reversed(x) → x.__reversed__()

reversed() - 内置函数,返回回一个反向迭代器,不修改原列表,临时反向访问

list.reverse() - 列表方法,原地反转列表,修改原列表,返回值:None


reversed([1, 2, 3])   # 而不是 [1,2,3].reversed()
14. format(x) → x.__format__()

format(3.14159, '.2f') # 而不是 3.14159.format('.2f')
容器协议相关
15. getattr(obj, name) → 访问属性

getattr(obj, 'attr')  # 而不是 obj.getattr('attr')
16. setattr(obj, name, value) → 设置属性

setattr(obj, 'attr', value)
17. delattr(obj, name) → 删除属性
delattr(obj, 'attr')
18. hasattr(obj, name) → 检查属性
比较运算符相关(虽然通常用运算符,但也有函数形式)

dir([])               # 而不是 [].dir()

 


这样既保证了所有类型接口一致,又保留了书写简洁性。

_java_python | 小虾三级 |园豆:984 | 2025-09-10 22:09
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册