diff --git a/Doc/library/gzip.rst b/Doc/library/gzip.rst
index b99ac74..0401cd8 100644
--- a/Doc/library/gzip.rst
+++ b/Doc/library/gzip.rst
@@ -82,6 +82,17 @@
    The *filename* argument is required; *mode* defaults to ``'rb'`` and
    *compresslevel* defaults to ``9``.
 
+.. function:: compress(data, compresslevel=9)
+
+   Compress the *data*, returning a :class:`bytes` object containing
+   the compressed data.  *compresslevel* has the same meaning as in
+   the :class:`GzipFile` constructor above.
+
+.. function:: decompress(data)
+
+   Decompress the *data*, returning a :class:`bytes` object containing the
+   uncompressed data.
+
 
 .. _gzip-usage-examples:
 
@@ -112,6 +123,11 @@
    f_out.close()
    f_in.close()
 
+Example of how to GZIP compress a binary string::
+
+   import gzip
+   s_in = b"Lots of content here"
+   s_out = gzip.compress(s_in)
 
 .. seealso::
 
diff --git a/Lib/gzip.py b/Lib/gzip.py
index fab55a3..83311cc 100644
--- a/Lib/gzip.py
+++ b/Lib/gzip.py
@@ -10,7 +10,7 @@
 import builtins
 import io
 
-__all__ = ["GzipFile","open"]
+__all__ = ["GzipFile", "open", "compress", "decompress"]
 
 FTEXT, FHCRC, FEXTRA, FNAME, FCOMMENT = 1, 2, 4, 8, 16
 
@@ -476,6 +476,23 @@
         return b''.join(bufs) # Return resulting line
 
 
+def compress(data, compresslevel=9):
+    """Compress data in one shot and return the compressed string.
+    Optional argument is the compression level, in range of 1-9.
+    """
+    buf = io.BytesIO()
+    with GzipFile(fileobj=buf, mode='wb', compresslevel=compresslevel) as f:
+        f.write(data)
+    return buf.getvalue()
+
+def decompress(data):
+    """Decompress a gzip compressed string in one shot.
+    Return the decompressed string.
+    """
+    with GzipFile(fileobj=io.BytesIO(data)) as f:
+        return f.read()
+
+
 def _test():
     # Act like gzip; with -d, act like gunzip.
     # The input file is not deleted, however, nor are any other gzip
diff --git a/Lib/test/test_gzip.py b/Lib/test/test_gzip.py
index 7eade6f..a95af05 100644
--- a/Lib/test/test_gzip.py
+++ b/Lib/test/test_gzip.py
@@ -265,6 +265,26 @@
             d = f.read()
             self.assertEqual(d, data1 * 50, "Incorrect data in file")
 
+    # Testing compress/decompress shortcut functions
+
+    def test_compress(self):
+        for data in [data1, data2]:
+            for args in [(), (1,), (6,), (9,)]:
+                datac = gzip.compress(data, *args)
+                self.assertEqual(type(datac), bytes)
+                with gzip.GzipFile(fileobj=io.BytesIO(datac), mode="rb") as f:
+                    self.assertEqual(f.read(), data)
+
+    def test_decompress(self):
+        for data in (data1, data2):
+            buf = io.BytesIO()
+            with gzip.GzipFile(fileobj=buf, mode="wb") as f:
+                f.write(data)
+            self.assertEqual(gzip.decompress(buf.getvalue()), data)
+            # Roundtrip with compress
+            datac = gzip.compress(data)
+            self.assertEqual(gzip.decompress(datac), data)
+
 def test_main(verbose=None):
     support.run_unittest(TestGzip)
 
diff --git a/Misc/ACKS b/Misc/ACKS
index 26feba3..45cd1b7 100644
--- a/Misc/ACKS
+++ b/Misc/ACKS
@@ -634,6 +634,7 @@
 Jim St. Pierre
 Dan Pierson
 Martijn Pieters
+Anand B. Pillai
 François Pinard
 Zach Pincus
 Michael Piotrowski
diff --git a/Misc/NEWS b/Misc/NEWS
index 42a04f7..4e11922 100644
--- a/Misc/NEWS
+++ b/Misc/NEWS
@@ -95,6 +95,9 @@
 Library
 -------
 
+- Issue #3488: Provide convenient shorthand functions ``gzip.compress``
+  and ``gzip.decompress``.  Original patch by Anand B. Pillai.
+
 - Issue #8807: poplib.POP3_SSL class now accepts a context parameter, which is a
   ssl.SSLContext object allowing bundling SSL configuration options,
   certificates and private keys into a single (potentially long-lived)
