python 学习

        切片:

       [start_index:  stop_index:  step]

                      start_index:  stop_index   参数都可以省略        默认  全部  但必须有一个  :

                    demo: 

        start_index和stop_index的绝对值是可以大于length的。比如下面两个例子:?

1
2
3
4
5
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[-11:11]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[11:-11:-1]
[9, 8, 7, 6, 5, 4, 3, 2, 1, 0]

      另外start_index和stop_index都是可以省略的,比如这样的形式 alist[:], 被省略的默认由其对应左右边界起始元素开始截取。

      看一下具体的实例:?

1
2
3
>>> alist = [0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
>>> alist[:]
[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]

函数默认参数:  陷阱

def qqxing(k,l = {}):
# l.append(1)
l[k] = 'v'
print(l)

qqxing(1) #[1]
qqxing(2) #[1,1]
qqxing(3) #[1,1,1]

# 如果默认参数的值是一个可变数据类型,
# 那么每一次调用函数的时候,
# 如果不传值就公用这个数据类型的资源




def func(l):
return l[1::2] #切片 从 第一个, 从1 开始 不是 0 2 4
print(func([1,2,3,4,5]))



def func(l):
return l[:2]

print(func([1,2,3,4]))



######## 全局变量变量名大写
######## 局部变量变量名小写


# 优先读取局部变量,能读取全局变量,无法对全局变量重新赋值 NAME=“fff”,
# 但是对于可变类型,可以对内部元素进行操作
# 如果函数中有global关键字,变量本质上就是全局的那个变量,可读取可赋值 NAME=“fff”
高阶函数
一   #filter函数
movie_people=['alex_sb','wupeiqi_sb','linhaifeng','yuanhao_sb']
def sb_show(n):
return True
def sb_show(str):
# return str.endswith('sb');
#
# print(list(filter(sb_show,movie_people))) ####注意 sb_show是变量 不是字符串





二、map函数
num_l = [1,2,10,5,3,7]
# print(list(map(lambda x:x+1,num_l))


def add_one(x):
return x+1



print(list(map(add_one,num_l)) ####注意 add_one 是变量 不是字符串
三、reduce函数,  py3 要自己引入,因为已经删除内置
from functools import reduce

def add(x,y):
return x + y
print(reduce(add,list(range(1,100))))

 匿名函数;没有实际名字的函数。

func=lambda x:x+'_sb'
res=func(name)
print('匿名函数的运行结果',res)
#处理序列中的每个元素,得到的结果是一个‘列表’,该‘列表’元素个数及位置与原来一样
# map()

#filter遍历序列中的每个元素,判断每个元素得到布尔值,如果是True则留下来

people=[
{'name':'alex','age':1000},
{'name':'wupei','age':10000},
{'name':'yuanhao','age':9000},
{'name':'linhaifeng','age':18},
]
print(list(filter(lambda p:p['age']<=18,people)))


#reduce:处理一个序列,然后把序列进行合并操作
from functools import reduce
print(reduce(lambda x,y:x+y,range(100),100))
print(reduce(lambda x,y:x+y,range(1,101)))





# 文件处理
# 打开文件
#open('路径','打开方式','指定编码方式')
# 打开方式 r w a r+ w+ a+ b

# ‘r+’读+追加模式,可读可写,
# ‘w+’写读模式,打开创建新文件,因此需要先把内容写进去在读
# ‘a’追加模式,若打开的是已有文件则直接对已有文件操作




文件打开,替换 

with open('小护士班主任',encoding='utf-8') as f,open('小护士班主任.bak','w',encoding='utf-8') as f2:
for line in f:
if '星儿' in line: # 班主任:星儿
line = line.replace('星儿','啊娇')
f2.write(line)
f=open('test22.py','ab') #b的方式不能指定编码
f.write('杨件'.encode('utf-8'))

open('a;ltxt','wt')
























# print(f.tell())
# f.readline()
# print(f.tell())

# f.seek(1)
# print(f.tell())
# print(f.readlines())
# f.seek(3)
# print(f.tell())
# print(f.read())

# data=f.read(1)
# print(data)

# f.truncate(10)


# f.flush() #讲文件内容从内存刷到硬盘
#
# f.closed #文件如果关闭则返回True
#
# f.encoding #查看使用open打开文件的编码
# f.tell() #查看文件处理当前的光标位置
#
# f.seek(3) #从开头开始算,将光标移动到第三个字节
# f.truncate(10) #21以写方式打开,但是w和w+除外
#
# f=open('d.txt','r',newline='')
#
# data=f.readline().encode('utf-8')
# print(data)
# print(f.tell())



f=open('日志文件','rb')

# for i in f.readlines():
# print(i)

#循环文件的推荐方式
# for i in f:
# print(i)

for i in f:
offs=-10
while True:
f.seek(offs,2)
data=f.readlines()
if len(data) > 1:
print('文件的最后一行是%s' %(data[-1].decode('utf-8')))
break
offs*=2















              

原文地址:https://www.cnblogs.com/ldms/p/10450698.html