python补充2
一 关于类中的self以及继承问题
请看下面一段代码
class Base:
def f1(self):
self.f2() def f2(self):
print('...') class Foo(Base):
def f2(self):
print('') 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() #类的私有属性不会被继承,这里会报错
三递归函数中变量累加覆盖的问题
使用递归函数的时候,需要一个变量一直累加,但是一旦重新递归函数的时候这个变量也会改变,怎么去做
import os
def 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 os
def 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 total
print(get_size(r'G:\study\day13'))
找出目录下面的所有文件,并按照从大到小排列
import os
my_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_list
aa=get_size(r'G:\study\day22\study-more\version')
# print(aa) bb=sorted(aa,key=lambda x:x[],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
python补充2的更多相关文章
- Python补充02 Python小技巧
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在这里列举一些我使用Python时积累的小技巧.这些技巧是我在使用Python过程 ...
- Python补充06 Python之道
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python有一个彩蛋,用下面语句调出: import this 该彩蛋的文档记录 ...
- python补充最常见的内置函数
最常见的内置函数是: print("Hello World!") 数学运算 abs(-5) # 取绝对值,也就是5 round(2. ...
- Python补充05 字符串格式化 (%操作符)
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输 ...
- Python补充03 Python内置函数清单
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明. Python内置(built-in)函数随着python解释器的运行而创建.在Pytho ...
- Python补充04 Python简史
原文:Python简史 作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! Python是我喜欢的语言,简洁,优美,容易使用.前两天, ...
- 【Python 补充01】Python运算符
Python运算符 举个简单的例子 4 +5 = 9 . 例子中,4 和 5 被称为操作数,"+" 称为运算符. 1.算术运算符 + - * / # 加减乘除 % # 取模(返回除 ...
- python补充3
一单例模式 类:具体相同特征的一类事物,类似于模板 单例:常用的软件设计模式,用于设计一个类中只有一个实例且易于外界访问,可以对实例的个数控制并节约系统资源 运用场景:比如某个服务器程序的配置信息,它 ...
- python补充知识点
1. 在python2中用xrange,在python3中直接使用range就好了 2. 常数 None在逻辑判断的时候指代False,其他方式不代表True或者False 3. for循环只作用域容 ...
- python 补充:join() , 基本数据类型的增删改查以及深浅拷贝
# join() join() 方法用于将序列中的元素以指定的字符连接生成一个新的字符串. li = ["李李嘉诚", "麻花藤", "黄海海峰&q ...
随机推荐
- opencv数据类型和格式的坑
//cv::Mat uvp = cv::Mat::zeros(2, probp.size(), CV_8UC1); cv::Mat uvp = cv::Mat::zeros(2, probp.size ...
- Softmax回归介绍
把输入值当成幂指数求值,再正则化这些结果值.这个幂运算表示,更大的证据对应更大的假设模型(hypothesis)里面的乘数权重值.反之,拥有更少的证据意味着在假设模型里面拥有更小的乘数系数.假设模型里 ...
- STM32 输入捕获配置
在STM32 的定时器,除了 TIM6 和 TIM7,就是通过检测 TIMx_CHx 上的 边沿信号,在边沿信号发生跳变(比如上升沿/下降沿)的时候, 将当时定时器 的值(TIMx_CNT) 存放到对 ...
- (4)格式化输出(%用法和format用法以及区别)
%s用法(%s的用法是写多少个,后面就要传多少个) format用法(基本语法是通过{}和:来代替%.format函数可以接受不限个参数,位置可以不按顺序) 形式一(顺序填坑{}) >>& ...
- 计算n^k的开头三位和末尾三位(fmod(double x,double y)函数的引入)
C 库函数 double fmod(double x, double y) 返回 x 除以 y 的余数. 所以fmod(x,1)得到的就是小数部分的值(如fmod(3.35,1)==0.35) htt ...
- Oracle:Decode在时间范围中的使用
做查询的时候需要下一个sql,需要select test_time出来,如果test_Time的HH24:Mi:SS在7:00:00和19:00:00返回白班,否则返回夜班 select case w ...
- JS 网页快捷键设置
我们希望能用快捷键代替鼠标点击做一些事情,例如一个典型的应用就是论坛上常用的Ctrl + Enter 快捷发帖子.就以Ctrl+Enter快捷发帖子为例,实质上呢,就是通过JS脚本,捕获系统的onke ...
- windows server 2008 修改域的密码策略
1.一般情况下,进入本地安全策略修改密码策略时,,密码策略已经被锁定,无法更改,若要修改域服务器上的密码策略,请按照步骤2--6进行修改 2.在此情况下要改密码策略的过程如下, 进入组策略管理: 3. ...
- js去除运营商或者路由器添加的广告脚本
是不是偶尔发现在家里看网页的时候回插入一个广告,很烦人.开发的网站,上传到了阿里云 oss,设置了域名解析,但是在家里晚上访问的时候,总会在页面添加一个广告,导致页面卡主,一开始以为是路由器的问题,以 ...
- 【jmeter】jmeter测试网站QPS
上一节中,我们了解了jmeter的一此主要元件,那么这些元件如何使用到性能测试中呢.这一节创建一个简单的测试计划来使用这些元件.该计划对应的测试需求. 1)测试目标网站是fnng.cnblogs.co ...