You can get context-sensitive help to functions, methods and classes with help() function.
import time
print(help(time.asctime))
Help on built-in function asctime in module time:
asctime(...)
asctime([tuple]) -> string
Convert a time tuple to a string, e.g. 'Sat Jun 06 16:26:11 1998'.
When the time tuple is not present, current time as returned by localtime()
is used.
Nonehelp() utilizes the triple-quoted comments called docstrings, so that documentation you write for your own functions is also available through help():
One consequence of the dynamic typing is that Python can treat everything it manages technically in the same way. Everything is an object is a common phrase describing how Python works. There is no fundamental difference between a function and an integer. Many advanced features of Python are built on this concept.
Even advanced programmers can not remember every little python function and usage by head. But a good programmer knows where to find the crucial information.
Of course the Python Documentation are a good resource a faster way towards crucial documentation exist.
It is pydoc. Pydoc usuage docstrings and since every good piece of python software makes use of docstrings using pdoc is the shortest path towards helpful information.
The way to start pydoc for browsing documentation is:
pydoc -p [portnumber]
The pydoc module automatically generates documentation from Python modules.
Pydoc command can be used within a notebook. But the most used way to display help of a function or module is typing:
help(function)
This invokes pydoc and displays the docstring (if used) on how a function should be used.
Introspection is a feature of Python by which you can examine objects (including variables, functions, classes, modules) inside a running Python environment (a program or shell session).
In Python all objects (variables, modules, classes, functions and your main program) are boxes called namespaces. You can imagine the namespace of an object as the data and functions inside than object. You can explore a namespace with the dir() function.
With a string object, you see all the string methods:
s = "Emily"
print(dir(s))Gives output:
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']The same works for a module you import:
import time
print(dir(time))Gives output:
['__add__', '__class__', '__contains__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__getitem__', '__getnewargs__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__iter__', '__le__', '__len__', '__lt__', '__mod__', '__mul__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__rmod__', '__rmul__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', 'capitalize', 'casefold', 'center', 'count', 'encode', 'endswith', 'expandtabs', 'find', 'format', 'format_map', 'index', 'isalnum', 'isalpha', 'isascii', 'isdecimal', 'isdigit', 'isidentifier', 'islower', 'isnumeric', 'isprintable', 'isspace', 'istitle', 'isupper', 'join', 'ljust', 'lower', 'lstrip', 'maketrans', 'partition', 'replace', 'rfind', 'rindex', 'rjust', 'rpartition', 'rsplit', 'rstrip', 'split', 'splitlines', 'startswith', 'strip', 'swapcase', 'title', 'translate', 'upper', 'zfill']You also can view all builtin functions:
print(dir(__builtins__))
['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException', 'BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning', 'ChildProcessError', 'ConnectionAbortedError', 'ConnectionError', 'ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning', 'EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False', 'FileExistsError', 'FileNotFoundError', 'FloatingPointError', 'FutureWarning', 'GeneratorExit', 'IOError', 'ImportError', 'ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError', 'IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError', 'MemoryError', 'ModuleNotFoundError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented', 'NotImplementedError', 'OSError', 'OverflowError', 'PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError', 'RecursionError', 'ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning', 'StopAsyncIteration', 'StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError', 'SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError', 'UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError', 'UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning', 'ValueError', 'Warning', 'ZeroDivisionError', '__IPYTHON__', '__build_class__', '__debug__', '__doc__', '__import__', '__loader__', '__name__', '__package__', '__spec__', 'abs', 'all', 'any', 'ascii', 'bin', 'bool', 'breakpoint', 'bytearray', 'bytes', 'callable', 'chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits', 'delattr', 'dict', 'dir', 'display', 'divmod', 'enumerate', 'eval', 'exec', 'execfile', 'filter', 'float', 'format', 'frozenset', 'get_ipython', 'getattr', 'globals', 'hasattr', 'hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass', 'iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview', 'min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property', 'range', 'repr', 'reversed', 'round', 'runfile', 'set', 'setattr', 'slice', 'sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars', 'zip']An all times hit on Stackoverflow and on Google.
# Suppose list is:
mylist = ['news', 'Security', 'Security', 'Blog', 'Blog', 'Foundation',
'MachineLearning', 'Blog', 'Blog', 'cc-by', 'cc-by', 'Security', 'Foundation',
'Security', 'Blog', 'MachineLearning', 'Blog', 'FOSS', 'Blog', 'FOSS', 'Blog', 'MachineLearning', 'Blog', 'Security', 'Foundation', 'Security',
'news', 'Security', 'Blog', 'ResearchBlog', 'Security']# The list sorted with unique values only is:
mylist = list(set(mylist)) # to make the list with unique values only!mylist['news',
'FOSS',
'Foundation',
'Security',
'MachineLearning',
'ResearchBlog',
'cc-by',
'Blog']
It is not always needed to distribute a Python package on https://pypi.org/. There already too many packages published that are out-of-date or have never worked at all.
When you create a Python package for yourself or only to be used within your company you can easily install this package from a local directory. So distribution of a package can be done using git so anyone who is interested can just git clone your work.
To install a package from a local directory:
pip install . (or use the directory where it is installed)
Or do:
pip install -e . : for Edit mode, during package development.This is a nice to make some local modifications of a cloned package.
Of course mind the environment you use for installation.