Python中函数定义
Python中函数的定义形式:
1 | def func_name(parameter1, parameter2, ...): |
例子:
1 | def print_hello(personname): |
Python中位置参数与关键字参数
我的理解是,位置参数与关键字参数都是指实参的传递形式,并非函数定义中的形参的形式哦。
假设函数定义如下:
1 | def foo(familyname, givenname): #调用foo函数时,参数的顺序是由严格顺序的 |
Python中默认参数
定义函数时可以定义默认参数,形式如下:
1 | def foo(familyname='wang', givenname='hao'): |
备注:对于默认形参,在调用函数时,可以不传递实参。
Python中可变参数
(1)函数定义可变参数
形式1:
1 | def foo(*params): #params在函数体内的类型是元组 |
形式2:
1 | def foo(**params): #params在函数体内的形式是字典 |
举一个普通参数,形式1(位置参数)和形式2(关键字参数)联合一起的复杂的例子,如下所示:
1 | def print_params(x, y, z=3, *pospar, **keypar): |
上述程序输出结果为:
1 2 3
(5, 6, 7)
{'foo': 1, 'bar': 2}
我们通常用这两种可变参数来使函数收集参数,所有我们经常会见到一种函数的定义:
1 | def func(fargs, *args, **kwargs) #其中fargs是普通参数,*args和**kwargs用来收集不定量的形参 |
实参两种特殊传递形式
(1)以元组作为实参
1 | def foo(familyname, givenname): |
(2)以字典作为实参
1 | def foo(familyname, givenname): |
在函数体内修改参数内容会影响到函数外的对象的问题
如果数字、字符串或元组,本身就是不可变的,自然也不会影响到函数体外的对象
如果是列表或字典,那么函数内修改参数内容,就会影响到函数体外的对象。
备注:这里的修改参数是修改参数对象内部的值,不是赋值哦。即var[1] = 'hello'
和var = ['hello', 'world']
区别。即使是列表,在函数体内对参数重新赋值了,不会影响到函数体外的对象哦。注意和c++的比较。
Python函数的嵌套
Python语言允许在定义函数的时候,其函数体内又包含另外一个函数的完整定义,这就是我们通常所说的嵌套定义。
实例1:
1 | def foo(): #定义函数foo(), |
实例2:
1 | def bar(m): |
实例2首先定义函数bar()
,然后再次定义foo()
函数,此时bar()
和foo()
完全独立的两个函数,再次foo()
函数内调用bar()
;
其实实例1和实例2中的嵌套作用是一样只是两种不同的表现形式。
Python匿名函数
在Python中,关键字lambda是用来创建匿名函数的,其语法格式为:
lambda [arg1[, arg2, ... argN]]: expression
使用举例:
1 | #法一 |