python高阶函数,python常用函数大全
目录1.2功能模块调用2。闭包函数2.1闭包定义:2.2闭包实例2.3闭包函数2.3.1当闭包被执行时,仍然可以维持当前的运行环境。2.3.2闭包根据外部作用域的局部变量可以得到不同的结果。2.4使用封闭装置的注意事项。2.4.1闭包是不能在外部作用域中修改的局部变量。2.4.2闭包函数返回有错误的变量。2.4.3循环语句中的闭包函数
3.递归函数4。嵌套函数
1.2功能模块化以时间戳日志格式调用功能模块化
$ mkdir日志1
$ touch log1/__init__。巴拉圭
$ vim log1/timestamp.py
#!/usr/bin/env python3
导入时间
定义定时器(消息):
print(str(msg) str(time.time()))
电荷=0.02
退货费用
$ vim charge.py
#!/usr/bin/env python3
从日志1导入时间戳
print(按回车键查看时间(花费2美分)。)
print(按Q RETURN键退出。)
总计=0
虽然正确:
kbd=输入()
if kbd.lower()==q :
打印(您欠$ 字符串(总计) )
退出()
否则:
费用=时间戳。计时器(“时间是”)
总计=总费用
[root @ localhost time]$ python 3.8 charge . py
按回车键查看时间(花费2美分)。
按下Q RETURN键退出。
时间是15848年。15844 . 688888886867
时间是1584年。15884 . 688888888867
q
你欠0.04美元
[root @ localhost time]$ python 3.8 charge . py
按回车键查看时间(花费2美分)。
按下Q RETURN键退出。
时间是1584年。15884 . 688888888867
时间是15848年。15848 . 688688888867
时间是15848年。15848 . 688688888867
q
如果没有调用模块化函数方法,您将欠0.06美元
#!/usr/bin/env python3
导入时间
总计=0
定义定时器(消息):
print(str(msg) str(time.time()))
电荷=.02
退货费用
print(按回车键查看时间(花费2美分)。)
print(按Q RETURN键退出。)
虽然正确:
kbd=输入()
if kbd.lower()==q :
打印(您欠$ 字符串(总计) )
退出()
否则:
充电=计时器(“时间是”)
总计=总费用
[root @ localhost time]# python 3.8 charge 2 . py
按回车键查看时间(花费2美分)。
按下Q RETURN键退出。
时间是1584年。15884 . 688888886867
时间是1584年。15886 . 688888888886
q
你欠0.04美元
2.闭合函数
2.1闭包的定义:如果在内部函数中引用了外部作用域(而不是全局作用域)中的变量,那么内部函数就被认为是闭包。
2.2闭包实例def print_msg():
# print_msg是一个外围功能
msg= python的禅
def打印机():
# printer是一个嵌套函数。
打印(邮件)
返回打印机
another=print_msg()
# python的输出禅
另一个()另一个是闭包,本质上是函数。它由两部分组成,打印机函数和变量msg。闭包使得这些变量的值总是存储在内存中。
闭包,顾名思义,就是一个封闭的包,自由变量被包裹在其中。就像类中定义的属性值一样,自由变量的可见范围是伴随着包的。只要你能访问这个包,你就能访问这个自由变量。
2.3封闭效应
2.3.1执行关闭后,仍可保持当前运行环境。例如,如果您希望某个函数的执行结果基于该函数的上次运行结果。我用一个类似棋盘游戏的例子来说明一下。假设棋盘大小为50*50,左上角是坐标系(0,0)的原点,我需要一个接收两个参数的函数,分别是方向和步长。这个函数控制棋子的移动。棋子移动的新坐标除了方向和步长,当然必须以原坐标为基础,可以使用闭包来保持棋子的原坐标。
#!/usr/bin/python
# -编码:utf-8
原点=[0,0] #坐标系的原点
Legal_x=[0,50]# x x轴方向的合法坐标
Legal_y=[0,50]# y y轴方向的合法坐标
定义创建(位置=原点):
定义玩家(方向,步):
#这里首先要判断参数方向和步长的合法性,比如方向不能走对角线,步长不能为负数等。
#然后,需要判断新生成的X、Y坐标的合法性。这里主要想介绍一下闭包,就不详细写了。
new_x=pos[0]方向[0]*步长
new_y=pos[1]方向[1]*步长
pos[0]=new_x
pos[1]=new_y
#注意!这里不能写成pos=[new_x,new_y],原因如上。
退货位置
返回播放器
Player=create() #以原点为起点创建一个棋子玩家。
Print ([1,0],10) #在X轴正方向移动10步
Print ([0,1],20) #沿Y轴正方向移动20步
Print player([-1,0],10) #在X轴的负方向移动10步
输出是:
[10, 0]
[10, 20]
[0, 20]
2.3.2闭包根据外部作用域的局部变量可以得到不同的结果。这有点像配置函数。我们可以修改外部变量,闭包根据这个变量显示不同的功能。比如有时候我们需要分析一些文件的专用线,先把这些专用线提取出来。
def make_filter(保留):
定义过滤器(文件名):
file=open(文件名)
lines=file.readlines()
file.close()
filter _ doc=[I for I in lines if keep in I]
返回过滤器_文档
返回_过滤器
filter=make _ filter(“pass”)
filter _ result=filter( result.txt )如果我们需要获取文件 result . txt 中带有关键字 pass 的行,我们可以像这样使用示例程序。
2.4使用瓶盖时的注意事项
闭包中的2.4.1是$ cat bibao3.py,它不能修改外部作用域的局部变量。
#!/usr/bin/python
def out():
x=0
定义客栈():
x=1
打印(内部x:,x)
打印(输出x:,x)
客栈()
打印(输出x:,x)
输出()
[root @ localhost func]# python bibao 3 . py
( out x:,0)
(内部x:,1)
( out x:,0)
2.4.2闭包函数的返回变量中的def foo()错误:
a=1
定义栏():
a=a 1
返回a
return bar程序的初衷是在每次调用闭包函数时递增变量A。但是在实际使用中
c=foo()
打印c()
回溯(最近一次呼叫):
模块中文件“”的第1行
文件,第4行,在栏中
BoundLocalError:在赋值前引用了局部变量“a”。这是因为执行代码c=foo()时,python会导入所有闭包函数体bar()来分析其局部变量。python规则规定赋值语句左侧的所有变量都是局部变量,所以在闭包bar()中,变量A在赋值符号=的左侧,python认为是bar。接下来执行print c()时,当程序运行到a=a 1时,python会在bar()中的赋值语句右侧找到A的值,因为A之前已经在bar()中被归类为局部变量。如果找不到,就会报错。解决办法很简单。
def foo():
a=[1]
定义栏():
a[0]=a[0] 1
返回一个[0]
返回栏只是设置一个作为容器。这个用起来有些不舒服,所以在python3之后,a=a 1之前,用语句nonlocal a就够了,它明确指定A不是闭包的局部变量。
2.4.3循环语句中的闭包函数在程序中经常会有这样的循环语句。Python的问题是,当循环结束时,循环体中的临时变量I不会被销毁,而是继续存在于执行环境中。python的另一个现象是,python函数在执行时只在函数体中寻找变量值。
$猫比比宝2.py
#!/usr/bin/python
flist=[]
对于范围(3)中的I:
def foo(x):打印x i
flist.append
对于flist中的f:
女(2)
[root @ localhost func]# python bibao 2 . py
四
四
4可能有人觉得这段代码的执行结果应该是2,3,4。但实际结果是4,4,4。这是因为当函数被添加到flist列表时,python还没有给I赋值。只有当它被执行时,我才能知道I的值是多少。此时,第一个for循环结束后,I的值为2,所以上面代码的执行结果为4,4,4。
重写函数的定义
$ cat bibao1.py
#!/usr/bin/python
flist=[]
对于范围(3)中的I:
def foo(x,y=i): print x y
flist.append
对于flist中的f:
女(2)
[root @ localhost func]# python bibao 1 . py
2
三
四
3.递归函数#关于递归函数
1.调用它自己的函数
2.有一个结束条件。
3.与上一次递归相比,问题的规模要缩小,但所有递归函数和循环都可以解决。
4.递归效率低。
$ cat digui.py
#!/usr/bin/python
Def fat(n): #第一种方式
ret=1
对于范围(1,n ^ 1)中的I:
ret=ret*i
返回ret
打印(fat(5))
定义事实(n): #第二种方式
如果n==1:
返回1
返回n *事实(n-1)
打印(事实(5))
[root @ localhost func]# python digui . py
120
120
4.可以指定嵌套函数的函数名。函数名可以用作函数参数,也可以用作返回值$ catqiantao.py。
#!/usr/bin/python
定义f(n):
返回n*n
def foo(a,b,func):
func(a) func(b)
ret=func(a) func(b)
返回ret
print(foo(1,2,f))
[root @ localhost func]$ python qiantao . py
五
来自
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。