发布于2019-08-08 12:12 阅读(616) 评论(0) 点赞(4) 收藏(2)
函数内部定义的函数,无法在函数外部使用内部定义的函数
def f1():
def f2():
print('from f2')
f2()
f2()
def f1():
def f2():
print('from f2')
f1()
from f2
圆的面积周长
from math import pi
def circle(radius,action='area'):
def area():
return pi*(radius**2)
def perimeter():
return 2*pi*radius
if action=='area':
return area()
else:
return perimeter()
print(f'circle(10):{circle(10)}')
print(f"circle(10,action='perimeter'): {circle(10,action='perimeter')}")
内存中有一块内存存储变量名与变量间绑定关系的空间,称为名称空间
存放python解释器自带的名字
生命周期:解释器启动时生效,关闭失效
处内置与局部的名字之外,其余都存放在全局名称空间
用于存放函数调用期间函数体产生的名字
生命周期:函数调用期间生效,函数执行结束后失效
def f1():
def f2():
print('from f2')
f2()
f1()
内置-全局-局部
当为局部名称空间:局部-全局- 内置
x = 1
y = 2
len = 100
def func():
y = 3
len = 1000
print(f"y: {y}")
print(f"len: {len}")
# print(a) # NameError: name 'a' is not defined
func()
y: 3
len: 1000
x = 1
def func():
print(x)
x = 10
func()
10
域指的是区域,作用域即作用区域
全局作用域:全局有效,全局存活,包含内置名称空间和全局名称空间。
x = 1
def bar():
print(x)
bar()
1
局部作用域:局部有小,临时存储,只包含局部名称空间
def f1():
def f2():
def f3():
print(x)
x = 2
f3()
f2()
f1()
2
注意:作用域关系在函数定义阶段就固定死了,与函数的调用无关
# 作用域注意点
x = 1
def f1(): # 定义阶段x=1
print(x)
def f2():
x = 2
f1()
f2()
1
补充:global:修改全局作用域中的变量
nonlocal修该局部作用域中的变量
x = 1
def f1():
x = 2
def f2():
# nonlocal x
x = 3
f2()
print(x)
f1()
2
x = 1
def f1():
x = 2
def f2():
nonlocal x
x = 3
f2()
print(x)
f1()
3
注意:
在局部想要修改全局的可变类型,不需要任何声明,可以直接修改。
在局部如果想要修改全局的不可变类型,需要借助global声明,声明为全局的变量,即可直接修改。
作者:djhsj7
链接:https://www.pythonheidong.com/blog/article/14065/a7a676d14e2c55b4946b/
来源:python黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 python黑洞网 All Rights Reserved 版权所有,并保留所有权利。 京ICP备18063182号-1
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!