Use parentheses after a function name to execute it in Python. Define the function with def
, then call it as name()
. See the official tutorial for defining functions at docs.python.org.
Method 1: Call a function directly
Step 1: Define a function with def
.
def greet():
print("Hello from a function")
Step 2: Execute the function by adding parentheses to its name.
greet() # prints: Hello from a function
Method 2: Call with arguments (positional, keyword, defaults, variable-length)
Step 1: Call with positional arguments in the order parameters are defined.
def full_name(fname, lname):
print(fname, lname)
full_name("Emil", "Refsnes")
Step 2: Call with keyword arguments to specify parameters by name (order does not matter).
full_name(lname="Refsnes", fname="Emil")
Step 3: Mix positional first, then keyword arguments; do not place positional arguments after keywords.
def cost(item, quantity, price):
print(f"{quantity} {item} cost ${quantity * price:.2f}")
cost("bananas", quantity=6, price=0.74) # OK
# cost(item="bananas", 6, 0.74) # SyntaxError: positional after keyword
Step 4: Use default parameter values by omitting that argument in the call.
def origin(country="Norway"):
print("I am from", country)
origin() # uses default "Norway"
origin("India") # overrides default
Step 5: Accept a variable number of positional arguments with *args
.
def youngest(*kids):
print("The youngest child is", kids[2])
youngest("Emil", "Tobias", "Linus")
Step 6: Accept a variable number of keyword arguments with **kwargs
.
def show_last_name(**kid):
print("His last name is", kid["lname"])
show_last_name(fname="Tobias", lname="Refsnes")
Step 7: Require positional-only arguments by placing /
in the signature (Python 3.8+).
def echo(x, /):
print(x)
echo(3) # OK
# echo(x=3) # TypeError: positional-only
Step 8: Require keyword-only arguments by placing *
before them.
def scale(*, factor):
print(f"Scaling by {factor}")
scale(factor=3) # OK
# scale(3) # TypeError: keyword-only
Method 3: Capture and use a function’s return value
Step 1: Return a value with return
inside the function.
def times5(x):
return 5 * x
Step 2: Assign the return value to a variable.
result = times5(9)
Step 3: Use the value in further code or print it.
print(result) # 45
Method 4: Call a function by its name (string) safely
Prefer attribute lookup over eval
. Use getattr
to retrieve a function object by name, then call it. See the official getattr
docs at docs.python.org.
Step 1: Import the module that contains the function.
import math
Step 2: Retrieve the function by name with getattr(module, "name")
.
func = getattr(math, "sqrt") # <built-in function sqrt>
Step 3: Call the retrieved function like any other callable.
print(func(16)) # 4.0
Step 4: Import a module by string with importlib.import_module
when both module and function names are dynamic.
from importlib import import_module # docs: https://docs.python.org/3/library/importlib.html#importlib.import_module
module_name, func_name = "random", "randint"
mod = import_module(module_name)
print(getattr(mod, func_name)(1, 6))
Step 5: Avoid eval
/exec
for calling by name.
- They execute arbitrary code, which introduces serious security risks.
- Attribute lookup is explicit, safer, and easier to test.
Method 5: Use a dispatch dictionary for user-selected actions
Map input strings to callables, then look up and call—this simplifies long if/elif
chains and keeps the code maintainable.
Step 1: Build a dictionary of command names to functions.
def bw(img): ...
def sepia(img): ...
def pencil_sketch(img, mode): ...
# wrap different signatures if needed
def psg(img): return pencil_sketch(img, 1)
def psc(img): return pencil_sketch(img, 2)
EFFECTS = {
"bw": bw,
"sepia": sepia,
"psg": psg,
"psc": psc,
}
Step 2: Retrieve the callable from the mapping and execute it.
effect = input("Effect: ").strip().lower()
img = ... # your image
func = EFFECTS.get(effect)
if func:
func(img)
else:
print("Please enter a valid effect name.")
Step 3: Store partials or lambdas if you need to bind arguments ahead of time.
from functools import partial
EFFECTS = {
"psc": partial(pencil_sketch, mode=2),
# later: EFFECTS["psc"](img)
}
Method 6: Call a function from another file (module)
Step 1: Import the module or the function you need.
# file: utils.py
def shout(msg):
print(msg.upper())
# file: app.py
import utils
from utils import shout
Step 2: Call using either the module attribute or the directly imported name.
# via module
utils.shout("hello")
# via direct import
shout("hello")
Step 3: Keep module paths importable (current working directory or package on PYTHONPATH
), so imports resolve reliably.
Quick checks and common errors
Step 1: Ensure the function is defined before it’s called at runtime.
# OK: bar is defined by the time foo() runs
def foo():
bar() # fine because bar is defined before this call executes
def bar():
print("bar")
foo()
Step 2: Match the expected number of arguments or provide defaults.
def add(a, b): return a + b
# add(1) # TypeError: missing required positional argument
Step 3: Remember that calling a function requires parentheses; using the name alone refers to the function object.
def hello(): return "hi"
print(hello) # <function hello at ...>
print(hello()) # "hi"
With these patterns you can call Python functions directly, pass the right kinds of arguments, capture results, and even invoke callables by name without unsafe code. Keep your interface clear, prefer explicit lookups over eval
, and your function calls will stay simple and predictable.
Member discussion