Object_Oriented_Programming

*args|**kwargs

argsarguments 的缩写,表示位置参数;

kwargs keyword arguments 的缩写,表示关键字参数

Python 中可变参数的两种形式

并且 *args 必须放在 **kwargs 的前面

因为位置参数在关键字参数的前面。

*args就是就是传递一个可变参数列表给函数实参,这个参数列表的数目未知,甚至长度可以为0

**kwargs则是将一个可变的关键字参数的字典传给函数实参,同样参数列表长度可以为0或为其他值。

argskwargs组合起来可以传入任意的参数,这在参数未知的情况下是很有效的,同时加强了函数的可拓展性

*:解包

装饰器【Decorator】

作用

  1. 增加代码可读性
  2. 给function加上一些功能,比如加上时间计时器
  3. 装饰器本质上是一个函数|类【利用函数闭包:函数nested函数】
  4. 减少重复操作
  5. Decorator装饰的函数(define function而不是instance)

Example

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
# 输出所有的不大于num的素数
def is_prime(num):
for item in range(1, num+1):
if item % 2 != 0:
print(item, end=' ')

>>检测is_prime函数的运行时间

import time

def is_prime(num):
t1 = time.time()
for item in range(1, num+1):
if item % 2 != 0:
print(item, end=' ')
t2 = time.time()
print('\n', 'total time:{:.4} s'.format(t2-t1))

>>增加可读性


# 增加装饰器decorator
def display_time(func):
# 如果需要装饰的func中需要添加参数,则在wrapper中添加*args,并且func同样添加
def wrapper(*args):
t1 = time.time()
func(*args)
t2 = time.time()
print('\n', 'total time:{:.4} s'.format(t2 - t1))
return wrapper


@display_time
def is_prime(num):
for item in range(1, num+1):
if item % 2 != 0:
print(item, end=' ')

is_prime(10000)
>>1~9999
total time:0.03494 s