Skip to content
Advertisement

why sorted() in python didn’t accept positional arguments?

a=[1,2,3,4]
def func(x):
   return x**x

b=sorted(a,func)

this line always gives a error->

TypeError: sorted expected 1 argument, got 2

in fact the syntax of sorted is sorted(iterable,key,reverse), in which key and reverse are optional, so according to this, second parameter i pass must go with key.

and when i def my own func

def func2(x,y=4,z=10):
    print(x,y,z)
func2(100,200)--->output-->>100 200 10

here 200 automatically passed as y argument for func2. How does this work?

Advertisement

Answer

In addition to @user4815162342’s answer,
From the documentation,

sorted(iterable, *, key=None, reverse=False)

Notice the * between iterable and key parameter. That is the python syntax for specifying that
every parameter after * must be specified as keyword arguments.

So your custom function should be defined as the following to apply the similar implementation:

def func2(x, *, y=4, z=10):
    print(x, y, z)

func2(100, 200)

TypeError: func2() takes 1 positional argument but 2 were given

User contributions licensed under: CC BY-SA
9 People found this is helpful
Advertisement