Python入门
DAY 10
函数对象
函数是第一类对象: 指的是函数名指向的值(函数)可以被当作数据去使用
def func(): # func=函数的内存地址 print('from func') print(func)
1. 可以被引用
f=func print(f) f()
2. 可以当作参数传给另外一个函数
def bar(x): print(x) bar(age) bar(func)
3. 可以当作一个函数的返回值
def bar(x): return x res=bar(age) print(res) res=bar(func) print(res)
4. 可以当作容器类型的元素
l=[age,func,func()] print(l)
函数嵌套
一:函数的嵌套调用:在调用一个函数过程中,其内部代码又调用了其他函数
def bar(): print('from bar') def foo(): print('from foo') bar() foo() def max2(x,y): if x > y: return x else: return y def max4(a,b,c,d): res1=max2(a,b) res2=max2(res1,c) res3=max2(res2,d) return res3 print(max4(1,2,3,4))
二:函数的嵌套定义:一个函数内部又定义了另外一个函数
def outter(): x=1 print('from outter') def inner(): print('from inner') inner() outter() def f1(): print('from f1') def f2(): print('from f2') def f3(): print('from f3') f3() f2() f1()
名称空间与作用域
1 什么是名称空间namespace
名称空间就是用来存放名字与值内存地址绑定关系的地方(内存空间)age=18
但凡查找值一定要通过名字,访问名字必需去查找名称空间
2 名称空间分为三大类
内置名称空间:存放的是python解释器自带的名字
例如:
len
max全局名称空间:存放的是文件级别的名字
例如:以下名字中x\y\z\b\foo都会存放于全局名称空间中
x=1
y=2
if x == 1:
z=3while True:
b=4
breakdef foo():
m=3局部名称空间:在函数内定义的名字
例如:
foo内的m这个名字一定是存放于一个局部名称空间中
生命周期:
内置名称空间:在解释器启动时则生效,解释器关闭则失效
全局名称空间:在解释器解释执行python文件时则生效,文件执行完毕后则失效
局部名称空间:只在调用函数时临时产生该函数的局部名称空间,改函数调用完毕则失效加载顺序:
内置->全局->局部查找名字的顺序:
基于当前所在位置往上查找
假设当前站在局部,查找顺序:局部->全局->内置
假设当前站在全局,查找顺序:全局->内置
闭包函数
1 什么是闭包函数
闭:指的是闭包函数是定义在一个函数内部的函数
包:该内部函数包含对外层函数作用域名字的引用需要结合函数对象的概念将闭包函数返回到全局作用域去使用,从而打破函数的层级限制
def outter():
x=111
def inner():
print(x)
return innerf=outter() #f=outter内的inner
# x=22222
# f()
def func():
x=3333
f()func()
2 为何要用闭包函数
闭包函数提供了一种为函数体传值的解决方案3 如何用闭包函数
为函数体传值的方式一:参数 def func(x,y): print(x+y) func(1,2) 为函数体传值的方式二:闭包 def outter(x,y): # x=1 # y=2 def func(): print(x+y) return func f=outter(1,2) f() pip3 install requests
以上为本次学习内容