1,@property装饰器
'''
@property装饰器
作用:将方法变成属性调用
注意事项:
1,属性名与方法名一定要区分开,不然会进入死循环(self._age,def age())
2,实例化的对象使用属性时,不是调用属性(man._age),而是用的方法名(man.age)
3,@property其实就是实现了getter功能; @xxx.setter实现的是setter功能;还有一个 @xxx.deleter实现删除功能
4,定义方法的时候 @property必须在 @xxx.setter之前,且二者修饰的方法名相同(age())
5,如果只实现了 @property(而没有实现@xxx.setter),那么该属性为 只读属性
'''
class Man(object):
def __init__(self, gender = None, age = None, job = None):
self.gender = gender
self._age = age
self.job = job
@property
def age(self):
return self._age
@age.setter
def age(self,value):
if isinstance(value,int):
self._age = value
else:
raise ValueError('int type need')
if __name__ == '__main__':
man = Man()
man.age = 18 # 注意这里使用的时.age,不是._age
print(f'年龄:{man.age}')
2,装饰器
import time
def display_time(func):
def wraper(*args): # func 如果带参数的话,就带*args
time1 = time.time()
result = func(*args)
time2 = time.time()
print('time = ', time2-time1)
return result # func有返回值,就有return,没有返回值就不需要
return wraper
def is_prime(num):
if num < 2:
return False
elif num == 2:
return True
else:
for i in range(2,num):
if num % i == 0:
return False
return True
@display_time
def count_prime_nums(maxnum):
count = 0
for i in range(2, maxnum):
if is_prime(i):
print(' i = ', i)
count = count + 1
return count
c = count_prime_nums(10000)
print(c)