传递元组
函数可以返回元组来实现传递多个数值
示例如下:
>>> def get_error_details():
... return (2, 'details')
...
>>> errnum, errstr = get_error_details()
>>> errnum
2
>>> errstr
'details'
其中接收参数的两个变量errnum, errstr可以视为一个含有两个变量的元组
据此,在 Python 中交换两个变量的最快方法是:
>>> a , b = 5, 8
>>> a, b
(5, 8)
>>> a, b = b, a
>>> a, b
(8, 5)
特殊方法
可以通过在类中定义特殊方法来模拟一些内置行为(类似运算符重载)
常用的特殊函数如下:
- __init__(self, …)
- 这一方法在新创建的对象被返回准备使用时被调用。
- __del__(self)
- 这一方法在对象被删除之前调用(它的使用时机不可预测,所以避免使用它)
- __str__(self)
- 当我们使用 print 函数时,或 str() 被使用时就会被调用。
- __lt__(self, other)
- 当小于运算符(<)被使用时被调用。类似地,使用其它所有运算符(+、> 等等)时都会有特殊方法被调用。
- __getitem__(self, key)
- 使用 x[key] 索引操作时会被调用。
- __len__(self)
- 当针对序列对象使用内置 len() 函数时会被调用
单语句块
python中通过缩进来区分语句块,如果一个语句块只有一个语句,则可以在同一行使用,例如:
flag = True
if flag: print('Yes')
但是不推荐此种做法,原因是如果不小心缩进,可能造成错误
Lambda 表达式
lambda表达式用来创建一个函数对象,相当于一个匿名的简单函数
lambda函数结构简单,只限于表达式作为函数体,限制在一行以内
形式如下:
lambda 参数列表:表达式
可以参考:关于Python中的lambda,这可能是你见过的最完整的讲解
可以将lambda函数赋值给一个变量,通过这个变量间接调用该lambda函数。
也可以将lambda函数赋值给一个函数, 可以覆盖掉原来的函数内容
列表推导
列表推导用于从一份现有的列表中得到一份新列表。通过for循环来筛选列表中符合要求的元素组成新列表。示例如下:
listone = [2, 3, 4]
listtwo = [2*i for i in listone if i > 2]
print(listtwo)
在函数中接收元组与字典
可以分别使用 * 或 ** 作为元组或字典的前缀,来使它们作为一个参数为函数所接收。示例:
def powersum(power, *args):
'''Return the sum of each argument raised to the specified power.'''
total = 0
for i in args:
total += pow(i, power)
return total
>>> powersum(2, 3, 4)
25
>>> powersum(2, 10)
100
args 变量前添加了一个 * 前缀,函数的所有其它的额外参数都将传递到args 中,并作为一个元组予以储存。如果采用的是 ** 前缀,则额外的参数将被视为字典的键值—值配对。
assert 语句
assert 语句用以断言(Assert)某事是真的。用来确保某些条件一定成立,不成i则抛出错误。
装饰器
装饰器用来方便的对函数功能进行修改,本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象。它经常用于有切面需求的场景,比如:插入日志、性能测试、事务处理、缓存、权限校验等场景。装饰器是解决这类问题的绝佳设计,有了装饰器,我们就可以抽离出大量与函数功能本身无关的雷同代码并继续重用。
格式如下:
def 装饰器名称(func):
def 装饰器函数(参数列表):
函数体
#一般都与func有关
return 装饰器函数
@装饰器名称(参数列表)
调用函数