博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python补充2
阅读量:4969 次
发布时间:2019-06-12

本文共 3585 字,大约阅读时间需要 11 分钟。

一 关于类中的self以及继承问题

请看下面一段代码

class Base:    def f1(self):        self.f2()     def f2(self):        print('...') class Foo(Base):    def f2(self):        print('9999') obj = Foo()obj.f1() #结果为9999

解说:Foo().f1() -->里面的self指的是实例化的对象,而对象继承的是Foo

实例化类Foo,执行对象的f1方法。由于对象没有f1方法,从父类Base中寻找。
找到f1方法,
def 
f1(
self
): 此时
self
指向的是Foo类的对象。执行
self
.f2()
由于
self
是Foo类中的,从Foo类中寻找f2方法。找到了,执行输出
9999
 

二类的私有属性继承问题

class JustCounter:    __secretCount = 0    def count(self):        self.__secretCount += 1        print(self.__secretCount)class Bars(JustCounter):    def count(self):        print(self.__secretCount)counter1 = JustCounter()counter2 = Bars()counter1.count()counter2.count() #类的私有属性不会被继承,这里会报错
View Code

 三递归函数中变量累加覆盖的问题

使用递归函数的时候,需要一个变量一直累加,但是一旦重新递归函数的时候这个变量也会改变,怎么去做

import osdef get_size(path):    ret=os.listdir(path)    # print(ret)    total=0    for name in ret:        # print(name)        abs_path=os.path.join(path,name)        if os.path.isdir(abs_path):            total+=get_size(abs_path) #这里递归的同时total也累加了        else:            total+=os.path.getsize(abs_path)    return total #这里总的大小会稍有变化print(get_size(r'G:\study\day13'))

 四计算目录的大小

上面的例子是一个

下面使用堆栈的概念

import osdef get_size(path):    dir_lst=[path]    total=0    while dir_lst:        path=dir_lst.pop()        ret=os.listdir(path)        for name in ret:            abs_path=os.path.join(path,name)            if os.path.isdir(abs_path):                dir_lst.append(abs_path)            else:                total+=os.path.getsize(abs_path)    return totalprint(get_size(r'G:\study\day13'))
View Code

 找出目录下面的所有文件,并按照从大到小排列

import osmy_list=[]def get_size(path):    dir_lst=[path]    while dir_lst:        path=dir_lst.pop()        ret=os.listdir(path)        for name in ret:            abs_path=os.path.join(path,name)            if os.path.isdir(abs_path):                dir_lst.append(abs_path)            else:                my_list.append((abs_path,os.path.getsize(abs_path)))    return my_listaa=get_size(r'G:\study\day22\study-more\version')# print(aa)bb=sorted(aa,key=lambda x:x[1],reverse=True)print(bb)

 

五 递归中return的真正理解,跳出函数是跳出最近的函数,以三级菜单举例

menu = {    '北京': {        '海淀': {            '五道口': {                'soho': {},                '网易': {},                'google': {}            },            '中关村': {                '爱奇艺': {},                '汽车之家': {},                'youku': {},            },            '上地': {                '百度': {},            },        },        '昌平': {            '沙河': {                '老男孩': {},                '北航': {},            },            '天通苑': {},            '回龙观': {},        },        '朝阳': {},        '东城': {},    },    '上海': {        '闵行': {            "人民广场": {                '炸鸡店': {}            }        },        '闸北': {            '火车战': {                '携程': {}            }        },        '浦东': {},    },    '山东': {},}
菜单字典
def menu3(menu):    while True:        for key in menu:            print(key)        inp=input('>>>').strip()        if inp in menu:            ret=menu3(menu[inp]) #递归调用menu3函数,将是一个嵌套            if ret=='q':return 'q'        elif inp=='b':            return 'b' #单纯的返回        elif inp=='q':return 'q' #进入程序单独输入q,直接就是退出menu3函数,这个是没有嵌套的        #进入菜单一直往下走的话,就是使用q在往嵌套函数menu3(menu[inp])的外面跳,直到不嵌套而退出menu3(menu)
三级菜单函数

 三级菜单堆栈实现

l=[menu]while l:    for key in l[-1]:        print(key)    inp=input('>>>').strip()    if inp in l[-1]:        l.append(l[-1][inp])        print(l)    elif inp=='b':l.pop()    elif inp=='q':break
View Code

 

posted on
2018-07-13 11:34 阅读(
...) 评论(
...)

转载于:https://www.cnblogs.com/mmyy-blog/p/9304052.html

你可能感兴趣的文章
idhttp访问DATASNAP有密码验证的中间件
查看>>
libmidas.so.2
查看>>
开发WINDOWS服务程序
查看>>
httpencode编码
查看>>
cross socket和msgpack的数据序列和还原
查看>>
解决跨操作系统平台JSON中文乱码问题
查看>>
DELPHI搭建centos开发环境
查看>>
IdHTTPServer允许跨域访问
查看>>
更新.net core 3.0,dotnet ef命令无法使用的解决办法
查看>>
React躬行记(13)——React Router
查看>>
前端利器躬行记(1)——npm
查看>>
前端利器躬行记(2)——Babel
查看>>
前端利器躬行记(6)——Fiddler
查看>>
每次阅读外文技术资料都头疼,终于知道原因了。
查看>>
130242014034-林伟领-实验一
查看>>
Forbidden You don't have permission to access / on this server.
查看>>
Windows server 2008 R2中安装MySQL !
查看>>
Intellij Idea新建web项目(转)
查看>>
C语言结构体和函数
查看>>
用JAVA编写浏览器内核之实现javascript的document对象与内置方法
查看>>