Day04-Python基础函数
一.函数的对象:函数是第一类对象,即函数可以当作数据传递
1.可以被引用
def foo(): print('from foo') func=foo ##foo值赋给了func print(foo) ##<function foo at 0x006E4108> print(func) ##<function foo at 0x006E4108> func() ##foo值赋给了func ,所以可以直接()引用
2.可以当做参数传递
def foo(): print('from foo111111') def bar(func): print(func) func() bar(foo)
3.返回值可以是函数
def foo(): print('from foo') def long(func): return func f=long(foo) print(f) f()
4.可以当做容器类型的元素
def foo(): print('from foo') dic = {'fuck':foo} print(dic['fuck']) dic['fuck']()
def select(sql): print('------>select') def update(sql): print('------>update') def delete(sql): print('------>delete') def insert(sql): print('------>insert') fun_dit={ 'select':select, 'update':update, 'delete':delete, 'insert':insert } def main(): while True: sql = input('>>>:').strip() if not sql: continue l = sql.split() cmd= l[0] if cmd in fun_dit: fun_dit[cmd](l) main()
二.函数的嵌套
1.函数的嵌套调用
def max2(x,y): return x if x > y else y def max4(a,b,c,d): res1=max2(a,b) res2=max2(res1,c) res3=max2(res2,d) return res3 print(max4(10,80,31,20))
2.函数嵌套定义
def f1(): def f2(): print('from foo f2') def f3(): print('from foo f3') f3() f2() f1()
三.名称空间与作用域
名称空间,存放名字的地方以及,三种名称空间
1.内置名称空间 (随着Python解释器的启动而产生)
print(sum) #<built-in function sum> #内存函数的地址 print(max) #<built-in function max> print(min) #<built-in function min>
查看内置名称空间
import builtins for i in dir(builtins): print(i)
2.全局名称空间(文件的执行会产生 全局名称空间,指的是文件级别定义的名字都会被放入该空间)
x = 1 if x ==1: y=2 class foo(): import time name = 'long' def func(): pass #以上是全局定义的名字
3.局部名称空间(调用函数时会产生局部名称空间,只在函数调用时临时绑定,调用结束解除绑定)
x = 1111 def func(): x=1 def f1(): pass
2.作用域:
全局作用域 :内置名称空间 ,全局名称空间
局部作用域:局部名称空间
名字查找的顺序:局部名称空间--->全局名称空间--->内置名称空间
x = 1 def func(): x=2 print(x) #输出结果为:先查找局部空间内的x=2,如果局部空间没有则查找全局空间,全局没有查找内置名称空间
def func(): sum=123123 print(sum) func() #输出结果123,如把sum注释掉就会去全局找,全面局没有,内置找,内置中找到的sum内存地址
查看全局作用域内的名字:gloabls()
x=1000 def func(): x=2 print(globals())
查看局部作用域内的名字:locals()
x=1000 def func(): x=2 print(locals()) print(globals() is locals())
全局作用域:全局有效,在任何位置都能被访问到,除非del删掉,否则一直存活到文件执行完毕
局部作用域的名字:局部有效,只能在局部范围调用,只在函数调用时才有效,调用结束时失效
四.闭包函数(定义在内部函数包含对外部作用域或而非全局作用域的引用,该内部函数就成为闭包函数)
def f1(): x=1 def f2(): print(x) return f2 f=f1() f() #
五.装饰品(修饰别人的工具,修饰添加功能,工具指的函数)
装饰品本身可以是任何可调用对象,被装饰的对象也可以是任意可调用对象
为什么要用装饰品:
开放封闭原则:对修改是封闭的,对扩展是开放的
装饰器就是为了在不修改被装饰对象的源代码以及调用方式前提下,为期添加新功能
Do not use Python......!!!!!!