将下一个列表方法调用转换为对命名空间列表中的函数的适当调用?

时间:2018-03-30 02:16:16

标签: python

我的作业说“将下一个列表方法调用转换为对命名空间列表中的函数的适当调用”与他们所要求的内容相混淆?

  

lst = [2,3,4,5]

     

(a)lst。排序()

     

(b)lst。追加(3)

     

(c)lst。算(3)

1 个答案:

答案 0 :(得分:1)

您的示例都显示了绑定方法调用,其中第一个参数隐式地是调用它们的实例。也就是说,如果list是Python中定义的类,append的定义可能如下所示:

class list:
    def append(self, item):
        ... do appendy things ...

lstlist的实例时,正在执行lst.append(3),从list.appendlst生成绑定方法,以便{{1}调用方法时,参数隐式绑定到self

这不是调用方法的唯一方法。您可以通过在类本身而不是实例上访问该方法来直接获取对该方法的未绑定引用,然后显式将该实例作为第一个参数传递。因此,而不是将lst绑定到lst.append(3)的{​​{1}},而是使用参数lst调用生成的绑定方法,您可以执行list.append,显式传递两者3list.append(lst, 3)到未绑定的lst方法。

这有点不寻常,但偶尔会有用处。例如,在您阅读文件中时,从文件中的行中删除尾随空格的简洁方法是:

3

而不是:

list.append

with open(filename) as f: for line in map(str.rstrip, f): ... process line with trailing whitespace skipped ... 有效,因为with open(filename) as f: for line in f: line = line.rstrip() ... process line with trailing whitespace skipped ... 会在每个输入值上调用提供的函数,然后生成结果,map(str.rstrip等同于map str.rstrip(line)line.rstrip()