python中函数的参数以及名称空间

 函数参数的概念

 

  • 函数参数的两大分类
  • 位置参数和关键字参数
  • 默认参数
  • 可变长参数(重点)
  • 名称空间的概念

 

函数参数的两大分类

形参  和  实参

形参:在函数定义中从左向右写入的变量名就叫做形式参数,简称 形参

下图中的a 和 b 就是形参

 

 

 

实参:在函数调用阶段从左往右依次写入的变量值就叫实际参数,简称 实参

下图中的 1 和 2 就是实参

 

形参和实参相当于  变量名 和 变量值。

变量名 与 变量值 在函数调用阶段 临时调用,函数运行结束之后,则断开立马断开连接

## 注意点:

# 形参的表现形式就一种
# 实参的表现形式有多种

 

位置参数 和 关键字参数

 位置参数:


    # 从左往右依次写入的数据就是位置参数
位置形参
    # 在定义函数的时候,从左往右依次写入的变量名就是位置形参(如下图中的 a b)
位置实参
    # 在函数调用阶段,从左往右依次写入的变量值就是位置实参(调用函数func()时,输入的1,2)

 

 

 

关键字参数:

下午中的a , b 就是关键字

 

'''
    位置形参和位置实参的关系:
        位置实参从左往右依次传递给位置实参(一一对应)
'''

默认参数

在定义函数阶段,分两种情况:

  1.如果没有给形参传递值,那就使用默认的

  2.如果给形参传递了值,那就用传递的值

  3.默认参数只要不放在  **kwargs  后面都可以

    下图中 a 和 b 传了 实参 1 和 2 ,C没有传值,那就是默认9,如果传了值,那就用上传的值

 

 

可变长参数

 1 无论在函数调用阶段,传多少个参数都可以, *args(*号后面可以为任意,args是python中约定促成的规定)输出的结果是元祖,如下图

 

 

 

2 无论我在函数调用阶段传递多少个 关键字实参 都可以。函数中以**kwargs(同样只是约定俗成)

**kwargs 输出的结果 是 字典(把多余的关键字参数赋给了**号后面的变量名)

 

 

 

3 无论我在函数调用阶段传递多少个位置参数和关键字参数都可以,如下图

 

 

 

 

组合使用

 

综上所述所有参数可任意组合使用,但定义顺序必须是:位置参数、默认参数、*args、命名关键字参数、**kwargs      

位置实参1被*接收,以元组的形式保存下来,赋值给args,即args=(1,),关键字实参z=3,y=2被**接收,以字典的形式保存下来,赋值给kwargs,即kwargs={‘y’: 2, ‘z’: 3}

然后再启用func(),得到结果1,2,3

 

 

 

 

 

 

名称空间的概念

1. 什么是名称空间?
    就是绑定变量名和变量值的地方

2. 名称空间的分类:
    -1 内置名称空间
        在python解释器中
         len()
         print()
         open()

  -2 全局空间名称

   靠边定格写的名称,是全局空间名称

  -3 局部名称空间
        # 在函数体中存在的都是局部的

 

名字的查找顺序

1. 看自己位置在哪里:
        如果在局部:局部    >>>    全局    >>>  内置
        如果在全局: 全局   >>>  内置

复制代码
# 局部名称空间的嵌套:
    
def f1():
    # x = 222

    def f2():
        # x = 333

        def f3():
            # x = 444

            def f4():
                # x = 555

                def f5():
                    # x = 666
                    print(x)
                f5()
            f4()
        f3()
    f2()
f1()
复制代码

 

 

拓展面试题

 


下图中输出的结果,是什么,原理又是什么

输出结果中,其中 z 值 是之前的100

原理: a初始指向的内存地址上的数据是100,即a = 100

    通过z 重新赋值之后,z同样指向100的内存地址,即z = 100(这里相当于成了默认参数)  和 a = 100

    函数func内部,对 a 重新赋值之后,a 指向一个新的内存地址200

    所以,输出的结果,是 1,2,100和 200

 

posted @   Damon1899  阅读(310)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 没有Manus邀请码?试试免邀请码的MGX或者开源的OpenManus吧
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· C#/.NET/.NET Core优秀项目和框架2025年2月简报
· DeepSeek在M芯片Mac上本地化部署
· 葡萄城 AI 搜索升级:DeepSeek 加持,客户体验更智能
点击右上角即可分享
微信分享提示