news 2026/6/23 1:56:20

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

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
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()

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

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/6/23 16:59:45

面向工业控制的模拟电子技术基础入门必看指南

面向工业控制的模拟电子技术入门:从传感器到执行器的完整信号链解析在智能制造与工业4.0浪潮席卷全球的今天,自动化系统正变得越来越“聪明”。然而,再先进的PLC、再强大的边缘AI处理器,如果无法准确感知物理世界的变化——温度漂…

作者头像 李华
网站建设 2026/6/23 1:45:58

65、利用组策略管理硬件访问与打印机分配全攻略

利用组策略管理硬件访问与打印机分配全攻略 1. 组策略中硬件禁用与启用选项的缘由 在组策略里,设备扩展项有禁用和启用两个选项。借助组策略对象(GPO)过滤或组策略首选项扩展的项目级别目标设定,就能灵活决定谁的哪些硬件该启用,哪些该禁用。比如,除了实验室技术员需要…

作者头像 李华
网站建设 2026/6/23 17:03:33

f1系列替换下载失败

在 STM32F1 系列中, startup_stm32f10xxx_ld.s 、 startup_stm32f10xxx_md.s 、 startup_stm32f10xxx_hd.s 这几个启动文件的区别主要在于 芯片的 Flash 容量(密度),不同密度的芯片对应不同的启动文件。- ld (Low-de…

作者头像 李华
网站建设 2026/6/23 16:54:12

LangFlow内置模板库发布,涵盖常见AI应用场景

LangFlow 内置模板库发布,开启AI应用可视化开发新纪元 在大模型技术席卷各行各业的今天,越来越多团队希望快速构建智能问答、文档处理、自动化代理等AI系统。然而现实是:即便有了LangChain这样强大的框架,开发者仍需面对复杂的API…

作者头像 李华
网站建设 2026/6/23 12:34:57

Centos7安装Maven环境

1、使用yum(CentOS 7及更早版本) 添加EPEL仓库‌(如果尚未添加) sudo yum install epel-release‌安装Maven sudo yum install maven2、下载并手动安装(适用于所有版本的CentOS) 访问Maven官网 https://mav…

作者头像 李华
网站建设 2026/6/23 17:02:24

【Arbess】1、安装Arbess

1、关于Arbess Arbess包含流水线管理、流水线设计、流水线执行、测试报告、统计分析等模块,支持串行并行可视化设计方式,支持丰富多样的任务类型,支持分布式执行流水线,界面操作简洁明了、开源免费。 2、安装Arbess 官方安装文…

作者头像 李华