Python's max() returns the largest item from an iterable or the larger of two or more positional arguments. The key parameter lets you define what “largest” means for records, strings, or custom objects. The default parameter supplies a value for an empty iterable. Without a default, an empty iterable raises ValueError.
Quick answer
Use max(values) for an iterable, max(left, right) for separate arguments, and max(records, key=lambda record: record["score"]) to select a record by a field. Pass default=None when an empty iterable is valid. Keep the values comparable and avoid mixing incompatible types.
The official Python max documentation defines the iterable and multiple-argument forms, key function, and default behavior. The distinction between one iterable and several arguments is a common source of accidental nesting or errors.

Find the largest number
The iterable form examines each value and returns the largest. It works with lists, tuples, sets, generators, and other iterables whose values can be ordered.
values = [3, -5, 12, 7, 9, 0]
largest = max(values)
print(largest)
The iterable is consumed if it is a one-shot generator. Keep that behavior in mind when the source must be used again. Materialize it only when repeated access is required.

Compare separate arguments
When more than one positional value is passed, max() compares those arguments directly. Passing a list as one argument is different: it asks for the largest item inside that list.
values = [4, 7, 2]
from_iterable = max(values)
from_arguments = max(4, 7, 2)
print(from_iterable)
print(from_arguments)
Use the form that matches the data you have. Avoid unpacking an unknown or empty sequence into max() without handling the empty case.
Use key to select records
For dictionaries or objects, pass a key function that returns the comparison value. The result is the original record, not the key value. This is useful when the caller needs the complete item associated with the maximum score.
records = [
{"name": "Alice", "score": 88},
{"name": "Bob", "score": 95},
{"name": "Carol", "score": 91},
]
winner = max(records, key=lambda record: record["score"])
print(winner)
The key function should support every record or validate missing fields before calling max(). A missing key may raise KeyError, which can be preferable to silently assigning a default that changes the ranking.

Handle empty iterables with default
An empty iterable has no largest value. Pass default when emptiness is an expected state and the caller has a meaningful fallback. The default is returned without being passed through the key function.
values = []
largest = max(values, default=None)
if largest is None:
print("no values")
else:
print(largest)
Choose a sentinel that cannot be confused with a real value, or return a result object that distinguishes “missing” from a valid maximum of zero or an empty string.

Use key for strings
By default, strings compare lexicographically. A key can make the comparison case-insensitive or based on length. The returned value is still the original string.
words = ["pear", "Watermelon", "fig"]
longest = max(words, key=len)
alphabetical = max(words, key=str.casefold)
print(longest)
print(alphabetical)
For ties, max() returns the first maximum encountered. Add a tuple key such as (score, tie_breaker) when a deterministic secondary rule is required.
Compare custom values safely
Values must be comparable under the operation. Mixing numbers and strings usually raises TypeError. Define a key that maps all values to one comparable domain only when that conversion reflects the application's meaning.
values = ["10", "2", "30"]
largest_numeric_text = max(values, key=int)
print(largest_numeric_text)
Do not convert arbitrary mixed data to strings merely to force an ordering. That produces a technical result without a defensible business meaning.

Common mistakes
- Confusing
max(values)withmax(*values). - Forgetting
defaultfor an expected empty iterable. - Returning a score when the caller needs the original record.
- Assuming ties are resolved by a rule other than first encountered.
- Comparing mixed incompatible types.
The practical workflow is to identify the input shape, define the comparison key, decide what an empty collection means, and add a tie-breaker when the result must be deterministic. max() is small, but its iterable, key, and default contracts make it a flexible selection tool.
Keep key functions pure and comparable
A key function should normally return a value that can be compared consistently for every item. Avoid changing external state inside it because max may call the function once per item and the result should not depend on evaluation side effects.
When records can be missing a field, validate them before selection or return a deliberate sentinel key. Hiding missing data by converting it to an empty string or zero can cause an invalid record to win or lose silently.
For deterministic results, use a tuple key with the primary value and a documented secondary value. This is clearer than relying on the input order when data may arrive from a database, set, or network response.
When a maximum is used to select a resource or winner, make the tie and empty-input policy part of the function documentation. A stable selection policy is easier to audit than a result that depends on incidental input order.
Test max() with an ordinary nonempty input, ties, an empty input, and an item whose key is missing. These cases establish the selection and fallback policy more clearly than testing only a list of distinct numbers.
Use a key that returns the original comparison type rather than formatting values for display first. Presentation strings can sort differently from numeric or date values, and formatting should remain separate from selection logic.
Selection and formatting are separate concerns: first choose the record, then format its fields for the user.
For opposite and index-based selections, compare Python min() with finding a list’s maximum index. Read python min and python list max index for the related workflow.
Frequently Asked Questions
Frequently Asked Questions
How do I use max() in Python?
Call max(values) for an iterable or max(left, right) for separate arguments; the result is the largest comparable value.
How do I find the record with the highest score?
Pass key=lambda record: record[‘score’]; max() returns the original record, not only the score.
What happens when max() receives an empty iterable?
It raises ValueError unless you pass a meaningful default value.
How does max() handle ties?
It returns the first maximum encountered unless the key includes a secondary tie-breaking value.
HI, How to use max function in a real time data.
You might need to use max() every time the data updates. For this, you can store a temporary data and compare the new data everytime with temp data. If its different then use max() and update the temp data to current data.
Regards,
Pratik