运维的我要学开发--Python(6)

   本文均来自Python Cookbook,本博文励志将Cookbook中的string部位,文件,面向对象编程部分完成,本系列博文陆续还会介绍flask框架,每篇博文都以一个个小例子展示。

#-*- coding: utf-8 -*-
‘‘‘
        windows下修改文件属性
‘‘‘
import win32con,win32api,os
#创建一个文件,并展示如何操作它
thefile = ‘test‘
f = open(‘test‘,‘w‘)
f.close()
#设置成隐藏文件...
win32api.SetFileAttributes(thefile,win32con.FILE_ATTRIBUTE_HIDDEN)
#设置成只读文件
win32api.SetFileAttributes(thefile,win32con.FILE_ATTRIBUTE_READONLY)
#设置成普通文件
win32api.SetFileAttributes(thefile,win32con.FILE_ATTRIBUTE_NORMAL)
#最后删除掉该文件
os.remove(thefile)
‘‘‘
    对象的拷贝
    对象的引用(对一个对象的赋值,作为参数传递,
        作为结果返回,Python通常都是指向原
‘‘‘
#什么是对象引用
a = [1,2,3,4]
b = a #b引用了a
b.append(5)
print a,b
#结果:[1, 2, 3, 4, 5] [1, 2, 3, 4, 5]
import copy
listobject=[1,2,3,4]
#第一种对象拷贝方式(但是不适用于其属性或者内容中仍然是一个对象的情况
new_list =  copy.copy(listobject)
new_list.append(5)
print new_list,listobject
#必须使用deepcpoy的情况
listobject=[[1,2,3],[5,6,7]]
new_list =  copy.copy(listobject)
new_list[1].append(1000)
print new_list,listobject
#结果 [[1, 2, 3], [5, 6, 7, 1000]] [[1, 2, 3], [5, 6, 7, 1000]]
#第二种对象拷贝方式.递归拷贝对象
new_list =  copy.deepcopy(listobject)
‘‘‘
    判断一个列表中的某个元素是否存在,存在则返回
‘‘‘
#方案一
def list_get(L,i,v=None):
    if -len(L) <= i < len(L):return L[i]
    else:return v
#方案二
def list_get_egfp(L,i,v=None):
    try:return L[i]
    except IndexError:return v
#除非传入的索引值大多数是有效的,否则方案二要比方案一慢多了
‘‘‘
    多维列表的创建
‘‘‘
#得到1*5的列表
alist = [0]*5
#得到3*5的列表
multi = [[0]*5]*3
print multi
#结果[[0, 0, 0, 0, 0], [0, 0, 0, 0, 0], [0, 0, 0, 0, 0]]
multi[0][0]=‘oops‘
print multi
#存在bug
#[[‘oops‘, 0, 0, 0, 0], [‘oops‘, 0, 0, 0, 0], [‘oops‘, 0, 0, 0, 0]]
#序列乘以数字得到的是包含多个引用原始内容的子项
#正确的多维序列的创建,使用列表推导没有任何隐式的引用
multi = [[0 for col in range(5)] for row in range(5)]
‘‘‘
    展开嵌套序列
‘‘‘
def list_or_tuple(x):
    return isinstance(x,(list,tuple))
def flatten(sequence,to_expand=list_or_tuple):
    for item in sequence:
        if to_expand(item):
            for subitem in flatten(item,to_expand):
                yield subitem
        else:
            yield item
‘‘‘
    二维阵列变换
‘‘‘
arr = [[1,2,3],[4,5,6],[7,8,9]]
#方法一
print [[r[col] for r in arr] for col in range(len(arr[0]))]
#方法二
print map(list,zip(*arr))
#结果[[1, 4, 7], [2, 5, 8], [3, 6, 9]]


本文出自 “专注linux” 博客,请务必保留此出处http://forlinux.blog.51cto.com/8001278/1408637

运维的我要学开发--Python(6),布布扣,bubuko.com

运维的我要学开发--Python(6)

上一篇:C++中的memset()函数 ------------转自:http://www.360doc.com/content/10/1006/18/1704901_58866679.shtml


下一篇:c++ inline