python - 为什么我的函数使用局部变量而不是全局变量?
问题描述
所以做了一个简单的例子来帮助自己更好地理解范围。
据我了解,函数中的变量仅对该函数是本地的。如果要使用函数外部的变量,该变量与函数内的局部变量同名,则可以使用 global 关键字,它告诉函数忽略具有该名称的任何局部变量并仅使用全局变量。
所以这个程序应该首先打印全局变量的值,然后调用函数并再次打印全局变量,因为它应该忽略局部变量,但无论如何它都会打印局部变量。Python 导师告诉我它完全跳过了全局语句。
cheese = 99
def func():
global cheese
cheese = 100
print(f"Global cheese is {cheese}")
print(f"Global cheese is {cheese}")
func()
输出:
全球奶酪是99
全球奶酪是 100
然后当我在 print 语句之前调用函数时,变量被更改为局部变量的值。这是为什么?
cheese = 99
def func():
global cheese
cheese = 100
print(f"Global cheese is {cheese}")
func()
print(f"Global cheese is {cheese}")
输出:
全球奶酪是 100
全球奶酪是 100
解决方案
但是您声明要在函数中使用全局变量。因此,当您分配一个值时,它会更改全局变量。
cheese = 99
def func():
global cheese # Declares that you want to use global cheese variable
cheese = 100 # This updates the global cheese variable
print(f"func() cheese is {cheese}")
def local_func():
cheese = 101
print(f"local_func() cheese is {cheese}")
print(f"Global cheese is {cheese}")
func()
print(f"Global cheese is {cheese}")
local_func()
print(f"Global cheese is {cheese}")
结果是:
Global cheese is 99
func() cheese is 100
Global cheese is 100
local_func() cheese is 101
Global cheese is 100
推荐阅读
- python-3.x - 按下“Ctrl+C”时 python 回显服务器的 Unicode 错误
- javascript - 单击带有 HTML 脚本的网页上的所有复选框(quickbooks/Safar)
- php - 数据库中的时间段被预订 php 代码复制而不是跳过
- sql - 来自单个表的比较报告的 SQL 查询
- html - 这是选择的 chrome 错误吗?
- azure-devops - 基于分支的条件构建,用于在阶段下使用不同模板的多阶段管道
- javascript - Websockets 在握手时总是失败 - 404
- linux - glibc Arena system_mem 加起来不等于 VSS 或 RSS 的量
- java - 如何在 jOOQ 中转换“to_json()”PostgreSQL 函数?
- java - 如何保存类文件对象