Functions
Functions in Jython are defined with def, support default and keyword arguments, *args/**kwargs, and closures - exactly as in Python. Jython adds one big capability: Python functions can be called from Java code and can implement Java interfaces, which is how Jython plugs into the Java world.
Basic Functions
def add(a, b):
return a + b
def greet(name, greeting="Hello"):
return f"{greeting}, {name}"
print(add(2, 3)) # 5
print(greet("Ada")) # Hello, Ada
print(greet("Ada", "Hi")) # Hi, Ada
Variable Arguments
def total(*args, **kwargs):
s = sum(args)
for k, v in kwargs.items():
s += v
return s
print(total(1, 2, 3, bonus=10)) # 16
Closures and Lambdas
def make_adder(n):
def adder(x):
return x + n
return adder
add5 = make_adder(5)
print(add5(10)) # 15
squares = [x * x for x in range(5)]
print(squares)
Return Values
def classify(n):
if n > 0:
return "positive"
elif n < 0:
return "negative"
return "zero"
# multiple return values as a tuple
def divmod2(a, b):
return a // b, a % b
q, r = divmod2(17, 5)
print(q, r) # 3 2
Implementing Java Interfaces
One of Jython's superpowers: a Python class can implement a Java interface and be passed to Java APIs that expect it:
import java.util
class MyComparator(java.util.Comparator):
def compare(self, a, b):
return int(a) - int(b)
nums = java.util.ArrayList()
for n in [3, 1, 2]:
nums.add(n)
java.util.Collections.sort(nums, MyComparator())
print(nums) # [1, 2, 3]
Calling Java Methods from Functions
import java.lang
def word_count(text):
words = java.lang.String(text).split(" ")
return words.length()
print(word_count("one two three")) # 3
Summary
Functions in Jython are ordinary Python functions - def, defaults, *args/**kwargs, closures, lambdas, tuple returns - plus the Jython twist: Python classes can implement Java interfaces (like java.util.Comparator) and be handed to Java APIs. That bridge is what turns Python functions into JVM callbacks.