python进阶语法,Python函数使用方法(高级用法)

  python进阶语法,Python函数使用方法(高级用法)

  Python支持函数式编程范式,函数还有更高级的玩法。首先,引入高阶函数的概念。所谓高阶函数,就是可以作为参数输入的函数。在python中,常用的高阶函数如下

  mapfiltersorted

  map的功能与for循环相同,它对集合中的每个元素进行操作。基本用法如下

  #自定义功能

  def add(x): return x 2

  #用户定义的函数作为map的参数传入。

  r=map(add,[1,2,3,4])

  r

  0x0086E628处的映射对象

  列表(r)

  [3, 4, 5, 6]

  大家可以看到,map是一个函数,它的第一个参数也是一个函数,所以叫高阶函数。Map调用相应的函数来处理集合中的每个元素。注意它的返回值是一个map类型的对象,需要通过list函数展开成一个列表。

  过滤器的功能是过滤,其用法如下

  #自定义函数,返回值是逻辑值

  def is_odd(x): return x % 2==0

  .

  r=滤波器(is_odd,[1,2,3,4])

  r

  0x0086E340处的过滤器对象

  列表(r)

  [2, 4]

  可以看到,过滤器已经过滤掉了返回值为真的数据。

  Sorted用于排序,其用法如下

  def extract(x): return int(x[3:])

  .

  已排序([chr1 , chr12 , chr2],key=extract)

  [chr1 , chr2 , chr12]

  对染色体名称进行排序是一个典型的使用场景。在上面的代码中,首先按照key指定的函数对列表中的每个元素进行处理,即提取chr之后的字符并转换成整数。该函数将根据转换后的整数进行排序。至于数值,默认按照从小到大的顺序排列。去掉chr字符的干扰后,我们就可以安排想要的顺序了。

  上面的代码中,自定义函数有一个共同点,就是逻辑非常简单,一行代码就搞定了。Python有一个更简单的方法来写这样的函数,叫做匿名函数,用法如下

  r=map(x:x ^ 2,[1,2,3,4])

  列表(r)

  [3, 4, 5, 6]

  已排序([chr1 , chr12 , chr2],key=lambda x : int(x[3:]))

  [chr1 , chr2 , chr12]

  顾名思义,匿名函数就是没有名字的函数。相反,它是由lambda关键字定义的,后面直接跟一个参数列表,后面跟一个冒号,再后面跟一个函数内部的操作语句。匿名函数只支持单个语句,返回值是语句处理后的值。Return不需要也不允许声明返回值。

  函数除了可以作为参数,还可以作为返回值。典型的使用场景是递归调用。示例如下

  #定义计算阶乘的函数

  定义事实(n):

  .如果n==1:返回1

  .返回n *事实(n - 1)

  .

  事实(4)

  24

  事实(3)

  6在上面的代码中,用户自定义阶乘函数的返回值就是函数本身,这样的函数称为递归函数。传统的思维方式倾向于通过循环来解决问题,而递归是高度抽象的。与循环方法相比,它的代码更加简洁。

  除了递归,还有一个经典的使用场景,即闭包。闭包是函数的嵌套,如下例所示

  def grep_file(搜索):

  .def greper(文件名):

  .如果在行中搜索,则返回[在打开的(文件名)中逐行]

  .返回greper

  上面代码定义的函数实现了linux下grep的一个简单版本,对文件中包含指定关键字的行进行过滤。形式上,这个函数分为两部分,第一部分是外设grep_file函数,第二部分是内部greper函数。当调用外部函数时,实际返回的是内部函数,调用如下

  Grep_file(awk)(result.txt )闭包是函数式编程中重要的组件结构,它将面向流程的处理序列抽象为函数间的参数传递。python中闭包的一个典型应用是decorator,它在执行函数时动态添加函数,而不改变函数的定义。例子如下

  导入功能工具

  导入时间

  导入操作系统

  #定义装饰者

  #打印函数被调用前的时间

  定义日志(函数):

  @functools.wraps(func)

  定义包装(*args,**kw):

  print(time . strftime( % Y-% M-% d % H:% M:% S ,time.localtime()))

  返回函数(*args,**kw)

  返回包装

  #通过@ syntax将装饰器绑定到run_cmd函数

  @日志

  定义run_cmd(cmd):

  操作系统(cmd)

  上面的代码定义了一个log decorator,用于打印函数被调用的时间。您可以通过@ syntax将这个装饰器绑定到任何函数。

  目标

  —如果你喜欢,分享给你的朋友—

  关注我们,解锁更多精彩内容!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

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