鱼C论坛

 找回密码
 立即注册
查看: 1767|回复: 7

[技术交流] Python global

[复制链接]
发表于 2020-3-27 10:06:29 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 wuqramy 于 2020-3-27 10:55 编辑

Python global

语法:
global varname

描述:

Python中定义函数时,若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。

实例:
>>> x = 1
>>> def fun1():
        x = 2

        
>>> fun1()
>>> print(x)
1
>>> # 解析:在fun1函数中并未在x前面加global,所以fun1函数无法将x赋为2,无法改变x的值
>>> x = 1
>>> def fun1():
        global x
        x = 2

        
>>> fun1()
>>> print(x)
2
>>> # 解析:global需要在函数内部声明,若在函数外声明,则函数依然无法操作x


点评

我很赞同!: 3.0
我很赞同!: 3
建议添加个 “描述”  发表于 2020-3-27 10:34

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2020-3-27 11:32:37 | 显示全部楼层
       应该明确,"操作"是特指赋值,因为,在函数内部,在未使用 global 关键字对全局变量进行声明的情况下,是可以访问全局变量的,唯一的限制是全局变量不能出现在赋值语句的左边,也就是说,不能被赋值,如果赋值了,那就会新产生一个与全局变量同名的局部变量。而加上 global 关键字的声明之后,就没有这个限制了。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-27 10:09:09 | 显示全部楼层
你知道这段代码为什么会报错吗
import random

def func(ok):
    if ok:
        return random.randint(1, 10)
    else:
        import random
        return random.random()

func(True)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-27 10:11:35 | 显示全部楼层
一个账号 发表于 2020-3-27 10:09
你知道这段代码为什么会报错吗:

要在函数内部导入?
Traceback (most recent call last):
  File "C:\Pythonstudy\test.py", line 10, in <module>
    func(True)
  File "C:\Pythonstudy\test.py", line 5, in func
    return random.randint(1, 10)
UnboundLocalError: local variable 'random' referenced before assignment
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-27 10:13:45 | 显示全部楼层
wuqramy 发表于 2020-3-27 10:11
要在函数内部导入?

import random 相当于在 func 里边定义了 random 这个变量,

根据 bleg 的顺序,覆盖了全局的 random。

但是进入第一个分支的时候 random 这个名字还没有被绑到模块上。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-3-27 10:35:39 | 显示全部楼层
wuqramy 发表于 2020-3-27 10:11
要在函数内部导入?

改成这样就木有问题了:
import random

def func(ok):
    global random
    if ok:
        return random.randint(1, 10)
    else:
        import random
        return random.random()

func(True)
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-3-27 10:52:04 | 显示全部楼层
一个账号 发表于 2020-3-27 10:35
改成这样就木有问题了:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-16 19:26

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表