def test(num):
print(“在函数内部%d对应的地址是%d” % (num, id(num)))
result = “hello”
print(“函数要返回的内存地址是%d” % id(result))
return num
a = 10
print(“a变量的数据存储地址是%d” % id(a))
r = test(a)
print("%s的内存地址是 %d" % (r, id®))
魔方方法
迭代器菲波那数列
class Fib:
def init(self):
self.a = 0
self.b = 1
self.count = 0
def __iter__(self):
return self
def __next__(self):
self.a, self.b = self.b, self.a + self.b
f = Fib()
c = 0
for i in f:
c += 1
if c > 12:
break
print(i)
*******************************************************
# 邮箱类
class Email:
# 属性
password = ‘’
# 设置用户名是否允许删除
isdelname = False # True 能删除 False不能
# 方法
pass
# 设置初始化方法,添加描述符使用的变量 var
def __init__(self):
self.var = '小强'
# 获取操作的方法 ___get__
def fget(self):
# 返回值前处理数据
result = self.var[0] + '*' + self.var[-1]
return result
# 设置操作的方法 __set__
def fset(self, value):
# 设置值(本例没有做其他处理)
self.var = value
# 删除操作的方法__delete__
def fdelete(self):
# 判断是否能删除用户名
if self.isdelname == True:
del self.var
# 将成员属性交给描述符操作
username = property(fget, fset, fdelete) # 注意:三个变量的顺序是固定的
# 以下是测试
实例化对象
e = Email()
获取属性
print(e.username)
设置属性
e.username = ‘打不死的小强’
print(e.username)
删除属性
del e.username
print(e.username)
修饰器
def hello(fn):
def wrapper():
print(“hello, %s” % fn.name)
fn()
print(“goodby, %s” % fn.name)
return wrapper
@hello
def foo():
print(“i am foo”)
foo()
修饰器
def sit(dog):
def roller():
print(" is now sitting,%s" % dog.name)
dog()
print(“is now roller,%s” % dog.name)
return roller
@sit
def dog_dectorater():
print(“your is dog”)
dog_dectorater()