Python函数式编程
发布时间 - 2026-01-11 02:25:31 点击率:次主要内容

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函数式编程
# 递归
# 返回值
# 会报
# 就可以
# 一个函数
# 多个
# 我们可以
# 时才
# 过程中
# 定义域
# 都是
# 是一个
# 就会
# 是在
# 都有
# 是一种
# 但是在
# 放在
# 有个
# 出了
相关栏目:
【
网站优化151355 】
【
网络推广146373 】
【
网络技术251813 】
【
AI营销90571 】
相关推荐:
Laravel API路由如何设计_Laravel构建RESTful API的路由最佳实践
标准网站视频模板制作软件,现在有哪个网站的视频编辑素材最齐全的,背景音乐、音效等?
如何在阿里云虚拟主机上快速搭建个人网站?
百度输入法全感官ai怎么关 百度输入法全感官皮肤关闭
Linux网络带宽限制_tc配置实践解析【教程】
Laravel怎么使用Markdown渲染文档_Laravel将Markdown内容转HTML页面展示【实战】
Laravel如何处理JSON字段_Eloquent原生JSON字段类型操作教程
瓜子二手车官方网站在线入口 瓜子二手车网页版官网通道入口
Midjourney怎样加参数调细节_Midjourney参数调整技巧【指南】
Linux后台任务运行方法_nohup与&使用技巧【技巧】
JavaScript如何实现音频处理_Web Audio API如何工作?
Laravel如何使用Livewire构建动态组件?(入门代码)
电商网站制作价格怎么算,网上拍卖流程以及规则?
高防服务器如何保障网站安全无虞?
如何快速搭建高效香港服务器网站?
哪家制作企业网站好,开办像阿里巴巴那样的网络公司和网站要怎么做?
JavaScript实现Fly Bird小游戏
javascript中闭包概念与用法深入理解
Edge浏览器怎么启用睡眠标签页_节省电脑内存占用优化技巧
网站制作软件免费下载安装,有哪些免费下载的软件网站?
动图在线制作网站有哪些,滑动动图图集怎么做?
如何彻底卸载建站之星软件?
Python制作简易注册登录系统
装修招标网站设计制作流程,装修招标流程?
怎么用AI帮你设计一套个性化的手机App图标?
如何正确下载安装西数主机建站助手?
Laravel怎么调用外部API_Laravel Http Client客户端使用
js代码实现下拉菜单【推荐】
Firefox Developer Edition开发者版本入口
Win11关机界面怎么改_Win11自定义关机画面设置【工具】
Laravel如何使用Passport实现OAuth2?(完整配置步骤)
JS去除重复并统计数量的实现方法
Laravel数据库迁移怎么用_Laravel Migration管理数据库结构的正确姿势
js实现获取鼠标当前的位置
如何在IIS管理器中快速创建并配置网站?
网页制作模板网站推荐,网页设计海报之类的素材哪里好?
英语简历制作免费网站推荐,如何将简历翻译成英文?
香港服务器网站测试全流程:性能评估、SEO加载与移动适配优化
如何在IIS7上新建站点并设置安全权限?
Laravel事件和监听器如何实现_Laravel Events & Listeners解耦应用的实战教程
Laravel如何实现图片防盗链功能_Laravel中间件验证Referer来源请求【方案】
Java解压缩zip - 解压缩多个文件或文件夹实例
如何在阿里云部署织梦网站?
胶州企业网站制作公司,青岛石头网络科技有限公司怎么样?
Laravel怎么实现搜索功能_Laravel使用Eloquent实现模糊查询与多条件搜索【实例】
如何基于云服务器快速搭建个人网站?
Win11怎么设置默认图片查看器_Windows11照片应用关联设置
厦门模型网站设计制作公司,厦门航空飞机模型掉色怎么办?
Android okhttputils现在进度显示实例代码
Laravel如何实现事件和监听器?(Event & Listener实战)

