对于str.split(line),我在str类上调用一个方法,并将一个行对象(恰好是一个充满字符串的列表)传递给字符串对象?
我似乎更清楚我应该在我的线对象上调用split()方法.
我无法理解为什么两种方式都有效.
首先,你是对的,在这种情况下,它更可读(和更多Pythonic等)只是打电话line.split()比str.split(line).
但有什么案例str.split有用吗?当然.想象一下,你有一个行列表,你想要拆分所有行.以下哪一项更具可读性:
split_lines = map(str.split, lines)
split_lines = map(lambda line: line.split(), lines)
因为str.split已经是一个适用于任何函数的函数str,所以你不必创建一个适用于任何str传递的新函数.
更一般地说,你所问的是为什么Python有"非绑定方法".*部分原因是因为它们自然不属于Python中方法的工作方式.**但主要是因为它们很方便传递更高阶函数(并且因为绝对一切都应该可用作值,除非有充分的理由不允许它).
至于最后一部分,了解它们是如何工作的,这可能与SO答案有点牵连.您可以在本教程中学习它们的工作原理; 有关更多详细信息,请参阅方法如何工作,其中包含指向其他有用信息的链接 但作为一个快速总结:
line.split是一个绑定方法 - 一个可调用对象,self它在以后调用它时知道要传递的值.因此,line.split()只需调用绑定方法而不添加其他参数,并line自动将其作为传递方式传递self.str.split是一种未绑定的方法 - 基本上只是一个函数.因此,str.split(line)明确地传递line为self.*从3.x开始,术语"未绑定方法"被淡化,因为实际上,未绑定方法与函数相同.
**Guido已经解释了几次; 从他2009年的博客文章First-Class Everything开始.
| 归档时间: | 
 | 
| 查看次数: | 78 次 | 
| 最近记录: |