Day 11 函数基础part2

函数基础part2

函数对象的四大功能

  1. 引用
  2. 当做参数传给一个函数
def f1():
	print('from f1')
def f2(m)
	return m

f=f2(f1)
f()	# from f1
  1. 可以当做函数的返回值
def f2():
	print('from f2')
def f1():
	return f2
	
f=f1()	#f2
f()	#from f2
  1. 可以当做容器类型的元素
def f1():
	print('from f1')
	
l=['l',1,'f1']
l[2]()	# from f1

函数的嵌套

函数内部定义的函数,无法在函数外部使用内部定义的函数

def f1():
	def f2():
		print('from f2')
	f2()
	
f2()# 报错 即无法在函数外部使用函数内部的函数
f1() #from f2

注意:在函数内部定义函数是没有意义的.应该在外部定义函数,然后使用函数的嵌套调用

def f1():
	print('from f1')
	
def f2():
	f1()
	
f2()  #from f1

名称空间

名称空间就是存放名字的空间(变量名,函数名)

  1. 内置名称空间
    内置名称空间存放的是python解释器自带的名字
    python自带的内置方法其实就是一个个函数,这些函数被封装后具有了某种功能
    生命周期:在解释器起送是生效,在解释器关闭时失效

  2. 全局名称空间
    除了内置名称和局部的名称之外,其余的都放在全局名称空间
    生命周期:程序\文件运行的时候才会生效,运行完毕就失效

  3. 局部名称空间
    函数内部的都叫局部名称空间,也就是说函数内部定义的名字都放入了局部名称空间
    生命周期:函数运行的时候生效,运行完就失效

  4. 执行顺序
    由于python程序是有python解释器打开的的,因此一定是在python解释器中的内置名称空间加载结束后,文件才开始打开,这个时候才会产生全局名称空间,当文件内有某一个函数被调用的时候,才会开始产生局部名称空间,因此名称空间的加载顺序为:内置->全局->局部

  5. 查找顺序
    由于名称空间是用来存放变量名与之之间的绑定关系,但凡需要查找名字,必然是从当前的位置开始查找,查找顺序为: 局部->全局->内置

作用域

作用域关系在函数定义阶段就已经确定了,与函数的调用么有关系
函数与函数之间可能会有相同名字的变量,但是这两个变量毫无关系,作用域不同

x=1

def f1(): #定义阶段x=1
	print(x)

def f2():
	x=2
	f1()
	
f2()  # 1
  1. 全局作用域
    适用于全局+内置,即全局可以修改内置的,内置可以修改全局的
x=1

def f1():
	print x
	
f1()  #1
  1. 局部作用域
    只能适用于局部范围,在局部定义的名字只能在局部获取
def f1():
	def f2():
		def f3():
			print(x)
		x=2
		f3()
	f2()
	
f1() # 2
posted @ 2019-05-30 22:33  萨萌萌  阅读(95)  评论(0)    收藏  举报