当前位置: 首页 > news >正文

Python中函数与全局对象间的关系

Python中函数与全局对象间的关系

1、函数内调用全局对象

1.1 函数内部可不可以调用全局的函数对象

函数内部可以直接调用全局创建的函数。当函数内部创建与全局具有相同函数名的对象时,函数内的函数将会取代全局的函数。以下是一个示例:

# 全局函数defadd(a,b):returna+bdefmulti(a,b):# 调用全局的add函数c=add(a,b)c+=areturnc# 测试result=multi(2,3)print(result)# 输出: 7

当函数内部有同名函数时:

# 全局函数defadd(a,b):returna+bdefmulti(a,b):# 局部函数,覆盖全局的add函数defadd(a,b):returna-b# 调用局部的add函数c=add(a,b)c+=areturnc# 测试result=multi(2,3)print(result)# 输出: 1

1.2 函数内部可不可以调用全局的变量

全局变量可以分为可变变量和不可变变量,不可变变量有字符串、整数、浮点数、元组等;可变变量有列表、字典、数组等。在函数内部可以访问/查看函数外的可变或不可变变量。当在函数内部创建一个与全局相同名字的变量时,局部变量会自动覆盖全局变量。

# 全局变量global_var=10deffunc():# 访问全局变量print(global_var)# 输出: 10# 创建局部变量,覆盖全局变量global_var=20print(global_var)# 输出: 20func()print(global_var)# 输出: 10(全局变量未被修改)

1.3 函数内部可不可以修改全局的变量

函数内部可以修改全局的可变变量,例如字典、列表或者是tensor。如果是不可变对象,那么首先需要在函数内部声明全局变量,之后才可以对该变量进行修改。声明是全局变量的语法是global variance,声明之后便可以修改。

# 全局可变变量global_list=[1,2,3]defmodify_list():# 修改全局可变变量global_list.append(4)modify_list()print(global_list)# 输出: [1, 2, 3, 4]

对于不可变变量:

# 全局不可变变量global_var=10defmodify_global():# 声明使用全局变量globalglobal_var global_var=20modify_global()print(global_var)# 输出: 20

在函数嵌套函数的场景中,修改嵌套函数外的不可变变量,需要使用nonlocal声明变量:

defouter():x=10definner():nonlocalx x=20inner()print(x)# 输出: 20outer()

2、 全局调用函数内创建的对象

2.1 调用函数内创建的变量

全局不能直接调用函数内创建的变量,但是在以下三种场景中,可以进行调用:

场景1:将希望调用的变量通过return导出到全局作用域中

deffunc():local_var=10returnlocal_var# 获取函数内的变量result=func()print(result)# 输出: 10

场景2:通过global ,将局部变量声明为全局变量

deffunc():globalglobal_var global_var=10func()print(global_var)# 输出: 10

场景3:函数外有可变对象,例如,列表。将函数中创建的局部变量存入全局的可变对象中

# 全局可变对象global_list=[]deffunc():local_var=10global_list.append(local_var)func()print(global_list)# 输出: [10]

2.2 调用函数内创建的嵌套函数

函数是一等对象,它可以像变量一样赋值,也可以作为参数传递给函数,可以存储进可变对象中,甚至可以作为函数的返回值。

defouter():definner():print("这是内部函数")# 返回内部函数returninner# 获取内部函数inner_func=outer()inner_func()# 输出: 这是内部函数

注意:赋值时不要加括号,加括号会进行调用函数的逻辑:

# 正确Function_copy=outer# 错误(会立即调用函数)Function_copy=outer()

那么在函数外访问函数内创建的函数,逻辑和访问函数内部创建的变量的逻辑一样。

http://www.gsyq.cn/news/138520.html

相关文章:

  • LangFlow InfluxDB适配器支持时序数据分析
  • 动手学深度学习之第三章的第一部分笔记
  • 国产操作系统 KylinOS 学习实践心得:从安装到实战全攻略
  • Windows下cp2102usb to uart bridge通信调试完整指南
  • 企业级七彩云南文化旅游网站管理系统源码|SpringBoot+Vue+MyBatis架构+MySQL数据库【完整版】
  • LangFlow电商推荐引擎构建案例分析
  • LangFlow问答系统搭建全过程演示
  • 蜂鸣器报警模块入门须知:新手常见接线错误解析
  • Go语言编译桌面应用为单文件可执行文件实践指南
  • LangFlow HTTPS加密保障数据传输安全
  • LangFlow结合RAG架构的可视化实现方法
  • 【程序干货】YOLO 预测检测结果不顺心?手把手教你自定义“红框白字”专业视觉效果(附完整代码)
  • LangFlow用户反馈:开发效率显著提升,适合新手和团队
  • LangFlow自动化报告生成器的设计与实现
  • 69、深入了解Windows Intune与组策略的协同应用
  • LangFlow自动化测试功能助力CI/CD集成
  • LangFlow深度解析:如何用图形化界面玩转LangChain应用
  • 通俗解释W5500以太网模块原理图使能控制
  • LangFlow内置模板库发布,涵盖常见AI应用场景
  • LangFlow企业内训课程设计助手
  • LangFlow投资者关系问答生成器
  • LangFlow公司年会节目策划建议生成
  • LangFlow图像生成工作流搭建实录
  • 基于Python+大数据+SSM西南天气数据分析与应用(源码+LW+调试文档+讲解等)/西南地区天气分析/西南天气数据研究/天气数据分析方法/天气数据应用案例/西南气候数据分析/天气数据应用领域
  • Centos7安装Node.js环境
  • 基于Python+大数据+SSM基于数据挖掘的高考志愿推荐系统(源码+LW+调试文档+讲解等)/高考志愿填报系统/志愿推荐工具/高考志愿辅助系统/志愿填报推荐平台
  • LangFlow部署指南:三步完成私有化AI工作流平台搭建
  • LangFlow商品详情页文案优化工具
  • 千问App发布2025十大AI提示词,股票位列榜首
  • Arduino平台下L298N电机驱动模块全面讲解