参数传递
单参数:
def add(x):
a=10
return a+x
[in]:x=3
add(x)
[out]:13
参数收集:
既然有很多不确定性,那么函数的参数的个数,也当然有不确定性,函数怎么解决这个问题呢?python用这样的方式解决参数个数的不确定性:
def func(x,*arg):
print(x)
result = x
print(arg)
for i in arg:
result +=i
return result
print func(1,2,3,4,5,6,7,8,9)
结果
1
(2,3,4,5,6,7,8,9)
45
从上面例子可以看出,如果输入的参数个数不确定,其它参数全部通过*arg,以元组的形式由arg收集起来。对照上面的例子不难发现:
- 值1传给参数x
- 值2,3,4,5,6,7,8,9被塞入一个tuple里面,传给arg
除了用args这种形式的参数接受多个值之外,还可以用*kargs的形式接收数值,有点不一样:
def foo(**kargs):
print kargs
foo(a=1,b=2,c=3)
[out]:{'a': 1, 'b': 2, 'c': 3}
如果用**kargs的形式收集值,会得到dict类型的数据,但是,需要在传值的时候说明“键”和“值”,因为在字典中是以键值对形式出现的。
python支持多种范型的语言,可以进行函数式编程
filter、map、reduce、lambda、yield
lambda函数使用方法:
- 在lambda后面跟变量
- 变量后面是冒号
- 冒号后面是表达式,表达式计算结果就是本函数的返回值
lambda arg1,arg2,...argN:expression using arguments
注意虽然lambda函数可以接收任意多个参数并且返回单个表达式的值,但是**lambda函数不能包含命令,包含表达式不能超过一个。不要试图向lambda函数中塞入太多东西;如果你需要更复杂的东西,应该定义一个普通函数,然后想让它多长就多长
map基本样式:
map(func,seq)
func是一个函数,seq是一个序列对象。在执行的时候,序列对象中的每个元素,按照从左到右的顺序,依次被取出来,并塞入到func那个函数里面,并将func的返回值依次存到一个list中。
编写函数的注意事项
编写函数,在开发实践中是非常被咬和常见的,一般情况,写的函数应该是:
1.尽量不要使用全局变量。
2.如果参数是可变类型数据,在函数内,不要修改它。
3.每个函数的功能和目标要单纯,不要试图一个函数做很多事情。
4.函数的代码函数尽量少。
5.函数的独立性越强越好,不要跟其他的外部东西产生关联。