函数之命名关键字

命名关键字

命名关键参数: 在函数定义阶段,写在* 和**可变长参之间的形参,称之为命名关键字
       在给命名关键字参数传值的时候,只能用关键字为其传值

def func(x,y=1,*args,z=3,m,**kwargs):
    print(x,y)
    print(args)
    print(z,m)
    print(kwargs)
func(1,2,1,2,3,4,5,6,7,78,8,9,0,z=69,m=999,o=666999,l = 999666)

  

函数是第一类对象:

函数名指向的值可以被当做参数传递

1.函数名可以被传递

  正常的命名:

name = 'yulong' # 声明一个变量名 name = 'yulong'
x = name          # 重新指定x = name
print(x,id(x))     # 输出x的值和id
print(name,id(name)) # 输出name 的值和id  发现x 和name的值和id 都相同

 那么建立一个函数呢?

def func():
    print('from func')
print(func)  # <function func at 0x00000238D4C1C048>
# print(id(func)) # 2443110891592
f = func   # 给函数名指定一个值,让这个值当做函数传递
f()    # 其实指向的也是函数在内存中的地址
func()
print(f)  # <function func at 0x0000020152A0C048>
print(func)

  

2、函数名可以被当做参数传递给其他函数

def func():
    print("阿西吧")


def index(age):
    # print(age)
    age()
    print('卡卡西')
# index(2)
index(func)   # 把函数func传递到index函数 那么func就等与age  那么age()就等与在index函数里面运行了func函数

  

3、函数名可以被当做函数的返回值

def ceshi():
    print('ceshi')

def ceshi1():
    print('ceshi1')
    return ceshi        # 把ceshi函数名当做ceshi1的返回值
res = ceshi1()          # 运行函数ceshi1  那么res就等与ceshi  res()和ceshi()同等功能能
# res = ceshi()
print(res)
res()

  

4、函数名可以被当做容器类型的参数

def fuc():
    print('你大爷')

print(fuc)  #输出的是这个函数的地址

l= [1,2,fuc,fuc]  #输出也是函数的地址
print(l)
print(l[2]())
cao = l[2]
print(cao)
cao()

  函数执行的顺序:

函数的嵌套调用

函数的嵌套定义:该函数用户可以通过传参的不同控制函数执行不同的功能

def my_max(x, y):
    if x > y:
        return x
    return y

def my_max_and_mini(a, b, c, d):
    res = my_max(a, b)
    res1 = my_max(res, c)
    res2 = my_max(res1, d)
    return res2

  嵌套示意图:

空间名

名称空间是什么? 名称空间就是一个放置名字的地方
详细解释:存放的是变量名与变量值的内存地址得绑定关系的地方
要想访问一个变量的值 必须先去名称空间中拿到对应的名字 才能够访问变量的值

空间的理解图:

名称空间的分类:
1.内置空间
2.全局空间
3.局与空间局部空间
1:内置空间就是python解释器定义好的名字,也可以说自带的
2.全局空间就是文件级别的代码比如直接命名的a=1 那么a就是全部空间中的名字
3、局部空间就是包含在全局空间里面的一个小块,好比函数体内所创建的名字,都属于局部空间的

名称空间的生命周期:
内置名称空间:

只要python解释器已启动立马创建关闭python解释器的时候内置名称空间自动销毁

全局名称空间:

只要你右键运行py文件会自动创建py文件程序运行结束自动销毁

局部名称空间:

函数被调用的时候自动创建函数指向结束立即销毁(动态创建动态销毁)

内置名称空间:

只要python解释器已启动立马创建关闭python解释器的时候内置名称空间自动销毁

全局名称空间:

只要你右键运行py文件会自动创建py文件程序运行结束自动销毁

局部名称空间:

函数被调用的时候自动创建函数指向结束立即销毁(动态创建动态销毁)


函数在定义阶段查找名字的顺序就已经固定了 不会因为函数的调用位置变化而改变(******)

名字的查找顺序呢
首先我们先确定我们的当前位置在哪?
1.站在全局空间: 全局空间>>>>内置空间
2.站在局部空间: 局部空间>>>>全局空间>>>>>内置空间

示例:

原文地址:https://www.cnblogs.com/ioipchina/p/11167376.html