bpo-33254: do not return an empty list when asking for the contents of a namespace package (GH-6467)

diff --git a/Lib/importlib/abc.py b/Lib/importlib/abc.py
index d2f4509..dbdd5bf 100644
--- a/Lib/importlib/abc.py
+++ b/Lib/importlib/abc.py
@@ -381,8 +381,8 @@
 
     @abc.abstractmethod
     def contents(self):
-        """Return an iterator of strings over the contents of the package."""
-        return iter([])
+        """Return an iterable of strings over the contents of the package."""
+        return []
 
 
 _register(ResourceReader, machinery.SourceFileLoader)
diff --git a/Lib/importlib/resources.py b/Lib/importlib/resources.py
index e565427..4d70186 100644
--- a/Lib/importlib/resources.py
+++ b/Lib/importlib/resources.py
@@ -9,7 +9,7 @@
 from io import BytesIO, TextIOWrapper
 from pathlib import Path
 from types import ModuleType
-from typing import Iterator, Optional, Set, Union   # noqa: F401
+from typing import Iterable, Iterator, Optional, Set, Union   # noqa: F401
 from typing import cast
 from typing.io import BinaryIO, TextIO
 from zipimport import ZipImportError
@@ -44,8 +44,7 @@
 
     If the resulting string contains path separators, an exception is raised.
     """
-    str_path = str(path)
-    parent, file_name = os.path.split(str_path)
+    parent, file_name = os.path.split(path)
     if parent:
         raise ValueError('{!r} must be only a file name'.format(path))
     else:
@@ -228,8 +227,8 @@
     return path.is_file()
 
 
-def contents(package: Package) -> Iterator[str]:
-    """Return the list of entries in 'package'.
+def contents(package: Package) -> Iterable[str]:
+    """Return an iterable of entries in 'package'.
 
     Note that not all entries are resources.  Specifically, directories are
     not considered resources.  Use `is_resource()` on each entry returned here
@@ -238,15 +237,15 @@
     package = _get_package(package)
     reader = _get_resource_reader(package)
     if reader is not None:
-        yield from reader.contents()
-        return
+        return reader.contents()
     # Is the package a namespace package?  By definition, namespace packages
     # cannot have resources.  We could use _check_location() and catch the
     # exception, but that's extra work, so just inline the check.
-    if package.__spec__.origin is None or not package.__spec__.has_location:
-        return []
-    package_directory = Path(package.__spec__.origin).parent
-    yield from os.listdir(str(package_directory))
+    elif package.__spec__.origin is None or not package.__spec__.has_location:
+        return ()
+    else:
+        package_directory = Path(package.__spec__.origin).parent
+        return os.listdir(package_directory)
 
 
 # Private implementation of ResourceReader and get_resource_reader() for
diff --git a/Lib/test/test_importlib/test_resource.py b/Lib/test/test_importlib/test_resource.py
index d717e1d..b076860 100644
--- a/Lib/test/test_importlib/test_resource.py
+++ b/Lib/test/test_importlib/test_resource.py
@@ -131,10 +131,9 @@
 
 
 class NamespaceTest(unittest.TestCase):
-    def test_namespaces_cant_have_resources(self):
-        contents = set(resources.contents(
-            'test.test_importlib.data03.namespace'))
-        self.assertEqual(len(contents), 0)
+    def test_namespaces_cannot_have_resources(self):
+        contents = resources.contents('test.test_importlib.data03.namespace')
+        self.assertFalse(list(contents))
         # Even though there is a file in the namespace directory, it is not
         # considered a resource, since namespace packages can't have them.
         self.assertFalse(resources.is_resource(