Python - список и цикл в одном определении - PullRequest
0 голосов
/ 31 марта 2010

Я пытаюсь получить def wfsc_pod1 и wfsc_ip в одном и том же def. Я не совсем уверен, как подойти к проблеме. Я хочу, чтобы wfsc_pod1 отображал всю информацию для имени, подсети и шлюза. Затем wfsc_ip показывает IP-адреса под ним. Я также получаю значение None, когда запускаю его как есть. Не уверен почему. Все более питоническое ценится больше.

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 ]

1 голос
/ 31 марта 2010

Прежде всего, вы, вероятно, хотели написать 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_pod1 и wfsc_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) было бы добавить операторы print внутри wfsc_combined и вызывать его без оператора print:

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
0 голосов
/ 31 марта 2010

Вы получаете None, потому что это то, что wfsc_ip возвращает. Функции / методы, которые больше ничего не возвращают, возвращают None.

0 голосов
/ 31 марта 2010

Вы получаете None от print network.wfsc_ip(), потому что wfsc_ip не возвращает ничего, что то же самое, что возвращать None - что еще сделал вы ожидаете получить от печати значение функции, которая просто ничего не возвращает?!

Вы, похоже, в плену глубокой путаницы между отображением вещей (например, с print утверждениями, как это делает wfsc_ip) и возвратом информации, как wfsc_pod1 делает. До тех пор, пока вы не проясните это заблуждение, никто не сможет вам сильно помочь.

0 голосов
/ 31 марта 2010

OutageAddress.wfsc_ip возвращает None, поскольку не имеет оператора возврата.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...