带你了解带你了解python装饰器装饰器
1.作用域作用域
在python中,作用域分为两种:全局作用域和局部作用域。
全局作用域是定义在文件级别的变量,函数名。而局部作用域,则是定义函数内部。
关于作用域,我要理解两点:a.在全局不能访问到局部定义的变量 b.在局部能够访问到全局定义的变量,但是不能修改全局
定义的变量(当然有方法可以修改)
下面我们来看看下面实例:
x = 1
def funx():
x = 10
print(x) # 打印出10
funx()
print(x) # 打印出1
如果局部没有定义变量x,那么函数内部会从内往外开始查找x,如果没有找到,就会报错
x = 1
def funx():
print(x) # 打印出1
funx()
print(x) # 打印出1
x = 1
def funx():
def func1():
print(x) # 打印出1
func1()
funx()
print(x) # 打印出1
因此,关于作用域的问题,只需要记住两点就行:全局变量能够被文件任何地方引用,但修改只能在全局进行操作;如果局部
没有找到所需的变量,就会往外进行查找,没有找到就会报错。
2.高级函数高级函数
我们知道,函数名其实就是指向一段内存空间的地址,既然是地址,那么我们可以利用这种特性来。
a函数名可以作为一个值
def delete(ps):
import os
filename = ps[-1] delelemetns = ps[1] with open(filename, encoding='utf-8') as f_read,\
open('tmp.txt', 'w', encoding='utf-8') as f_write:
for line in iter(f_read.readline, ''):
if line != '': # 处理非空行
if delelemetns in line:
line = line.replace(delelemetns,'')
f_write.write(line)
os.remove(filename)
os.rename('tmp.txt',filename)
def add(ps):
filename = ps[-1] addelemetns = ps[1] with open(filename, 'a', encoding='utf-8') as fp:
fp.write("\n", addelemetns)
def modify(ps):
import os
filename = ps[-1] modify_elemetns = ps[1] with open(filename, encoding='utf-8') as f_read, \
open('tmp.txt', 'w', encoding='utf-8') as f_write:
for line in iter(f_read.readline, ''):
if line != '\n': # 处理非空行