流畅的 Python - 4. 函数

卢植
• 阅读 1528

今天深入接触了 Python 中的函数,发现函数比我想象的要高深。

Python 中万物皆对象,这一章就介绍了函数作为对象的一些属性。首先是测试所有对象共有的属性__doc__,可以看到它是function类的实例。然后是变量赋值、作为参数传递。这些概念虽然之前也知道,但是还没怎么用过,偶尔在key关键字参数的地方使用。

之后就是高阶函数了。有接触过函数式语言,所以现在看起来还是没难度的。介绍的几个高阶函数有内置的mapfiltersorted函数,functools模块中的reduce。而mapfilterreduce函数在 Python 中有了更好的替代——列表推导和生成器表达式。

Python 中,匿名函数由lambda关键字创建,它的定义体只能使用纯表达式。

可调用对象即能被调用运算符(())应用的对象,可使用内置的callable函数检测。

当一个对象实现了__call__方法,它就是一个函数类对象,可被调用。函数还是跟普通的类有所不同,它有一些独有的属性,比如__defaults__

Python 的参数处理机制有三个比较有趣,一个是新增的仅限关键字参数,另外两个是定位参数,***展开可迭代对象映射到单个参数,其中**映射的是字典,仅限关键字参数表示只能通过关键字来指定,且只能放到*后面。可放一个*只支持仅限关键字参数。

函数的三个属性__defaults____kwdefaults____code__放置了函数对象参数的一些信息。而使用inspect模块中的signature更加方便。

函数注解「用于为函数声明中的参数和返回值附加元数据」,它存储在函数的__annotations__属性中。

最后介绍了两个包operatorfunctools,用于支持函数式编程风格。

点赞
收藏
评论区
推荐文章
Irene181 Irene181
4年前
Python 为什么没有 main 函数?为什么我不推荐写 main 函数?
毫无疑问Python中没有所谓的main入口函数,但是网上经常看到一些文章提“Python的main函数”、“建议写main函数”……有些人是知情的,他的意图可能是模仿那些正宗的main函数,但还有不少人明显是被误导了(或自己误解了),就写出来很累赘的代码。本期“Python为什么”栏目来聊聊Python为什么没有main函数
Wesley13 Wesley13
3年前
java中的类与对象(1)
    首先理解一下类和对象的关系,可以说:类是对象的抽象,对象是类的实例。类一个类中,通常上包含了属性和功能。属性通常用变量表达,功能通常上用函数表达。编写一个类class类名{//属性,用变量表达//功能,用函数表达}对象实例化对象的方法及含义:类名 对象名 new 
Wesley13 Wesley13
3年前
java成员变量的初始化
类变量(static变量,不需要实例化对象也可以引用)实例变量(非static变量,需要实例化对象)局部变量(类的成员函数中的变量)初始化方式:构造函数初始化变量声明时初始化代码块初始化java自动初始化(在构造函数执行之前执行) java保证所有变量被使用之前都是经过初始化的(声明并且定义过,被赋值
Stella981 Stella981
3年前
Python 回调和首参数绑定
函数参数的绑定和调用方式这里想讨论的问题是,如果把python的方法作为参数传递给其他对象调用,那么相应的python实例是如何绑定的?classC:defcallback(self):print('callback')@staticmeth
Wesley13 Wesley13
3年前
JS函数高级
原型与原型链所有函数都有一个特别的属性:prototype:显式原型属性所有实例对象都有一个特别的属性:__proto__:隐式原型属性显式原型与隐式原型的关系函数的prototype:定义函数时被自动赋值,值默认为{},即用为原型对象
Stella981 Stella981
3年前
JavaScript原型和原型链——构造函数
一、instanceof:判断引用类型(数组、对象、函数)的变量是由哪一个 构造函数派生出来的。(oinstanceofObject)二、原型规则和示例  1、所有的引用类型(数组、对象、函数),都具有对象特性,可以自由扩展属性(除了"null“以外)。  2、所有的引用类型(数组、对象、函数),都具有\_\_p
Stella981 Stella981
3年前
PythonStudy——魔法函数 Magic Methods
魔法函数python中以双下划线开始和结束的函数(不可自己定义)为魔法函数调用类实例化的对象的方法时自动调用魔法函数(感觉不需要显示调用的函数都叫)在自己定义的类中,可以实现之前的内置函数,比如下面比较元素sorted时用It函数(lt(self,other):判断self对象是否小于other对象;)
Stella981 Stella981
3年前
Javascript定义类(class)的三种方法
在面向对象编程中,类(class)是对象(object)的模板,定义了同一组对象(又称"实例")共有的属性和方法。Javascript语言不支持"类",但是可以用一些变通的方法,模拟出"类"。一、构造函数法这是经典方法,也是教科书必教的方法。它用构造函数模拟"类",在其内部用this关键字指代实例对象。  function
Stella981 Stella981
3年前
Python技巧之函数
函数是Python中的第一公民:函数可以作为参数传递给其他函数,可以作为其他函数的返回亦可以赋值给变量和保存在数据结构中。defmyfunc(a,b):...returnab...funcsmyfun
小万哥 小万哥
1年前
Python 函数:定义、调用、参数、递归和 Lambda 函数详解
函数是一段代码块,只有在调用时才会运行。您可以将数据(称为参数)传递给函数。函数可以返回数据作为结果。创建函数在Python中,使用def关键字定义函数:示例pythondefmyfunction():print("Hellofromafunction")
小万哥 小万哥
1年前
Python 面向对象编程:类、对象、初始化和方法详解
Python是一种面向对象的编程语言。在Python中,几乎所有东西都是对象,都具有其属性和方法。类似于对象构造函数或用于创建对象的“蓝图”的类。创建一个类要创建一个类,请使用关键字class:示例,创建一个名为MyClass的类,其中包含一个名为x的属性