python中参数的类型有位置参数、默认参数、可变参数、关键字参数、命名关键字参数和一些参数的组合.
位置参数:
def power(x):
    return x*x
其中x就是位置参数。

默认参数:能简化函数的调用,但需要注意几点:
1、必选参数在前,默认参数在后,否则python参数会报错
2、当函数有多个参数的时候,把变化大的参数放在前面,变化小的参数可做为默认参数
3、默认参数必须指向不变对象
比如:l=[],时候特别注意,参数虽然定义为空的list,但l的值指向上一次l的值。

def add_column(l=[]):

    l.append("end")
    return l

原因分析:python函数在定义的时候l已经计算出来了,即[],因为默认参数l也是个变量,指向变量[],每次调用该函数的时候,如果调用的时候改变了l的内容,下次调用的时候,默认参数l就改变了

------------------------------------------------------------------------------------------------------------------------
避免默认参数的改变,可做如下修改:

def add_column(l=None):
    if l is None:

        l=[]

        l.append("END")

        return l

-------------------------------------------------------------------------------------------------------------------------

可变参数:就是传入的参数不确定,可能是一个或者多个,,参数的传递可传入一个list或者dict,简化的话参数前面使用*
关键字参数允许传入0个或任意个含参数名的参数,这些参数自动组装为一个list.

def calc(*number):

    sum=0

    for n in number:
        sum=sum+n
    return sum

---------------------------------------------------------------------------------------------------------------------------

关键字参数:关键字参数允许传入0个或任意个含参数名的参数,这些参数自动组装为一个dict.
def person(name,age,**kw):
    print("name:",name,"age:",age,"others:",kw)

参数的传递过程中,如果只传递必选参数,关键字参数默认为{}


 


person("MAKE",23,city="beijing")

命名关键字参数:
参数的组合:参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

 

1、map()reduce()函数

 

map():接受两个参数,一个是函数,一个是Iterable,mapIterable传入函数,并把结果显示出来;

---延伸:Iterable迭代器:可以被netx()函数调用并不断返回值的对象,可以是listtupledict、字符,但不能为单个整数

def fn(x):
    return x*x
list(map(fn,[1,2,3,4,5]))

###[1,4,9,16,25]
 

reduce():一个函数作用在一个序列上,必须同时接受两个参数,并把结果与下一个参数重复作用,最后把结果显示出来,from functools import reduce,必须首先导入。注意,字符也算序列,可把字符转换为int

from functools import reduce
dicts1={'1':1,'2':2,'3':3,'4':4,'5':5} 

def fn(x):
    return(dicts1[x])

def list1(x):

    return reduce(lambda x,y:x*10+y,map(fn,x))

###12345

 

2、filter()函数:用于过滤序列,接受一个函数和一个序列,与map()不同的是把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定,能起到筛选作用。


3、在函数的定义中,默认参数必须指向不变对象。