wuqramy 发表于 2020-3-27 10:06:29

Python global

本帖最后由 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


jackz007 发表于 2020-3-27 11:32:37

       应该明确,"操作"是特指赋值,因为,在函数内部,在未使用 global 关键字对全局变量进行声明的情况下,是可以访问全局变量的,唯一的限制是全局变量不能出现在赋值语句的左边,也就是说,不能被赋值,如果赋值了,那就会新产生一个与全局变量同名的局部变量。而加上 global 关键字的声明之后,就没有这个限制了。

一个账号 发表于 2020-3-27 10:09:09

你知道这段代码为什么会报错吗{:5_97:}:

import random

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

func(True)

wuqramy 发表于 2020-3-27 10:11:35

一个账号 发表于 2020-3-27 10:09
你知道这段代码为什么会报错吗:

{:10_258:}要在函数内部导入?
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

一个账号 发表于 2020-3-27 10:13:45

wuqramy 发表于 2020-3-27 10:11
要在函数内部导入?

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

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

但是进入第一个分支的时候 random 这个名字还没有被绑到模块上。

一个账号 发表于 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)

wuqramy 发表于 2020-3-27 10:52:04

一个账号 发表于 2020-3-27 10:35
改成这样就木有问题了:

页: [1]
查看完整版本: Python global