函数参数和名称空间

函数参数

  参数的两大类型

    形式参数

      在函数的定义阶段括号内填写的参数,简称“形参”。

      形参只有一种表现形式就是变量名。

def func(a, b):  # a和b就是函数func的形参
    pass
      

 

    实际参数

      在函数的调用阶段括号内传入的参数,简称实参。

      实参有多种表现形式,值、变量名、返回值等,但核心就是数据值。

        func(1,2)  # 数据1和2就是函数func的实参

 

    实参与形参的关系

      我们可以将形参看成是变量名,实参看做变量值。两种在函数调用阶段绑定,函数运行结束断开

 

 

  位置参数

    指按照从左往右的顺序依次填入的参数。

    位置形参

      指在函数的定义阶段按从左到右顺序依次填入括号的变量名。

    位置实参

      指在函数的调用阶段安从左到右顺序依次填入括号的变量名。

    关键词实参

      在函数调用阶段使用形参名=数据值的方式知名道姓的传值。

func(1,b = 2)  # b = 2就是函数func的关键词实参

    使用规则

      1.位置形参与位置实参在函数调用阶段,按照位置一一对应。

      2.位置参数在绑定的时候数量必须一致。

      3.关键词实参不能与位置实参绑定同一个形参,并且不能写在位置实参之前。

 

 

  默认参数

    默认形参

      函数在定义阶段就可以给形参赋值。

      在函数调用阶段如果不为形参赋值则使用默认的值。

      在函数调用阶段如果为该形参赋值则使用被赋予的值。

 

 

 

      需要注意的是,默认形参必须在位置形参之后。

 

 

  可变长参数

     可变长形参

      1.‘*’号后跟变量名

        ‘*’在形参中的作用是接收多余的位置参数,并组织成元组的形式赋值给‘*’号后的变量名。

        可以使函数无论传入多少位置参数都可以正常运行。

 

 

      2.‘**’后跟变量名

        ‘**’号的作用是接收多余的关键字参数,并组织成字典的形式赋值给‘**’号后面的变量名。

        可以使函数无论传入多少个关键词参数都可以正常运行。

 

 

      3.‘*’号和‘**’号组合使用

        可以使一个函数无论传入多少位置参数和关键字参数都可以正常运行。

 

 

      需要注意的是,‘*’号后可以跟任何变量名,但python中推荐使用

        *args

        **kwargs

    可变长实参

      1.‘*’在实参中的使用

        ‘*’号在实参中会将列表、元组内的元素打散成位置参数的形式一一传值。

 

 

      2.‘**’在实参中的使用

        ‘**’号在实参中会将字典的键值对打散成关键字参数的形式一一传值。

 

 

  命名关键词参数

    用‘*’分隔后面的参数必须使用关键字参数的形式。

 

名称空间

  定义

    名称空间就是用于存放变量名与变量值绑定关系的地方。

  分类

    1.内置名称空间

      内置名称空间就是python提前给定义好的。

      例如:print、len等。

    2.全局名称空间

      在py文件中定格编写的代码运行后都会存入全局名称空间。

      另外,像是if、for、while等语句下的变量,虽然不顶格,但也是属于全局名称空间。

    3.局部名称空间

      函数体代码运行之后产生的都是局部名称空间。

 

 

  存活周期

    1.内置名称空间

      随python解释器启动与关闭而创建和销毁

    2.全局名称空间

      随着py文件的运行和结束而创建和销毁

    3.局部名称空间

      随着函数体代码的执行与结束而创建和销毁

 

 

  名字的查找顺序

    1.在局部查找

      先找局部,再找全局,再找内置。

    2.在全局查找

      先找全局,再找内置,不会找局部。

    3.局部名称空间的嵌套

      函数在定义阶段名字的查找顺序就已经固定了。

 

 

      特例:当x的赋值在print之后的时候会报错,因为他在局部找到了但还没有定义。

 

posted @   临江沂水  阅读(148)  评论(0编辑  收藏  举报
编辑推荐:
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
· 开发者必知的日志记录最佳实践
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示