python的函数和方法_Python 函数与方法

webchat.jpg

定义

在Python中,函数是一等对象。函数通常出现在模块的顶级作用域中。

满足如下条件的程序,可以称为一等对象。

在运行时创建

能赋值为变量或者作为数据结构中的元素

能作为参数传递给函数

能作为函数的返回值

方法和函数的定义类似,方法出现在类的作用域内。

参数

Python 唯一支持的参数传递模式是共享传参。共享传参是指函数的各个形式参数获得实参中各个引用的副本。

定义函数时,可以指定两种类型的参数:位置参数和关键字参数。

其中,位置参数可以是一个值,也可以是多个值组成的可迭代对象;关键字参数是由键值对组成的可迭代对象。

在调用函数时,使用*和**展开参数,映射到单个参数。

在传递位置参数时,要注意参数的顺序;关键字参数则不需要。

如果函数的某些参数需要强制使用关键字参数传递时,可以将强制关键字参数放到某个带*位置参数或者单个*后面。

默认参数

默认参数在函数定义的时候进行一次赋值操作。在代码执行一次的过程中,无论该函数被调用多少次,默认参数不会发生变化。

注意,不要将可变对象作为默认参数的值。如果多次调用该函数,默认值会发生变化。

返回值

在Python中,函数的返回值默认为None。

如果需要返回一个或多个值,使用return显示返回。

闭包

闭包是指延伸了作用域的函数,其中包含函数定义体中引用、但是不在定义体中定义的非全局变量。

闭包会保留定义函数时存在的自由变量的绑定,这样调用函数时,虽然定义作用域不可用了,但是仍能使用这些绑定。

nonlocal关键字

nonlocal关键字的作用就是将变量标记为自由变量,即使在函数中为变量赋予新值,也会变成自由变量。

高阶函数和匿名函数

接受函数作为参数,或者返回函数作为参数的函数为高阶函数。常见的高阶函数包括sorted, map, reduce, filter.

使用lambda关键字创建匿名函数。

在lambda函数中,只能使用纯表达式,不能进行赋值。

支持函数式编程的标准库

operator库

该标准库将函数分为四类:对象比较、逻辑操作、数学操作、序列操作和抽象类型测试。

methodcaller函数返回一个可调用对象。methodcaller还可以冻结某些参数。

itemgetter函数,使用操作符的__getitem__()方法获取元素,将获取元素构成的元组返回。

attrgetter函数,创建的函数根据名称提取对象的属性,如果把多个属性名传给attrgetter, 它也会返回提取的值构成的元组。

functools.partial冻结参数

partial用于部分引用一个函数。部分应用是指,基于一个函数创建一个新的可调用对象,把原函数的某些参数固定。

partialmethod函数和partial的作用相同,它用于处理方法。

函数注解

函数作为对象,有很多属性,如__dict__, __annotations__, __call__, __defaults__等。

函数注解,用于为函数定义中的参数和返回值附加元组数据。注解不会做任何处理,只存储在函数的__annotations__属性中。

inspect模块

inspect模块用于获取函数的签名以及参数。

方法

静态方法

使用@staticmethod装饰的方法为静态方法。其实,静态方法就是普通的函数,只是碰巧在类的定义体中,而不是模块层定义。

类方法

类方法用@classmethod装饰器来装饰,classmethod装饰器定义操作类,而不是操作实例的方法。

类方法的第一个参数为cls(约定俗称),是类本身,而不是实例(self).

classmethod最常见的用途是定义备选构造方法。

参考

Fluent Python

Python Cookbook

Python 标准库

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值