Python函数式编程
主要内容 1.函数基本语法及特性 函数基本语法及特性 定义 数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一 个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变 量,y是x的函数。自变量x的取值范围叫做这个函数的定义域。 但编程中的「函数」概念,与数学中的函数是有很 同的 函数是逻辑结构化和过程化的一种编程方法 函数的优点 减少重复代码 函数与过程 定义函数 定义过程 def fun2(): "The progress decription" print("in the func2") 函数与过程 过程就是没有返回值的函数 但是在python中,过程会隐式默认返回none,所以在python中即便是过程也可以算作函数。 def fun1(): "The function decription" print("in the func1") return 0 def fun2(): "The progress decription" print("in the func2") x=fun1() y=fun2() print("from func1 return is %s" %x) print("from func2 return is %s" %y) 结果为: in the func1 in the func2 from func1 return is 0 from func2 return is None 返回值 要想获取函数的执 结果,就可以 return语 把结果返回。 函数在执 过程中只要遇到return语 ,就会停 执 并返回结果,所以也可以 解为 return 语 代表着函数的结束,如果未在函数中指定return,那这个函数的返回值为None。 接受返回值 赋予变量,例如: def test(): print('in the test') return 0 x=test() 返回什么样的变量值 def test1(): print('in the test1') def test2(): print('in the test2') return 0 def test3(): print('in the test3') return 1,'hello',['alex','wupeiqi'],{'name':'alex'} def test4(): print('in the test4') return test2 x=test1() y=test2() z=test3() u=test4() print(x) print(y) print(z) print(u) 结果是: in the test1 函数参数 形参和实参定义 形参 变量只有在被调时才分配内存单元 实参 区别 实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。 def calc(x,y): #x,y为形参 res = x**y return res c = calc(a,b) #a,b为实参 print(c) def test(x,y为形参 print(x) print(y) x=1 #x为实参 y=2 #y为实参 test(x=x,y=y) #等号左边x,y为形参,等号右边x,y为实参,引用不分顺序,按关键字引用。 默认参数 定义函数的时候,还可以有默认参数。 函数的默认参数的作用是简化调用,你只需要把必须的参数传进去。但是在需要的时候,又可以传入额外的参数来覆盖默认参数值。 #定义一个计算 x 的N次方的函数,默认是2次方 def test6(x,n=2): s=1 while n>0: n=n-1 s=s*x print(s) return s test6(2) 默认参数只能定义在必需参数的后面. 可变参数 如果想让一个函数能接受任意个参数,我们就可以定义一个可变参数: def fn(*args): 定义可变参数的目的也是为了简化调用。假设我们要计算任意个数的平均值,就可以定义一个可变参数: def average(*args): >>> average() 位置参数和关键字 位置参数调用:实参与形参位置一一对应; 关键参数调用:位置无需固定。 正常情况下,给函数传参数要按顺序,如果不按顺序就可以用关键参数调用,只需指定参数名即可,但关键参数必须放在位置参数之后。 def test5(u,v,w): print(u) print(v) print(w) test5(3,w=2,v=6) 函数调用 Python内置了很多有用的函数,我们可以直接调用。 要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数 abs,它接收一个参数。 调用 abs 函数: >>> abs(-21) >>> abs(21,8) >>> abs('a') 递归函数 在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。 举个例子,我们来计算阶乘 n! = 1 * 2 * 3 * ... * n,用函数 fact(n)表示: def fact(n): if n==1: return 1 return n * fact(n - 1) 递归函数的优点是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。 嵌套函数 python允许在定义函数的时候,其函数体内又包含另外一个函数的完整定义。 name = "test1" def changeout(): name = "test2" def changeinner(): name = "test3" print("changeinner赋值打印",name) changeinner() # 调用内层函数 print("外层调用内层打印",name) changeout() print("调用外层打印",name) 内部函数可以访问其外部函数的作用域,但是外部函数不能访问内部函数的作用域。 def change1(name): 匿名函数 匿名函数就是不需要显式的指定函数 #这段代码 def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n:n**n print(calc(10)) 函数式编程 单说,"函数式编程"是一种"编程范式"(programming paradigm),也就是如何编写程序的方法论。 主要思想是把运算过程尽量写成一系列嵌套的函数调用。 参考页面 http://www.cnblogs.com/alex3714/articles/5740985.html http://www.imooc.com/code/3516 http://blog.csdn.net/suncherrydream/article/details/51682560 https://www.oudahe.com/p/9525/ (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |