python学习笔记——函数与函数式编程
函数与函数式编程用以解决代码的可扩展性、代码复用、保持一致性的问题。
函数是将逻辑结构化与过程化的一种方法,将有以下方面展开:
- 函数的定义(def)
函数由关键字(def)、函数名、参数(不是必须设置)、文档描述(不是必要)、函数体(即逻辑)、返回值构成,例如:
def text(x): "将参数加1返回" y = x+1 return y print(text(1)) # 调用函数,并将参数设置为1,得到结果为2
2. 函数与过程的差异
在python中,过程就是一个没有返回值的函数,见下例:
def func1(): # 定义一个函数 print('in the func1') return 0 x = func1() # 调用func1 print(x) # 结果为0 def func2(): # 定义一个过程 print('in the func2') y = func2() # 调用func2 print(y) # 结果为none,无返回值
3.return 语句即作返回值语句,也代表函数结束
4.实参与形参
需一一对应,对应时位置参数优于赋值参数,当有多个参数时赋值参数不能在位置参数之前。
例如:
def test(x, y, z): # 定义一个带三个参数的函数 pass test(1, y=2, z=6) # 1为位置参数,y=2、z=6为赋值参数 test(1, 2, 6) # 全为位置参数,相当于x=1、y=2、z=6 test(1, z=6, y=2) # 结果一样,赋值参数顺序不影响,但若有位置参数则位置参数必须在前 # ####默认参数##### def test(x, y=2): # y为默认值2,在调用函数时不必理会y的值 pass
5.参数数组
def test(*array): # 以*开头可接受多个实参(不能接受关键字参数),以元组的形式 return array print(test(1, 2, 3, 4)) # 结果为(1, 2, 3, 4) print(test(*[1, 2, 3, 4, 5])) # 另一种赋值方式,结果为(1, 2, 3, 4, 5)
# def test(x,*args) # 另一种参数定义,x可用关键字参数赋值
如要使用关键字参数赋值参数组,可使用以下方法将关键字参数转换为字典但此方法不能接受位置参数
def test2(**rwargs): print(rwargs) return test2(name='mina',age=18,sex='F') # 调用test2函数结果为{'name': 'mina', 'age': 18, 'sex': 'F'} test2(**{'name': 'mina', 'age': 18}) # 另一种赋值方式
6.局部变量与全局变量
局部变量:只在作用域内生效
全局变量:代码顶层定义,也可在局部声明全局变量使用 global 变量名 的方式。
在函数中,列表、字典、集合、类可在局部中改变全局调用
7.递归,即在函数内部调用该函数,最大递归999层
要求:1.必须要有明确的结束条件,避免死循环
2.每递归一次问题规模都应该比上次小
8.高阶函数(即一个函数可接受另一个函数)
def add(a,b,f): return f(a)+f(b) # 调用传送给形参f的函数 print(add(3, -6, abs)) # abs为python标准库中的求绝对值函数,作为参数传递给add函数,结果为
浙公网安备 33010602011771号