python高阶函数,python常用函数大全

  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的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: