Variable number of arguments

We’ve already seen some functions that accept a variable number of arguments like print() or zip(). Yet, we haven’t created one ourselves. How to write a function that can handle a variable number of arguments?
When printing elements, we can call the print() function with as many arguments as we want and it will print all of them:
print('Hi')                   # Hi
print('Hi', 'how', 'are', 1)  # Hi how are 1
print(1, 2, 3, 8)             # 1 2 3 8
If we take a look at the function signature of print() in the official python docs, the first argument actually captures the whole list of arguments (non-keyword) passed to it. The same holds for the zip function:
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
zip(*iterables, strict=False)
Source: https://docs.python.org/3/library/functions.html
We can define our own functions that accept a variable number of arguments with an asterisk *:
def income(*purchases):
    total = 0
    for purchase in purchases:
        total += purchase
    return total

print(income(1, 2, 3, 4, 10))  # 20
Here we can treat purchases as a list of numbers. We can access its length with len(), we can loop over the elements with a for loop, etc.

Challenge

Implement a function num_args() that would return the number of arguments passed to it.
Example calls to a function:
def num_args(*args):
    ...

print(num_args(1, 2, 3))  # 3
print(num_args())         # 0
print(num_args('Anna'))   # 1
 
Pro tip 😎: It’s also possible to turn a simple list into *args:
a = [1, 2, 3, 'hello']
print(*a)

# This is equivalent to
print(1, 2, 3, 'hello')
Now you know how to easily print lists.
 

Constraints

Time limit: 2 seconds

Memory limit: 512 MB

Output limit: 1 MB

To check your solution you need to sign in
Sign in to continue