This method is slightly faster because the ip lookup is only done once. ```wait_for``` can return the output of the function it calls. It returns the output of the function, and the time taken, so we unpack into ec, tc. Which stand for error_code, and time_count. Feel free to change the variable names, just convention from when I wrote wait_for.

``` python
    @property
    def address(self):
        def is_ip_available():
            try:
                return self._provider.get_ip_address(self._vm_name)  # IP address returned here
            except AttributeError:
                return False

        if self._address is None:
            ec, tc = wait_for(is_ip_available,  # ec contains the return of is_ip_available()
                     delay=5,
                     num_sec=30)
            self._address = ec  # final setting of is_ip_available()
        return self._address
```