gpt4 book ai didi

python - Python 中调用的函数中的函数是什么?

转载 作者:行者123 更新时间:2023-12-01 07:42:52 25 4
gpt4 key购买 nike

这将是一个非常n00b的问题......

在 python 中,我想编写一些函数来检索几种不同类型设备的软件版本和系统正常运行时间。我可以为每个需求编写一个函数,但我不想那样做。我想在函数中编写函数,这样我就可以用点符号来调用它们。

下面是我希望创建的函数的示例:

get(device)   # Determine device type and get software version and uptime
get.version(device) # Determine device type and get software version
get.uptime(device) # Determine device type and get device up time
get.cisco.version(device) # Get software version for a Cisco device
get.cisco.uptime(device) # Get device up time for a Cisco device
get.arris.version(device) # Get software version for an Arris device
get.arris.uptime(device) # Get device up time for an Arris device
get.motorola.version(device) # Get software versino for a Motorola device
get.motorola.uptime(device) # Get device up time for a Motorola device

因此,我会编写一个“get”函数,并在其中编写一个“version”、“uptime”、“cisco”、“arris”和“motorola”函数。在这些函数中我会编写更多函数。

这在 Python 中叫什么?它是如何实现的?我只需要知道我在寻找什么,这样我就可以在文档中找到它并学习。

最佳答案

将这些概念化为嵌套方法声明有点奇怪,并且在 python 中无法正常工作,除非您使用 lambda,而 lambda 是有限制的。这是您通常使用类的功能类型,因为嵌套这些确实。因此,让我们将其作为类来实现!唯一的障碍是 get() 需要有点 hacky 才能使其按照您想要的方式工作,但我们可以解决这个问题。

class get:
# inner class cisco
class cisco:
@staticmethod
def version(device):
# do stuff

@staticmethod
def uptime(device):
# do stuff

# inner class motorola
class motorola:
...

# inner class arris
class arris:
...

# and now we define the stuff for the get class itself
# (after the inner classes, because we need them to be defined
# before we refer to them in the below methods

def __new__(cls, device):
# this is *supposed* to return a new instance of a `get`.
# We can override that behavior and have it return other things when `get()` is invoked
return (get.version(device), get.uptime(device))

@staticmethod
def version(device):
# do stuff

@staticmethod
def uptime(device):
# do stuff

这允许以下所有内容按预期运行:

get(device)
get.version(device)
get.cisco.uptime(device)

缺点是您必须显式编写所有这些方法。如果您嵌套这样的类,则不能使用 get 类作为 get.ciscoget.motorola 的父类(super class),或者东西。

我还在上面使用了@staticmethod,它允许您将方法放入类中,而无需它使用额外的(隐式)clsself 参数。你可以替换

@staticmethod
def version(device)

@classmethod
def version(cls, device)

它的行为或多或少是相同的。

关于python - Python 中调用的函数中的函数是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56605240/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com