函数
2018-01-09 18:56:08 10 举报def inner(*args,**kwargs):
'''执行函数之前要做的'''
re = func(*args,**kwargs)
'''执行函数之后要做的'''
return re
return inner
@timer
装饰器的固定格式
def outer(flag):
def timer(func):
def inner(*args,**kwargs):
if flag:
print('''执行函数之前要做的''')
re = func(*args,**kwargs)
if flag:
print('''执行函数之后要做的''')
return re
return inner
return timer
@outer(False)
def func():
print(111)
func()
带参数的装饰器
send 获取下一个值的效果和next基本一致
只是在获取下一个值的时候,给上一yield的位置传递一个数据
最后一个yield不能接受外部的值
for i in g :
print(i)
#匿名函数不管逻辑多复杂,只能写一行,且逻辑执行结束后的内容就是返回值
#返回值和正常的函数一样可以是任意数据类型
def func(n,a=1,b=1):
if n == 1 :
return a
return func(n-1,b,a+b)
print(func(100))
def fac(n):
if n == 1 :
return 1
return n * fac(n-1)
print(fac(10))
但是不能直接修改
如果想要修改,需要在程序的一开始添加global声明
如果在一个局部(函数)内声明了一个global变量,那么这个变量在局部的所有操作将对全局的变量有效
#函数内部定义的函数称为内部函数
def func():
name = 'eva'
def inner():
print(name)
return inner
f = func()
f()
def wrapper():
money = 1000
def func():
name = 'eva'
def inner():
print(name,money)
return inner
return func
f = wrapper()
i = f()
i()
闭包嵌套
#输出的__closure__有cell元素 :是闭包函数
def func():
name = 'eva'
def inner():
print(name)
print(inner.__closure__)
return inner
f = func()
f()
#输出的__closure__为None :不是闭包函数
name = 'egon'
def func2():
def inner():
print(name)
print(inner.__closure__)
return inner
f2 = func2()
f2()
def 是固定的,不能变。
空格 为了将def关键字和函数名分开,必须空格。
函数名:函数名只能包含字符串、下划线和数字且不能以数字开头。虽然函数名可以随便起,但我们给函数起名字还是要尽量简短,并能表达函数功能
括号:是必须加的!
定义函数和调用函数时括号里都不写内容
有一个参数
传什么就是什么
有多个参数
位置参数,按照顺序对应
不能给同一个变量传多个值