Как заставить MATLAB распознавать недавно добавленные статические методы?

Функция генератора, объект генератора, генератор:

Функция генератора похожа на обычную функцию в Python, но содержит одну или более yield заявлений. Функции генератора - отличный инструмент для создания объектов Iterator как можно проще. Объект Iterator , возвращаемый функцией генератора, также называется Generator object или Generator .

В этом примере я создал функцию Generator, которая возвращает объект Generator <generator object fib at 0x01342480>. Как и другие итераторы, объекты Generator могут использоваться в цикле for или со встроенной функцией next(), которая возвращает следующее значение из генератора.

def fib(max):
    a, b = 0, 1
    for i in range(max):
        yield a
        a, b = b, a + b
print(fib(10))             #<generator object fib at 0x01342480>

for i in fib(10):
    print(i)               # 0 1 1 2 3 5 8 13 21 34


print(next(myfib))         #0
print(next(myfib))         #1
print(next(myfib))         #1
print(next(myfib))         #2

Таким образом, функция генератора - это самый простой способ создать объект Iterator.

Итератор :

Каждый объект-генератор является итератором , но не наоборот. Пользовательский объект итератора может быть создан, если его класс реализует метод __iter__ и __next__ (также называемый протоколом итератора).

Однако гораздо проще использовать функцию генераторов для создания итераторов , потому что они упрощают их создание, но пользовательский итератор дает вам больше свободы, и вы также можете реализовывать другие методы в соответствии с вашими требованиями как показано в приведенном ниже примере.

class Fib:
    def __init__(self,max):
        self.current=0
        self.next=1
        self.max=max
        self.count=0

    def __iter__(self):
        return self

    def __next__(self):
        if self.count>self.max:
            raise StopIteration
        else:
            self.current,self.next=self.next,(self.current+self.next)
            self.count+=1
            return self.next-self.current

    def __str__(self):
        return "Generator object"

itobj=Fib(4)
print(itobj)               #Generator object

for i in Fib(4):  
    print(i)               #0 1 1 2

print(next(itobj))         #0
print(next(itobj))         #1
print(next(itobj))         #1
5
задан gnovice 1 July 2009 в 16:58
поделиться

2 ответа

Выполнение этого вызова CLEAR должно сделать это:

clear classes

Одним из неприятных побочных эффектов этого является то, что он также эффективно выдает очистить все , который также очищает все переменные в рабочем пространстве (однако это все равно произойдет, когда вы закроете и перезапустите MATLAB). Эта очистка рабочей области на самом деле служит определенной цели, поскольку она удаляет все переменные того же типа, что и старая версия вашего класса, что потенциально не будет правильно работать с новым версия вашего класса.

Функция REHASH может работать, но я сомневаюсь в этом (я думаю, что она больше касается путей к файлам, чем определений классов).

6
ответ дан 14 December 2019 в 08:58
поделиться

try "clear classname"

0
ответ дан 14 December 2019 в 08:58
поделиться
Другие вопросы по тегам:

Похожие вопросы: