Day11函数的扩展

return 返回值

自定义函数的返回值,return 可以把值返回到函数的定义处
 (1) return + 六大标准数据类型,还有类的对象,函数
 如果不定义return,默认返回的是None
 (2) 执行完 return之后,立即终止函数,后面的代码不执行
# 1. return 的返回类型
def func():
	return 1# 定义 return后面的代码不执行
	
res = func()
print(res)

全局变量和局部变量

局部变量:在函数内部定义的变量(局部命名空间)
全局变量:在函数外部定义域或者使用global在函数内部定义(全局命名空间)

作用域:作用的范围
局部变量作用域:在函数的内部
全局变量的作用域:横跨整个文件

生命周期:
	内置变量 > 全局变量> 局部变量
	
# 1.局部变量
def func():
	# 定义局部变量
	a= 5
	# 获取局部变量
	print(a)
	# 修改局部变量
	a = 10
	print(10)
func()
print(a) # error 不能全局调用局部变量

# 2. 全局变量
# 定义全局变量
b =10
# 获取全局变量
print(b)
# 修改全局变量
a = 20

# 可以在函数内部获取全局变量
b = 20
def func():
	print(a)
func() # 20 

# 3.使用global 在函数内部创建全局变量
def func():
	global c
	c = 8
func()
print(c) # 8

# 4.使用global在函数内部修改全局变量
d = 300
def func():
	global d
	d = 123
func()
print(d) # 123

# 总结:
	可以使用global关键字在函数内部定义一个全局变量
	也可以使用global在函数内部修改一个全局变量 

函数名的使用

python中的函数可以像变量一样,动态创建,销毁,当参数传递,作为值返回,叫第一类对象.其他语言功能有限

def func():
	print("我是func函数")
	return 111
1. 函数名十个特殊的变量,可以当做变量赋值

a = func # 把func赋值给a
print(a) # <function func at 0x000002332ACE4048>
a() # 我是func函数

2. 函数名可以作为容器类型数据的元素
def func1():
	print("我是func1函数")
def func2():	
	print("我是func2函数")
def func3():
	print("我是func3函数")
lst = [func1,func2,func3]
for i in lst:
	i() 相当于 func1()
结果为:我是func1函数   我是func2函数  我是func3函数  

# 3.函数名可以作为函数的参数
def func4(f):
	f() # 相当于 func3()

func4(func3) # 把函数func3 作为参数传给了func4
# 4.函数名可以作为函数的返回值 
def func(f):
	return f # f->func4
res= func(func4) 
res() # 相当于 func4

# ###__doc__ 或者help查看文档

函数的嵌套

'''
函数之间可以嵌套'
外层的叫做外函数
内层的叫做内函数
'''
def outer():
	def inner():
		print("我是inner函数")
	inner()
outer()
'''
(1) 内部含数不可以直接在函数外部调用
(2) 调用外部函数后,内部函数也不可以在函数外部调用
(3) 内部函数可以在函数内部调用
(4) 内部函数在函数内部调用时,必须先定义在调用


# 外层是outer,内层是inner ,最里层是small,调用small里面的所有代码
'''
def outer():
	def inner()":
		def smaller():
			print("我是smaller函数")
		small()
	inner()
outer()

# LEGB原则(就近找变量原则)
"""
#找寻变量的调用顺序采用LEGB原则(即就近原则)
B —— Builtin(Python);Python内置模块的命名空间      (内建作用域)
G —— Global(module); 函数外部所在的命名空间        (全局作用域)
E —— Enclosing function locals;外部嵌套函数的作用域(嵌套作用域)
L —— Local(function);当前函数内的作用域            (局部作用域)
依据就近原则,从下往上 从里向外 依次寻找
"""

修改局部变量 nonlocal

"""
nonloca 遵循LEGB就近找变量原则
 (1)找当前空间上一层的局部变量进行修改
 (2)如果找不发到,会继续向上寻找
 (3)最后什么也没有,直接报错

"""
# (1) 找当前空间的上一层局部变量进行修改
def outer():
	a = 100
	def inner():
		nonlocal a
		a = 34
	inner()
	print(a)
outer() # 34

# (2) 如果找不到,会继续相上寻找
def outer():	
	a = 100	
	def inner():
		def smaller():
  			nonlocal a
   			a = 400
   			print(a) # 400
  		smaller()
  		print(a)  # 400
 	inner()
 	print(a) # 400
outer()

# (3) 注意点:nonlocal只能修改局部变量

a = 100
def outer():
 	def inner():
  		def smaller():
   			nonlocal a
   			a = 400
   			print(a)
  		smaller()
  		print(a)
 	inner()
 	print(a)
outer()

# 4 不能使用nonlocal 修改全局变量
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值