vlambda博客
学习文章列表

一起了解下Python函数式编程(一)

Python也是一门支持函数式编程的语言,而函数式编程的特点为:支持非纯函数式编程、支持闭包、支持高阶函数、及有限度的支持匿名函数。
这里分为两篇梳理Python 函数式编程,这一篇介绍非纯函数式编程的相关概念及注意事项。
Python中的函数定义也很简单,如图所示:

函数定义:
  • 通过def关键字标识,入参可以无参也可以有参数,函数体内可以有返回值也可以没有返回值;

  • 入参的话,写在()内,注意一些特殊传参,比如*args,**kwargs等可变长参数,它们的区别在于*args传入元组类型,可有多个,**kwargs传入字典类型,也可有多个

  • 书写函数需要注意行的缩进,注意英文冒号:不要遗漏等;

参数传递:

不可变类型参数传递 (如数字、字符串、元组等类型),本质是按值传递。
def fun1(a): a = 5 return a
a1 = 10fun1(a1)print(a1) #10
可变类型参 数传递  ( 如列表、集合、字典 等类型 ) ,本质是引用传递。
def fun2(a): a.append(2021)
values = [True, 3.14, (28,)]fun2(values) print(values) #[True, 3.14, (28,), 2021]
注意:函数也能作为参数进行传递的,这就是高阶函数的特征,后面再详解。

变量作用域:

模块内存在两种类型的变量,即局部变量和全局变量,通常以变量是否声明在函数体内来区分局部变量和全局变量
如果需要在函数体内定义全局变量,需要加上global关键字声明。
a = 0b = 0
def fun3():    global a #注意不能这样写:global a = 1 a = 1
def fun4(): b = 1
fun3()print(a) #1
fun4()print(b) #0

函数式编程:

 这里先梳理下函数式编程的概念,下一篇再重点分析。
  • 闭包:允许返回值为函数,先思考下return fun()和return fun的区别;

  • 匿名函数:借助lambda表达式创建的函数,代码紧凑简洁,先思考下lambda怎么创建匿名函数;

  • 高阶函数:允许函数作为参数的函数,先思考下Python支持的高阶函数都有哪些?有什么特点?

    当然,面向对象里也会存在函数(准确的应该称为方法)的内容,涉及到的知识点就更多了,以后梳理面向对象时再做详解吧!