全网整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:400-708-3566

Python函数式编程

主要内容

1.函数基本语法及特性
2.参数与局部变
3.返回值 4.递归
5.名函数 6.函数式编程介绍
7.阶函数 8.内置函数

函数基本语法及特性

定义

数学函数定义:一般的,在一个变化过程中,如果有两个变量x和y,并且对于x的每一 个确定的值,y都有唯一确定的值与其对应,那么我们就把x称为自变量,把y称为因变 量,y是x的函数。自变量x的取值范围叫做这个函数的定义域。

但编程中的「函数」概念,与数学中的函数是有很 同的 函数是逻辑结构化和过程化的一种编程方法

函数的优点

减少重复代码
使程序变的可扩展
使程序变得易维护

函数与过程

定义函数
def fun1(): #函数名称
"The function decription" print("in the func1") return 0 #返回值

定义过程

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()

返回什么样的变量值
return 个数没有固定,return的类型没有固定。 例如:

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
in the test2
in the test3
in the test4
None
0
(1, 'hello', ['alex', 'wupeiqi'], {'name': 'alex'})
<function test2 at 0x102439488>
返回值数=0:返回None 没有return
返回值数=1:返回object return一个值,python 基本所有的数据类型都是对象。
返回值数>1:返回tuple, return多个值。
返回可以返回函数:return test2会将test2的内存地址返回。
为什么要有返回值?
想要整个函数执行的结果。 可能对执行结果进行相关操作。 比如登陆,返回true 接下来就可以进行其他操作。 如果是false 则不给操作。

函数参数

形参和实参定义

形参
形式参数,不是实际存在,是虚拟变量。在定义函数和函数体的时候使用形参,目的是在函数调用时接收实参(形参个数,类型应与实参一一对应)。

变量只有在被调时才分配内存单元

实参
实际参数,调用函数时传给函数的参数,可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以 把这些值传送给形参。因此应预先用赋值,输入 等办法使参数获得确定值。

区别
形参是虚拟的,不占用内存空间.形参变量只有在被调用时才分配内存单元,,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调函数后,则不能再使该形参变量。

实参是一个变量,占用内存空间,数据传送单向,实参传给形参,不能形参传给实参。

def calc(x,y): #x,y为形参
  res = x**y
  return res
c = calc(a,b) #a,b为实参
print(c)
def test(x,y): #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):
    print args
可变参数的名字前面有个 * 号,我们可以传入0个、1个或多个参数给可变参数: Python解释器会把传入的一组参数组装成一个tuple传递给可变参数,因此,在函数内部,直接把变量 args 看成一个 tuple 就好了。

定义可变参数的目的也是为了简化调用。假设我们要计算任意个数的平均值,就可以定义一个可变参数:

def average(*args):
    ...
这样,在调用的时候,可以这样写:

>>> average()
0
>>> average(1, 2)
1.5
>>> average(1, 2, 2, 3, 4)
2.4

位置参数和关键字

位置参数调用:实参与形参位置一一对应; 关键参数调用:位置无需固定。

正常情况下,给函数传参数要按顺序,如果不按顺序就可以用关键参数调用,只需指定参数名即可,但关键参数必须放在位置参数之后。

def test5(u,v,w):
  print(u)
  print(v)
  print(w)
test5(3,w=2,v=6)

函数调用

Python内置了很多有用的函数,我们可以直接调用。

要调用一个函数,需要知道函数的名称和参数,比如求绝对值的函数 abs,它接收一个参数。

调用 abs 函数:

>>> abs(-21)
21
调用函数的时候,如果传入的参数数量不对,会报TypeError的错误,并且Python会明确地告诉你:abs()有且仅有1个参数,但给出了两个:

>>> abs(21,8)
Traceback (most recent call last):
  File "/Users/cathy/PycharmProjects/p51cto/day3/func_test3.py", line 67, in <module>
    abs(21,8)
TypeError: abs() takes exactly one argument (2 given)
如果传入的参数数量是对的,但参数类型不能被函数所接受,也会报TypeError的错误,并且给出错误信息:str是错误的参数类型:

>>> abs('a')
Traceback (most recent call last):
  File "/Users/cathy/PycharmProjects/p51cto/day3/func_test3.py", line 69, in <module>
    abs('a')
TypeError: bad operand type for abs(): 'str'

递归函数

在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。

举个例子,我们来计算阶乘 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./article/68314.htm


# python函数式编程  # python  # 函数式编程  # 浅谈Python 函数式编程  # Python函数式编程实例详解  # Python函数式编程指南:对生成器全面讲解  # python函数式编程学习之yield表达式形式详解  # Python函数式编程指南(四):生成器详解  # Python函数式编程指南(三):迭代器详解  # Python函数式编程指南(二):从函数开始  # Python函数式编程指南(一):函数式编程概述  # 利用Fn.py库在Python中进行函数式编程  # Python装饰器的函数式编程详解  # 实例讲解python函数式编程  # 浅析python函数式编程  # 递归  # 返回值  # 会报  # 就可以  # 一个函数  # 多个  # 我们可以  # 时才  # 过程中  # 定义域  # 都是  # 是一个  # 就会  # 是在  # 都有  # 是一种  # 但是在  # 放在  # 有个  # 出了 


相关文章: 极客网站有哪些,DoNews、36氪、爱范儿、虎嗅、雷锋网、极客公园这些互联网媒体网站有什么差异?  广州建站公司哪家好?十大优质服务商推荐  网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?  唐山网站制作公司有哪些,唐山找工作哪个网站最靠谱?  电商网站制作价格怎么算,网上拍卖流程以及规则?  微网站制作教程,不会写代码,不会编程,怎么样建自己的网站?  如何在阿里云完成域名注册与建站?  如何在Windows虚拟主机上快速搭建网站?  公司网站的制作公司,企业网站制作基本流程有哪些?  c++怎么编写动态链接库dll_c++ __declspec(dllexport)导出与调用【方法】  建站之星后台管理:高效配置与模板优化提升用户体验  高性能网站服务器配置指南:安全稳定与高效建站核心方案  如何自定义建站之星模板颜色并下载新样式?  网站制作公司哪里好做,成都网站制作公司哪家做得比较好,更正规?  香港服务器建站指南:外贸独立站搭建与跨境电商配置流程  浅谈Javascript中的Label语句  如何快速建站并高效导出源代码?  专业公司网站制作公司,用什么语言做企业网站比较好?  已有域名和空间,如何快速搭建网站?  江苏网站制作公司有哪些,江苏书法考级官方网站?  如何挑选优质建站一级代理提升网站排名?  如何解决ASP生成WAP建站中文乱码问题?  C++用Dijkstra(迪杰斯特拉)算法求最短路径  相亲简历制作网站推荐大全,新相亲大会主持人小萍萍资料?  如何快速搭建安全的FTP站点?  制作网站怎么制作,*游戏网站怎么搭建?  微网站制作教程,我微信里的网站怎么才能复制到浏览器里?  广州美橙建站如何快速搭建多端合一网站?  Android滚轮选择时间控件使用详解  香港网站服务器数量如何影响SEO优化效果?  如何通过虚拟主机空间快速建站?  网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?  北京营销型网站制作公司,可以用python做一个营销推广网站吗?  如何选择美橙互联多站合一建站方案?  网站制作话术技巧,网站推广做的好怎么话术?  济南网站制作的价格,历城一职专官方网站?  专业型网站制作公司有哪些,我设计专业的,谁给推荐几个设计师兼职类的网站?  活动邀请函制作网站有哪些,活动邀请函文案?  全景视频制作网站有哪些,全景图怎么做成网页?  学校为何禁止电信移动建设网站?  实惠建站价格推荐:2025年高性价比自助建站套餐解析  如何使用Golang table-driven基准测试_多组数据测量函数效率  无锡营销型网站制作公司,无锡网选车牌流程?  建站为何优先选择香港服务器?  如何在云主机快速搭建网站站点?  北京网页设计制作网站有哪些,继续教育自动播放怎么设置?  如何通过PHP快速构建高效问答网站功能?  北京的网站制作公司有哪些,哪个视频网站最好?  c# 在高并发下使用反射发射(Reflection.Emit)的性能  如何快速配置高效服务器建站软件? 

您的项目需求

*请认真填写需求信息,我们会在24小时内与您取得联系。