Python函数中global、nonlocal与yield from关键字详解

温以宁
温以宁
发布时间:2026-10-15 | 5人浏览过
原创

本文详细解析Python函数中三个关键关键字的使用场景。global用于在局部作用域重新赋值全局变量;nonlocal用于修改上一级嵌套作用域的变量;yield from(Python 3.3+)用于在生成器中委托调用其他生成器,简化代码结构。

1. global关键字

在默认情况下,局部作用域对全局变量的访问权限仅限于:读取变量值或修改可变类型(如列表、字典)的内部元素,而不能直接对全局变量本身进行重新赋值操作。

读取:

CITY=['北京','上海']
def func():
    print(CITY) # ['北京','上海']
func()

修改内部元素(可变类型)

CITY=['北京','上海']
def func():
    CITY.append('安徽')
    print(CITY) # ['北京','上海','安徽']
func()
print(CITY) # ['北京','上海','安徽']

无法对全局变量重新赋值

CITY=['北京','上海']
def func():
    CITY=['安徽']
    print(CITY)  #['安徽']
func()
print(CITY) # ['北京','上海']

若需在局部作用域中对全局变量进行重新赋值,必须使用global关键字声明。

CITY=['北京','上海']
def func():
    global CITY=['安徽']
    print(CITY)  #['安徽']
func()
print(CITY)  #['安徽']

2. nonlocal关键字

该关键字用于将上一级作用域(非全局)中的变量重新赋值。

name = 'root'
def outer():
    # name=123
    name = '你好'
    def func():
        # 将又上一级变量name重新赋值为123
        nonlocal name
        # name=123
        name = "wxy"
        def inner():
            #将上一级变量name重新赋值为123
            nonlocal name
            name = 123
        inner()
        print(name)
    func()
    print(name)
outer()
print(name)
# 123
# 123
# root

3. yield from

yield from语法是在Python 3.3版本中引入的。

它允许在yield函数(生成器)中直接调用并委托给其他的yield函数(生成器)。

def func():
    yield 2
    yield 2
def func1():
    yield 1
    yield 1
    yield from func()
    yield 1
from i in func1():
    print(1)

到此这篇关于python函数常见关键字分享的文章就介绍到这了,更多相关python函数关键字内容请搜索本站以前的文章或继续浏览下面的相关文章希望大家以后多多支持本站!

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表