Last active
May 23, 2017 06:30
-
-
Save kaizu/43aa7fecc720451d72dda4dcf50bf565 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/usr/bin/env python | |
# -*- coding: utf-8 -*- | |
""" | |
This is a module for mathematical utility functions. | |
""" | |
from __future__ import print_function # This is for Python2 | |
__author__ = "author" | |
__version__ = "1.0.0" | |
__copyright__ = "Copyright 2017, Planet Earth" | |
__license__ = "GPLv2" | |
__email__ = "[email protected]" | |
__status__ = "Development" # "Prototype", "Development", or "Production" | |
__all__ = ["product"] | |
from logging import getLogger, StreamHandler, Formatter | |
_log = getLogger(__name__) | |
handler = StreamHandler() | |
formatter = Formatter(fmt='%(levelname)s:%(name)s:%(message)s') | |
handler.setFormatter(formatter) | |
from logging import DEBUG | |
lv = DEBUG # This is a log level: CRITICAL, ERROR, WARNING, INFO, or DEBUG | |
handler.setLevel(lv) | |
_log.setLevel(lv) | |
_log.addHandler(handler) | |
import functools | |
def product(values): | |
""" | |
Calculate the product of given integers. | |
Parameters | |
---------- | |
values : iterable | |
A list of integers | |
Returns | |
------- | |
res : int | |
A product | |
Examples | |
-------- | |
>>> product([]) | |
1 | |
>>> product([2]) | |
2 | |
>>> product([2, 3, 4, 5]) | |
120 | |
""" | |
_log.info("function 'product' was called with values={}.".format(str(values))) | |
res = functools.reduce(lambda a, b: a * b, values, 1) | |
_log.info("a result is {:d}.".format(res)) | |
return res | |
def _main(): | |
import platform | |
_log.info("the version is {}.".format(platform.python_version())) | |
(major, minor, _) = platform.python_version_tuple() | |
if major != '3': | |
raise RuntimeError("The version is too old '{}'. Use Python3.".format(platform.python_version())) | |
elif int(minor) < 5: | |
_log.warn("the version is a bit old '{}'. Use Python3.5 or later.".format(platform.python_version())) | |
import argparse | |
parser = argparse.ArgumentParser(description='Process some integers.') | |
parser.add_argument('integers', metavar='N', type=int, nargs='*', help='an integer for the product') | |
args = parser.parse_args() | |
print(product(args.integers)) | |
if __name__ == "__main__": | |
_main() # Do nothing except for calling _main |
Author
kaizu
commented
May 23, 2017
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment