python中的类属性

 在python中,对于类属性这个概念。我刚开始的时候,总是搞的不是很清楚。

今天看了dive into python后,才比较明白。

类属性在未创建任何类的实例的时候已经存在了。并且它被类以及类所有的实例所共享。
每一次创建一个新的实例,实例的方法不仅可以改变实例本身,而且还会改变类。

下面是Dive into python中的一个例子:

>>> class counter:
... count = 0 1
... def __init__(self):
... self.__class__.count += 1 2
...
>>> counter
<class __main__.counter at 010EAECC>
>>> counter.count 3
0
>>> c = counter()
>>> c.count 4
1
>>> counter.count
1
>>> d = counter() 5
>>>
d.count
2
>>> c.count
2
>>> counter.count
2
 
def listDirectory(directory, fileExtList):                                        
"get list of file info objects for files of particular extensions"
fileList = [os.path.normcase(f)
for f in os.listdir(directory)]
fileList = [os.path.join(directory, f)
for f in fileList
if os.path.splitext(f)[1] in fileExtList]

这里面,os.path.splitext获得的是一个元组。
>>> print os.path.splitext.__doc__
Split the extension from a pathname. Extension is everything from the
last dot to the end. Returns "(root, ext)", either part may be empty.
>>> a=('1','2')
>>> a[1]
'2'
所以,os.path.splitext(f)[1]获得的是后缀名。

其中,os.path.normcase(f)是将后缀名进行转换。os.path.normcase(f) 根据
操作系统的缺省值对大小写进行标准化处理。 normcase 是一个有用的函数,用于对
大小写不敏感操作系统的一个补充。这种操作系统认为 mahadeva.mp3mahadeva.MP3
是同一个文件名。例如,在 Windows 和 Mac OS 下,normcase 将把整个文件名转换
为小写字母;而在 UNIX 兼容的系统下,它将返回未作修改的文件名。


这一段python程序的目的就是获取特定目录下,特定后缀名的文件。
3

自动删除某些垃圾文件

某些软件在工作时会自动生成一些备份文件。随着文件数量的增长,每隔一段时间就要清理一下。当然可以选择手工清理,不过考虑到这些文件是分散在不同的目录下,而且数量比较多,所以手工清理还是有些麻烦。使用一个简单的 Python 脚本来自动完成这一任务。下面这段代码扫描D盘下的所有目录,并删除目录下的有关备份文件: 

from os.path import walk, join, normpath
from os import chdir,remove

def scan(arg, dirname, names)
    for file in names:
1  if file[-1:]=="~" or file[-4:]==".bak":
2       files = normpath(join(dirname,file))
3            chdir(dirname)
4            print "deleting", files
5            remove(file)
6            print "done!"

if __name__== "__main__":
    path = chdir('d:')
7   walk(path, scan, 0)

对以上代码的简单分析和解释:

  • 基本的想法是利用脚本对各个目录进行扫描,对目录下每一个文件进行判断(1句),如果是某个程序生成的备份文件就删除掉(5句)。
  • 备份文件的扩展名都有一定的特征,比如 Vim 备份文件的最后一个字符是波浪号~,而 Autocad 的备份则以 bak 结束。这些特征是判断一个文件是否应该被删除的依据。
  • 7 句 walk(path, scan, 0) 是一个 Python 的内置函数。用来遍历目录 path。显而易见借助于 Python 提供的这个函数,扫描目录的工作比较轻松地完成了,从而使编程的难度降低许多。
  • 最后要说明的一点是,删除某个文件时要知道它的绝对路径而且要在那个文件的所在目录下进行,否则 Python 会提示找不到要处理的文件。2 句得到了文件的绝对路径,3 句 chdir(dirname) 则把当前的目录变成要删除文件的所在目录。
 
 

 list 的分片(slice)

>>> li
['a', 'b', 'mpilgrim', 'z', 'example']
>>> li[1:3] 1
['b', 'mpilgrim']
>>> li[1:-1] 2
['b', 'mpilgrim', 'z']
>>> li[0:3] 3
['a', 'b', 'mpilgrim']
 
 
1 您可以通过指定 2 个索引得到 list 的子集, 叫做一个 “slice” 。返回值是一个新的 list, 它包含了 list 中按顺序从第一个 slice 索引 (这里为 li[1]) 开始, 直到但是不包括第二个 slice 索引 (这里为 li[3]) 的所有元素。
2 如果一个或两个 slice 索引是负数, slice 也可以工作。如果对您有帮助, 您可以这样理解:从左向右阅读 list, 第一个 slice 索引指定了您想要的第一个元素, 第二个 slice 索引指定了第一个您不想要的元素。返回的值为在其间的每个元素。
3 List 从 0 开始, 所以 li[0:3] 返回 list 的前 3 个元素, 从 li[0] 开始, 直到但不包括 li[3]


对于List的分片经常容易出错,要好好的记住。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值