Python - 列表和循环在一个def

时间:2010-03-31 05:18:00

标签: python

我正在尝试将def wfsc_pod1和wfsc_ip放入相同的def中。我不太确定如何处理这个问题。我希望wfsc_pod1显示名称,子网和网关的所有信息。然后wfsc_ip显示它下面的IP地址。当我运行它时,我也得到一个无值。不知道为什么。任何更多的pythonic更受欢迎。

class OutageAddress:
    subnet = ["255.255.255.0", "255.255.255.1"]

    # Gateway order is matched with names
    gateway = ["192.168.1.1", "192.168.1.2", "192.168.1.3", "192.168.1.4",
                "192.168.1.5", "192.168.1.6", "192.168.1.7", "192.168.1.8",
                "192.168.1.9"]

    name = ["LOC1", "LOC2", "LOC3", "LOC4",
                "LOC5", "LOC6", "LOC7", "LOC8",
                "LOC9"]

    def wfsc_pod1(self):
        wfsc_1 = "%s\t %s\t %s\t" % (network.name[0],network.subnet[0],network.gateway[0])
        return wfsc_1

    def wfsc_ip(self):
        for ip in range(100,110):
            ip = "192.168.1."+str(ip)
            print ip

network = OutageAddress()
print network.wfsc_pod1()
print network.wfsc_ip()

4 个答案:

答案 0 :(得分:1)

首先,您可能打算像这样写wfsc_pod1

def wfsc_pod1(self):
    return "%s\t%s\t%s" % (self.name[0], self.subnet[0], self.gateway[0])

并按照以下方式致电wfsc_ip

network.wfsc_ip() # no print

如果要合并wfsc_pod1wfsc_ip,可以执行以下操作:

def wfsc_combined(self):
    output = []
    output.append("%s\t%s\t%s" % (self.name[0], self.subnet[0], self.gateway[0]))
    for ip in range(100,110):
        output.append("192.168.1.%d" % ip)
    return '\n'.join(output)

并使用print语句调用此函数。

但是,更好的方法(IMO)是在wfsc_combined内添加打印语句并在没有打印语句的情况下调用它:

def wfsc_combined(self):
    print "%s\t%s\t%s" % (self.name[0], self.subnet[0], self.gateway[0])
    for ip in range(100,110):
        print "192.168.1.%d" % ip

答案 1 :(得分:0)

OutageAddress.wfsc_ip返回None,因为它没有返回语句。

答案 2 :(得分:0)

你得到None,因为这是wfsc_ip返回的内容。不返回任何其他内容的函数/方法返回None

答案 3 :(得分:0)

您从None获得print network.wfsc_ip()因为wfsc_ip没有返回任何内容,这与返回None相同 - 什么 else 你是否希望通过打印一个不返回任何内容的函数的值来获得?!

显示内容(例如print语句,如wfsc_ip)和返回之间,你似乎很容易陷入困境之中信息,如wfsc_pod1所做的那样。除非你澄清这种混乱,否则没有人可以真正帮助你。