Python 调用类方法&x27;s方法';sn层深

Python 调用类方法&x27;s方法';sn层深,python,python-3.x,methods,repeat,Python,Python 3.x,Methods,Repeat,我正在尝试做一些与之相当的事情 a=[[[[[1,2,3,4,5]]]]] res = a.pop().pop().pop() 这将返回[[1,2,3,4,5]],但我希望能够执行pop序列n次,所以类似 范围(n)内的u的a.pop()不能作为其在a对象上的调用pop()而不是a.pop()对象上的调用pop() 关于如何在python中实现这一点,有什么线索吗?如果有,它将被称为什么,以供将来参考?我能找到的最接近的是*运算符,它将list()转换为单独的参数 我不想这样做(忽略边缘情况)

我正在尝试做一些与之相当的事情

a=[[[[[1,2,3,4,5]]]]]
res = a.pop().pop().pop()
这将返回
[[1,2,3,4,5]]
,但我希望能够执行pop序列
n次,所以类似
范围(n)内的u的
a.pop()
不能作为其在
a
对象上的调用pop()而不是
a.pop()
对象上的调用pop()

关于如何在python中实现这一点,有什么线索吗?如果有,它将被称为什么,以供将来参考?我能找到的最接近的是*运算符,它将list()转换为单独的参数

我不想这样做(忽略边缘情况):


您可以使用递归。此函数获取一个列表和要执行的POP数,并返回结果

a = [[[[[1, 2, 3, 4, 5]]]]]

def pop_n(l, n):
    item = l.pop()
    if n < 2:
        return item
    else:
        return pop_n(item, n-1)

res = pop_n(a, 3)
print(res)
# [[1, 2, 3, 4, 5]]
a=[1,2,3,4,5][]]
def pop_n(左、右):
item=l.pop()
如果n<2:
退货项目
其他:
返回pop\n(项目,n-1)
res=pop_n(a,3)
打印(res)
# [[1, 2, 3, 4, 5]]

您可以使用递归。此函数获取一个列表和要执行的POP数,并返回结果

a = [[[[[1, 2, 3, 4, 5]]]]]

def pop_n(l, n):
    item = l.pop()
    if n < 2:
        return item
    else:
        return pop_n(item, n-1)

res = pop_n(a, 3)
print(res)
# [[1, 2, 3, 4, 5]]
a=[1,2,3,4,5][]]
def pop_n(左、右):
item=l.pop()
如果n<2:
退货项目
其他:
返回pop\n(项目,n-1)
res=pop_n(a,3)
打印(res)
# [[1, 2, 3, 4, 5]]

这本书很有意思,但我不建议你做我在下面写的,因为它不可读

首先,您不想显式地创建函数。您需要一个类似列表理解的表达式来完成此操作。这是规则

那个么我怎样才能实现嵌套函数呢?在数学中,它被称为函数组合(例如,
f(g(h(x))
,函数为
f(x)
g(x)
h(x)
)。在Python中,我能想到的唯一一件足够接近这一点的事情是
reduce
。您可以将函数列表缩减为单个“reduced”函数。我的解决方案是:

import functools
a=[[[[[1,2,3,4,5]]]]]
five = functools.reduce(
           lambda f,g: lambda x: f(g(x)),
           [lambda x: x.pop() for _ in range(5)],
           lambda x:x
       )(a)
您将获得上面的
five==5
。它将从最里面的列表中弹出最后一个元素

让我解释一下上面的内容:

  • functools.reduce()
    是为了创建一个函数
    f(f(f(f(a)щщ)
    ,它
    f(x)
    被定义为
    x.pop()
    。它嵌套了五次,所以我在
    functools.reduce()的第二个参数中使用了
    range(5)
  • 第一个参数是嵌套
  • 第三个参数是创建一个返回自身的函数。这个想法是为了最里面的
    f(a)
    ,我们需要将它表示为一个嵌套函数。因此它是
    f(g(a))
    ,其中
    g(a)=a
    f(a)=a.pop()
  • 整个过程返回的是一个可调用的对象,所以我们用参数
    a
    调用它来执行它
  • 本质上,这相当于使用通过标识lambda函数访问的
    a
    运行
    a.pop().pop().pop().pop().pop().pop()

是的,很复杂,也很难阅读。但是它可以用Python来完成。

这本书很有趣,但我不建议你做我下面写的,因为它不可读

首先,你不想显式地创建一个函数。你想用一个类似列表理解的表达式来实现这一点。这是规则

那么我该如何做嵌套函数呢?在数学中,它被称为函数组合(例如,
f(g(h(x))
,对于函数
f(x)
g(x)
h(x)
)。在Python中,我能想到的唯一接近这一点的是
reduce
。您可以将函数列表简化为一个“reduced”功能。我的解决方案是:

import functools
a=[[[[[1,2,3,4,5]]]]]
five = functools.reduce(
           lambda f,g: lambda x: f(g(x)),
           [lambda x: x.pop() for _ in range(5)],
           lambda x:x
       )(a)
您将获得上面的
five==5
。它将从最里面的列表中弹出最后一个元素

让我解释一下上面的内容:

  • functools.reduce()
    是为了创建一个函数
    f(f(f(f(a)щщ)
    ,它
    f(x)
    被定义为
    x.pop()
    。它嵌套了五次,所以我在
    functools.reduce()的第二个参数中使用了
    range(5)
  • 第一个参数是嵌套
  • 第三个参数是创建一个返回自身的函数。这个想法是为了最里面的
    f(a)
    ,我们需要将它表示为一个嵌套函数。因此它是
    f(g(a))
    ,其中
    g(a)=a
    f(a)=a.pop()
  • 整个过程返回的是一个可调用的对象,所以我们用参数
    a
    调用它来执行它
  • 本质上,这相当于使用通过标识lambda函数访问的
    a
    运行
    a.pop().pop().pop().pop().pop().pop()

是的,很复杂,也很难阅读。但是可以用Python来完成。

有什么原因你不想使用for循环。可以使用什么呢?你可以定义一个包含循环的函数,然后你就不必每次都写循环了。我不能在for循环中完成,因为我正在处理的项目实际上是一个非常复杂的循环的一部分ested for loop本身。控制流有点奇怪,但它阻止我重新构造整个项目流。本质上,它不是.pop(),而是一种不同的方法,其中参数更改每个迭代的ex.filter(更改_值)这毫无意义。你可以有嵌套的循环,你不需要重新构造任何东西。你不想使用for循环有什么原因吗?可以使用什么?你可以定义一个包含循环的函数,然后你就不必每次都写循环了。我不能在for循环中这样做,因为我正在处理的项目实际上是p一种非常嵌套的for循环本身的艺术。控制流有点奇怪,但它阻止我重新构造整个项目流。本质上,它不是.pop(),而是一种不同的方法,其中参数更改每个迭代的ex.filter(更改_值)这是没有意义的。你可以有嵌套的循环,你不需要重新构造任何东西。这更多的是什么