1 递归
1)定义
在一个函数里再调用这个函数本身,这种魔性的使用函数的方式就叫做递归。
2)最大深度——997
递归函数如果不受到外力的阻止会一直执行下去。但是我们之前已经说过关于函数调用的问题,每一次函数调用都会产生一个属于它自己的名称空间,如果一直调用下去,就会造成名称空间占用太多内存的问题,于是python为了杜绝此类现象,强制的将递归层数控制在了997
def foo(n):
print(n)
n += 1
foo(n)
foo(1)
3)递归函数与三级菜单
menu = {
'北京': {
'海淀': {
'五道口': {
'soho': {},
'网易': {},
'google': {}
},
'中关村': {
'爱奇艺': {},
'汽车之家': {},
'youku': {},
},
'上地': {
'百度': {},
},
},
'昌平': {
'沙河': {
'老男孩': {},
'北航': {},
},
'天通苑': {},
'回龙观': {},
},
'朝阳': {},
'东城': {},
},
'上海': {
'闵行': {
"人民广场": {
'炸鸡店': {}
}
},
'闸北': {
'火车战': {
'携程': {}
}
},
'浦东': {},
},
'山东': {},
}
def threeLM(dic):
while True:
for k in dic:print(k)
key = input('input>>').strip()
if key == 'b' or key == 'q':return key
elif key in dic.keys() and dic[key]:
ret = threeLM(dic[key])
if ret == 'q': return 'q'
threeLM(menu)
2 类的实例属性和类属性
# 练习题 : 读程序,标出程序的执行过程,画出内存图解,说明答案和为什么
# 请不要想当然,执行之后检查结果然后再确认和自己的猜想是不是一致
'''
>>> class Student(object):
... name = 'Student'
...
>>> s = Student() # 创建实例s
>>> print(s.name) # 打印name属性,因为实例并没有name属性,所以会继续查找class的name属性
Student
>>> print(Student.name) # 打印类的name属性
Student
>>> s.name = 'Michael' # 给实例绑定name属性
>>> print(s.name) # 由于实例属性优先级比类属性高,因此,它会屏蔽掉类的name属性
Michael
>>> print(Student.name) # 但是类属性并未消失,用Student.name仍然可以访问
Student
>>> del s.name # 如果删除实例的name属性
>>> print(s.name) # 再次调用s.name,由于实例的name属性没有找到,类的name属性就显示出来了
Student
'''
# (1)
#
# class A:
# Country = '中国' # 静态变量/静态属性 存储在类的命名空间里的
# def __init__(self,name,age,country): # 绑定方法 存储在类的命名空间里的
# self.name = name
# self.age = age
# def func1(self):
# print(self)
#
# a = A('alex',83,'印度')
# b = A('wusir',74,'泰国')
# A.Country = '英国'
# a.Country = '日本'
# print(a.Country)
# print(b.Country)
# print(A.Country)
# (2)
#
# class A:
# Country = ['中国'] # 静态变量/静态属性 存储在类的命名空间里的
# def __init__(self,name,age,country): # 绑定方法 存储在类的命名空间里的
# self.name = name
# self.age = age
# def func1(self):
# print(self)
#
# a = A('alex',83,'印度')
# b = A('wusir',74,'泰国')
# a.Country[0] = '日本'
# print(a.Country)
# print(b.Country)
# print(A.Country)
# (3)
#
# class A:
# Country = '中国' # 静态变量/静态属性 存储在类的命名空间里的
# def __init__(self,name,age,country): # 绑定方法 存储在类的命名空间里的
# self.name = name
# self.age = age
# self.Country = country
# def func1(self):
# print(self)
#
# a = A('alex',83,'印度')
# b = A('wusir',74,'泰国')
# A.Country = '英国'
# a.Country = '日本'
# print(a.Country)
# print(b.Country)
# print(A.Country)
# (4)
#
# class A:
# Country = '中国' # 静态变量/静态属性 存储在类的命名空间里的
# def __init__(self,name,age,country): # 绑定方法 存储在类的命名空间里的
# self.name = name
# self.age = age
# def Country(self):
# return self.Country
#
# a = A('alex',83,'印度')
# b = A('wusir',74,'泰国')
# print(a.Country)
# print(a.Country())