函数对象模块
定义函数
def MyFirstFunction():
print(‘第一个函数‘)
······
调用函数
MyFirstFunction()
加入参数
def MySecondFunction(name):
print(name + ‘是谁‘)
调用含参函数
MySencondFunction(‘某某某‘)
MySecondFunction(name=‘某某某‘)
形参和实参:name是形参,传进来的具体参数才是实参
给函数写说明文档用#注释
查看注释文档
函数._doc_
help(函数)
增加默认参数
def MySecondFunction(name=‘abc‘)
收集参数
def test(*params)
print(len(params), params[1])
输入test(1,‘abc‘,3,45)
输出 4 ‘abc‘
收集参数加其他参数
def test(*params, num=6)//最好加上默认值
print(len(params), params[1], num)
输入test(1, ‘abc‘, 3, 45, num=9)//必须加num=,否则报错
输出 4 ‘abc‘ 9
函数与过程
python都是函数,都会有返回值
def hello():
print(‘Hello!‘)
temp = hello输出为Hello!但是temp=None
没有return值的返回都是None
返回值
def back1():
return [1, ‘abc‘, 3.14]//返回数组
def back2():
return 1, ‘abc‘, 3.14//返回元组
局部变量和全局变量
def sum(a, b):
c = a + b
return c//c为局部变量,外部无法直接调用c
函数可以读取调用全局变量
如果在函数内修改全局变量,只对函数内有效,尽量避免
可以在函数中用 globe c将局部变量设为全局变量
函数的内嵌
def fun1():
print(‘abc‘)
def fun2()://内嵌函数定义在fun1内部定义
print(‘def‘)
fun2()//内嵌函数调用只能在fun1该函数内部使用
函数的闭包
def FunX(x):
def FunY(y):
return x*y
return FunY
调用
i = FunX(8)
i(5)结果为40
或者
FunX(8)(5)
使用闭包时注意内部和全局变量的关系
def Fun1():
x = 5
def Fun2():
x*=x
return x
return Fun2()//函数错误,x在Fun2中被修改
解决办法
def Fun1():
x = 5
def Fun2():
nonlocal x//设置x为非局部变量
x*=x
return x
return Fun2()
匿名函数(lambda)
精简且不需要定义命名函数名,简化可读性
g = lambda x : 2 * x + 1
就可直接调用g(5)
g = lambda x, y : x + y
直接调用g(3, 4)
两个厉害的bif
filter(Function or None, iterable)
过滤器,去掉iterable中非ture的部分
list(filter(None,[1, 0, Ture, False]))结果为 [1, Ture]
例如取奇数
def odd(x)
return x % 2
temp = range(10)
show = filter(odd, temp)
list(show)结果为[1, 3, 5, 7, 9]
简化list(filter(lambda x : x % 2, range(10)))
map(Function, iterable)
将iterable的值分别带入function函数中,组成数组输出
list(map(lambda x : x*2, range(10)))结果为[0, 2, 4, 6, 8, 10, 12, 14, 16, 18]
原文地址:/jdzhang1995/p/10234799.html