函数基础操作2


注:函数必须先定义后调用
函数的语法结构
def 函数名(参数1, 参数2):
'''函数注释'''
函数代码体
return 返回值

一.名称空间

1.名称空间的定义:存放变量名与变量值绑定关系的地方
2.名称空间分为三大类
2.1内置名称空间:
python解释器定义好的
2.2全局名称空间:
在py文件中编写的代码运行产生的名字都会存到全局名称空间内
neme = 'thn'   # name 变量名存入
dae fun():   # 未被调用的函数名fun 存入 
  pass
for i in range(5) #for循环里 i 变量名 存入
2.3局部名称空间
函数体代码运行时产生的都是局部名称空间
def fun():
  name = 'thn'   # neme 存入
"""
注:都是存活周期的
1.内置名称空间
python解释器运行 产生
python解释器关闭 销毁
2.全局名称空间
py文件开始运行 产生
py文件运行结束 销毁
3.局部名称空间
函数体代码开始运行 产生
函数体代码运行结束 销毁
"""

二.名字的查找顺序

怎样查找名字呢?
1.在查找名字的时候要认知自己在哪个空间(内置 全局 局部)
1.1在局部也就是底层
'局部名称空间 >>> 全局名称空间 >>> 内置名称空间'
1.2在全局
全局名称空间 >>> 内置名称空间
实验让三个名称空间中都有同一个名称
len = 全局

def fun():
  print(' ')
fun()
print(len) = 局部 
# 调用函数局部空间

三.作用域

作用域就是名称空间可以作用的范围
1.置名称空间
程序任意阶段任意位置均可使用(全局有效)
2.全局名称空间
程序任意阶段任意位置均可使用(全局有效)
3.局部名称空间	
一般情况下只在各自局部名称空间中有效(局部有效)
'也可以通过其他方法打破这个规则'

四.global与nonlocal关键字

1.glonal关键字:局部修改全局不可改变类型
x = 111
def index():
x = 222  # 并不是在修改全局的x 而是在局部名称空间中创建了一个新的x
如果需要修改
global x
x = 666
index()
print(x) # 结果是666 如果修改的话是需要用到关键字global
1.1如果局部名称空间嵌套的情况下 内层如果想要修改外层
数据是不可变类型
需要使用关键字nonlocal
数据是可变类型(局部名称嵌套 内层修改)
不需要使用关键字nonlocal
def index():
    x = 111  # 在index的局部产生一个x=111
    l1 = [11, 22, 33]
    def f1():
    l1.append(44)
    index()
结果是:  l1 = [11, 22, 33,44]

五.函数名的多种用法

1.函数名可以当做变量名进行赋值
def index():
  print('from function index')
index()
结果:'from function index'
2.也可以指向函数体代码
res = index
print(res)
res() 
结果:from function index
3.函数名还可以当成函数的实参
def index():
    print('from index')
def func(a):
    print('from func')
    print(a)
    a()
func(index)
结果:
from func
<function index at 0x00000000025CC400>
from index
4.还可以当函数的返回值
def func():
    print('from func')
    return func
func()
结果:from func
5.可以作为容器类型(列表:元组:字典等)的元素
def index():
    print('from index')
l1 = [11, 22, 33, 44, index]
print(l1)
结果:
[11, 22, 33, 44, <function index at 0x00000000025CC400>]

六.函数的镶嵌

x = 111
def f1():
    x = 222
    def f2():
        x = 333
        def f3()
            x = 444 
            print(x)
        f3()
    f2()
f1()
结果是:444   由上往下调用 由下往上查

posted @ 2022-03-17 20:04  笑舞狂歌  阅读(40)  评论(0编辑  收藏  举报