Python: Function with Optional Parameter, Named Parameter, Infinite Parameters

, , …,

The following is a example of defining a function.

# -*- coding: utf-8 -*-
# python

def ff(x, y):
    """ff(x, y) returns x+y."""
    return x+y

print ff(3,4)                # prints 7

A string immediately following the function def line is the function's documentation.

return is optional. If a function does not return anything, it returns None.

Unspecified Number of Positional Parameters

To define unspecified number of positional parameters, use *name as last item. Your function will receive it as a tuple.

# -*- coding: utf-8 -*-
# python

# function with unspecified number of arguments. use * before the name.
def ff(*xx):
    # xx is received as a tuple.
    print "first arg:", xx[0]
    print "total args:", len(xx)
    return xx

rr = ff(3, 4, 5)

print rr                        # (3,4,5)

print type(rr)                  # <type 'tuple'>

Named Parameters (Keyword Arguments)

A function can have Named Parameters, called Keyword Argument in Python.

Python's “keyword argument” are automatically optional. If no argument is given in a function call, a default value is used.

# -*- coding: utf-8 -*-
# python

# function with keyword parameters.

# Keyword parameters are automatically optional, with default values.
# They must come after positional parameters, if any
def ff(x, y=100, z=200):
    return "x ⇒ {}, y ⇒ {}, z ⇒ {}".format(x, y, z)

print ff(3)                     # x ⇒ 3, y ⇒ 100, z ⇒ 200

# optional parameter name can be omitted. If so, they go by order.
print ff(3, 2)                  # x ⇒ 3, y ⇒ 2, z ⇒ 200

print ff(3, 5, 6)               # x ⇒ 3, y ⇒ 5, z ⇒ 6

# keyword argument must come after positional arguments
print ff(3, y=2)                # x ⇒ 3, y ⇒ 2, z ⇒ 200

print ff(3, z=2)                # x ⇒ 3, y ⇒ 100, z ⇒ 2

# keyword arguments can be any order
print ff(3, z=8, y=9)           # x ⇒ 3, y ⇒ 9, z ⇒ 8

Unspecified Number of Unnamed Keyword Parameters

You can define a function to receive unspecified number of unnamed keyword parameters. You need to put a **name as last item in your parameter list in definition. Your function will receive it as a dictionary.

# -*- coding: utf-8 -*-
# python

# use 「**‹name›」 to receive unspecified number of keyword arguments
def ff(**ddd):
    # ddd is received as a dictionary
    return ddd

print ff( z = 8, c = 7, aa = 4, b = 3) # {'aa': 4, 'c': 7, 'z': 8, 'b': 3}

The **name can be used with normal paramaters. But it must be the last.

# -*- coding: utf-8 -*-
# python

def ff(a, b=1, c=1, **xyz):
    # xyz is a dictionary
    print "a ⇒", a
    print "b ⇒", b
    print "c ⇒", c
    print "xyz ⇒", xyz

ff(3, rabbit = 7, cat = "a", tiger = 33, c = 8)

# a ⇒ 3
# b ⇒ 1
# c ⇒ 8
# xyz ⇒ {'tiger': 33, 'rabbit': 7, 'cat': 'a'}

The positional parameters, and *tup tuple and **dict dictionary can be used together, but tuple must come first.

# -*- coding: utf-8 -*-
# python

def ff(a, *mmm, **zzz):
    # mmm is a tuple
    # zzz is a dictionary
    print "a is:", a
    print "mmm is:", mmm
    print "zzz is:", zzz

ff(3, 4, 5, 6, rabbit = 7, cat = 9, tiger = 33)

# a is: 3
# mmm is: (4, 5, 6)
# zzz is: {'tiger': 33, 'rabbit': 7, 'cat': 9}
blog comments powered by Disqus