标签:python
1.名称空间2.加载顺序:内置名称空间---全局名称空间(程序执行时)---局部名称空间(函数调用时)
取值顺序(单向不可逆):局部名称空间(函数调用时)---全局名称空间(程序执行时)---内置名称空间。取值只是引用,不能改变
3.函数的嵌套:嵌套中的函数执行完后,才会执行下面的代码。函数中的函数是不同的临时空间
5.gloabal:引用并改变一个全局变量;在局部作用域声明一个全局变量
count = 1
def func1():
global count #引用全局的count变量,如果全局没有此变量,也可以在此处声明一个新count
count = count + 1 #可以在函数体内改变count的值,如果没有global,此处只能引用count而不能改变
count = count + 100
print(count)
func1()
print(count) #全局的count也改变
noloacal:不能操作全局变量;从哪层引用的该变量,从那层开始全部改变
def func1():
count = 1
def inner():
nonlocal count #引用上一级的count
count = count + 3 #改变原count的值
print(count) #在inner函数内改变后的值
inner()
print(count) #上一级的count也改变,此count是局部变量,全局不能访问
func1()
6.函数名的运用(可以把函数名理解为一个变量名):
a.函数名可以打印 print(func1) <function func1 at 0x000000000258F9D8>
b.函数名可以作为容器类数据的元素 list = [func1, func2, func3]
c.函数名可以作为函数的参数 func2(func1) func1相当于一个变量名
d.函数名可以作为函数的返回值 return func1 把func1返回给当前函数的执行者
7.闭包函数
定义:内层函数对外层函数非全局变量的引用
作用:闭包函数不会随着父级函数的结束而释放
def fun1():
name = ‘cc‘
def inner1():
print(name) #引用父级的name
inner1()
print(inner1.closure) #判断inner1是否是闭包,如果返回None则不是闭包函数,如果返回一段内存地址则是闭包函数
fun1()
8.装饰器
本质:闭包函数
作用:在不影响原函数执行的基础上,增加一些额外的功能
通用语法:
def timmer(f):
def inner(*args,*kwgrgs):
‘‘‘ 被装饰函数之前的操作‘‘‘
ret = f(args,**kwgrgs)
‘‘‘ 被装饰函数之后的操作‘‘‘
return ret
return inner
标签:python
原文地址:http://blog.51cto.com/13544778/2122321