问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

如何在特定的作用域将python系统函数替换成自己的函数

发布网友 发布时间:2022-03-26 02:18

我来回答

1个回答

热心网友 时间:2022-03-26 03:47

  这篇文章主要介绍了Python函数式编程指南(一):函数式编程概述,本文讲解了什么是函数式编程概述、什么是函数式编程、为什么使用函数式编程、如何辨认函数式风格等核心知识,需要的朋友可以参考下   1pareTo(o2))   相信从这个小小的例子你也能感受到强大的生产效率:)   封装控制结构的内置模板函数   为了避开边界效应,函数式风格尽量避免使用变量,而仅仅为了控制流程而定义的循环变量和流程中产生的临时变量无疑是最需要避免的。   假如我们需要对刚才的数集进行过滤得到所有的正数,使用指令式风格的代码应该像是这样:    代码如下:   lst2 = list()   for i in range(len(lst)): #模拟经典for循环   if lst[i] > 0:   lst2.append(lst[i])   这段代码把从创建新列表、循环、取出元素、判断、添加至新列表的整个流程完整的展示了出来,俨然把解释器当成了需要手把手指导的傻瓜。然而,“过滤”这个动作是很常见的,为什么解释器不能掌握过滤的流程,而我们只需要告诉它过滤规则呢?   在Python里,过滤由一个名为filter的内置函数实现。有了这个函数,解释器就学会了如何“过滤”,而我们只需要把规则告诉它:    代码如下:   lst2 = filter(lambda n: n > 0, lst)   这个函数带来的好处不仅仅是少写了几行代码这么简单。   封装控制结构后,代码中就只需要描述功能而不是做法,这样的代码更清晰,更可读。因为避开了控制结构的干扰,第二段代码显然能让你更容易了解它的意图。   另外,因为避开了索引,使得代码中不太可能触发下标越界这种异常,除非你手动制造一个。   函数式编程语言通常封装了数个类似“过滤”这样的常见动作作为模板函数。唯一的缺点是这些函数需要少量的学习成本,但这绝对不能掩盖使用它们带来的好处。   闭包(closure)   闭包是绑定了外部作用域的变量(但不是全局变量)的函数。大部分情况下外部作用域指的是外部函数。   闭包包含了自身函数体和所需外部函数中的“变量名的引用”。引用变量名意味着绑定的是变量名,而不是变量实际指向的对象;如果给变量重新赋值,闭包中能访问到的将是新的值。   闭包使函数更加灵活和强大。即使程序运行至离开外部函数,如果闭包仍然可见,则被绑定的变量仍然有效;每次运行至外部函数,都会重新创建闭包,绑定的变量是不同的,不需要担心在旧的闭包中绑定的变量会被新的值覆盖。   回到刚才过滤数集的例子。假设过滤条件中的 0 这个边界值不再是固定的,而是由用户控制。如果没有闭包,那么代码必须修改为:    代码如下:   class greater_than_helper:   def __init__(self, minval):   self.minval = minval   def is_greater_than(self, val):   return val > self.minval   def my_filter(lst, minval):   helper = greater_than_helper(minval)   return filter(helper.is_greater_than, lst)   请注意我们现在已经为过滤功能编写了一个函数my_filter。如你所见,我们需要在别的地方(此例中是类greater_than_helper)持有另一个操作数minval。   如果支持闭包,因为闭包可以直接使用外部作用域的变量,我们就不再需要greater_than_helper了:    代码如下:   def my_filter(lst, minval):   return filter(lambda n: n > minval, lst)   可见,闭包在不影响可读性的同时也省下了不少代码量。   函数式编程语言都提供了对闭包的不同程度的支持。在Python 2.x中,闭包无法修改绑定变量的值,所有修改绑定变量的行为都被看成新建了一个同名的局部变量并将绑定变量隐藏。Python 3.x中新加入了一个关键字 nonlocal 以支持修改绑定变量。但不管支持程度如何,你始终可以访问(读取)绑定变量。   内置的不可变数据结构   为了避开边界效应,不可变的数据结构是函数式编程中不可或缺的部分。不可变的数据结构保证数据的一致性,极大地降低了排查问题的难度。   例如,Python中的元组(tuple)就是不可变的,所有对元组的操作都不能改变元组的内容,所有试图修改元组内容的操作都会产生一个异常。   函数式编程语言一般会提供数据结构的两种版本(可变和不可变),并推荐使用不可变的版本。   递归   递归是另一种取代循环的方法。递归其实是函数式编程很常见的形式,经常可以在一些算法中见到。但之所以放到最后,是因为实际上我们一般很少用到递归。如果一个递归无法被编译器或解释器优化,很容易就会产生栈溢出;另一方面复杂的递归往往让人感觉迷惑,不如循环清晰,所以众多最佳实践均指出使用循环而非递归。   这一系列短文中都不会关注递归的使用。   <第一节完>
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
打印机硒鼓安装方法及步骤 如何安装新硒鼓? 我现在很困惑该不该和女友继续发展下去 电脑上字体怎么安装方法简单易行的字体安装步骤及技巧 网页字体显示不出.怎么办? 如何添加电脑上没有的字体解决电脑字体限制增加字体选择多样性_百度知 ... 不有效字体文件 电脑字体识别不了 梦见身上煤炭黑的长辈给我钥匙的预兆 株洲最值得一去的古镇 python 程序中有多少全局作用域?有多少局部作用域 初学python,有关函数作用域问题 python for循环作用域问题 python中什么叫局部作用域 python 2.7 变量作用域的疑问 深入探究Python中变量的拷贝和作用域问题 python变量的作用域到底怎么理解怎么用呢?谢谢! python什么是闭包 闭包的作用域 PYTHON 的变量作用域与内存分配 Python 中作用域与命名空间的问题? Python 的类中到底有没有建立作用域 Python语言中作用域怎么理解? 苹果智能手机与其它品牌手机使用的实际优势在哪里? 苹果手机的优势是什么啊? 苹果手机的优点是什么? IPHONE手机有什么优点?它的好处到底在哪里? iPhone手机的优势究竟在哪里? 苹果手机比其他手机究竟好在哪里 苹果手机有什么优点?有什么缺点? 苹果公布业绩,苹果有手机有何优势? python函数实参不是的作用域问题,高手来解释下下面的输出? 没看python的基础,求教python变量的作用域问题,下面附代码,感谢! python global的作用域 python中global的作用是什么? python3.5中,无法numpy怎么解决 dra-tl00什么型号? dra-tl00可以无线充电吗? dra-tl00能不能用三网的? 联通短信中心号码怎么设置? 苹果手机里不等于符号怎么打出来? 不等于的符号怎么打?打出来 不等于号怎么打出来? 请问不等于的符号是怎么输入进去的? 不等于号怎么打出来 不等于的符号怎么打 iPhone12里不等于≠怎么打? 不等于≠怎么打 不等于的符号怎么打啊? 不等于号怎样打 我想知道键盘上不等于号怎么打出来