That’s not to say you always have to use that code as a module. It can certainly be treated as a standalone app. But if you wanted to create your own Python module, with just code that you need often in your own work, you could certainly do so.
A Python module is also just a file with a .py filename extension. The name of the module is the same as the filename (without the .py). Like any .py file, the module contains Python code. As a working example, let’s suppose you want to have three functions to simplify formatting dates and currency values. You can make up any name you like for each function. For our working example, we’ll use these three names:
to_date(<em>any_str</em>)
: Lets you pass in any string (any_str
) date in mm/dd/yy or mm/dd/yyyy format and sends back a Pythondatetime.date
that you can use for date calculations.mdy(<em>any_date</em>)
: Lets you pass in any Python date or datetime, and returns a string date formatted in mm/dd/yyyy format for display on the screen.to_curr(<em>any_num, len</em>)
: Lets you pass in any Python float or integer number and returns a string with a leading dollar sign, commas in thousands places, and two digits for the pennies. Thelen
is an optional number for length. If provided, the return value will be padded on the left with spaces to match the length specified
# Contains custom functions for dates and currency values. import datetime as dt def to_date(any_str): """ Convert mm/dd/yy or mm/dd/yyyy string to datetime.date, or None if invalid date. """ try: if len(any_str) == 10: the_date = dt.datetime.strptime(any_str,'%m/%d/%Y').date() else: the_date = dt.datetime.strptime(any_str,'%m/%d/%y').date() except (ValueError, TypeError): the_date = None return the_date def mdy(any_date): """ Returns a string date in mm/dd/yyyy format. Pass in Python date or string date in mm/dd/yyyy format """ if type(any_date) == str: any_date = to_date(anydate) # Make sure its a dateime being forwarded if isinstance(any_date,dt.date): s_date = f"{any_date:'%m/%d/%Y'}" else: s_date = "Invalid date" return s_date def to_curr(anynum, len=0): """ Returns a number as a string with $ and commas. Length is optional """ s = "Invalid amount" try: x = float(anynum) except ValueError: x= None if isinstance(x,float): s = '$' + f"{x:,.2f}" if len > 0: s=s.rjust(len) return sYou can create the same file yourself and name it
myfunctions.py
if you want to follow along. Notice that the file contains only functions. So if you run it, it won't do anything on the screen because there is no code in there that calls any of those functions.To use those functions in any Python app or program you write, first make sure you copy that myfunc.py
file to the same folder as the rest of the Python code that you’re writing. Then, when you create a new page, you can import myfunc
as a module just as you would any other module created by somebody else. Just use
import myfuncYou will have to use the module name in front of any of the functions that you call from that module. So if you want to make the code a little more readable, you can use this instead:
import myfunc as myWith that as your opening line, you can refer to any function in your custom Python module with
my.
as the prefix. For example, my.to_date()
to call the to_date
function. Here is a page that imports the module and then tests out all three functions using that my syntax:
# Import all the code from myfunc.py as my. import myfunc as my # Need dates in this code from datetime import datetime as dt # Some simple test data. string_date="12/31/2019" # Convert string date to datetime.date print(my.to_date(string_date)) today = dt.today() # Show today's date in mm/dd/yyyy format. print(my.mdy(today)) dollar_amt=12345.678 # Show this big number in currency format. print(my.to_curr(dollar_amt))You can also skip using the prefix if you import items by name. In this case, that means you could call
to_date()
and mdy()
and to_curr()
without using the my.
prefix. The first line of code would need to be
from myfunc import to_date, mdy, to_currThe rest of the code would be the same as in the previous example, except you can leave off the
my.
prefixes as in the following code:
# Import all the code from myfunc.py by name. from myfunc import to_date, mdy, to_curr # Need dates in this code from datetime import datetime as dt # Some simple test data. string_date="12/31/2019" # Convert string date to datetime.date print(to_date(string_date)) today = dt.today() # Show today's date in mm/dd/yyyy format. print(mdy(today)) dollar_amt=12345.678 # Show this big number in currency format. print(to_curr(dollar_amt))
Check out these 10 amazing Python programming resources for more information.