0412 递归函数/类的实例属性和类属性 学习笔记(补)

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())

参考原文链接

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值