全局变量global的用法

摘要:
简单说下global的用法,global是在函数内部使用,当你想在函数内部给一个在外部定义的变量赋值时就要用global先声明一下,看清楚这里说的是“赋值”。先卖个关子,继续往下看。list1 = [1,2,3,4,5] str1 = 'hello world!' def fun():     list1 = [6,7,8,9,10]   &

简单说下global的用法,global是在函数内部使用,当你想在函数内部给一个在外部定义的变量赋值时就要用global先声明一下,看清楚这里说的是“赋值”。先卖个关子,继续往下看。


list1 = [1,2,3,4,5]
str1 = 'hello world!'
def fun():
    list1 = [6,7,8,9,10]
    str1 = '你好,世界!'
    print(list1)
    print(str1)
fun()
print(list1)
print(str1)

运行结果:


[6, 7, 8, 9, 10]
你好,世界!
[1, 2, 3, 4, 5]
hello world!


可以看到,外部定义了两个变量,一个列表,一个字符串,直接给外部变量赋值都没有成功,外部变量的值都未修改。


加上global声明看下:


list1 = [1,2,3,4,5]
str1 = 'hello world!'
def fun():
    global list1,str1
    list1 = [6,7,8,9,10]
    str1 = '你好,世界!'
    print(list1)
    print(str1)
fun()
print(list1)
print(str1)

运行结果:


[6, 7, 8, 9, 10]
你好,世界!
[6, 7, 8, 9, 10]
你好,世界!


外部变量都成功被修改。说明不管外部变量的类型是什么,如果在函数内部想对它做赋值操作就必须使用global声明。


接下来看另外一个操作:


list1 = [1,2,3,4,5]
def fun():
    list1.append('添加了')
    print(list1)
fun()
print(list1)

外部定义了列表类型的变量,在函数内部没有进行global声明,使用列表的方法增加了列表元素,最后发现外部的列表也被修改了,现在知道了文章开头强调的赋值,可以修改的数据类型在函数内部做修改操作是不需要声明global的,但是赋值就一定要声明global。

免责声明:文章转载自《全局变量global的用法》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇FormattableString 取代特定区域字符串gstreamer简介下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

局部变量和全局变量的区别

局部变量和全局变量的区别局部变量可以与全局变量重名,但是局部变量会屏蔽全局变量。要使用全局变量,需要使用::。在函数体内引用变量会用到同名的局部变量而不是全局变量,对于一些编译器来说,在同一个函数体内可以定义多个同名的局部变量。例如我们可以在一个函数内部,在两个循环中都定义同名的局部变量i,而局部变量i的作用域在那个循环体内        具体来说,全局变...

Python 中全局变量的实现

一、概述 Python 中全局变量的使用场景不多,但偶尔也有用武之处。 如在函数中的初始化,有时需要从外部传入一个全局变量加以控制。或者在函数中,使用连接池时,也可能有使用全局变量的需要。 广义上的全局变量有以下两种: 使用 global 进行修饰 使用复合数据类型,如类、列表、数组等 有点类似 Java 中的 Final 变量,Final 变量是一旦...

1/28 对于Vue.js 中 Object.freeze( )的理解

开门见山先总结,如有错误,大佬请指正 1. const  用于单一的变量上,对于对象的属性,const 不能做到 阻止 添加、修改 对象属性 2. freeze 只要是 对象 都可以 阻止 其发生改变 ( 弥补了 const 的不足,即 不能阻止 添加 修改属性) 3. Vue 是响应式的,所以对于 data 是无法 freeze 的   ( /* 上面的...

jmeter垮线程组设置全局变量(传递参数)

全局变量是指可以跨线程组调用。 第一种方式:通过函数助手__setProperty  设置 ,调用的时候直接用函数助手中__property获取变量。  生成:${__setProperty(newordertime1,${cancelEndTime},)};   获取:${__property(newordertime1)}  第二种方式:使用Bea...

Jmeter跨线程组传递变量

跨线程组传递变量只能通过属性来传递,并且属性只能传字符串变量。 如果想传数组变量,需要先将数组转化为字符串,在下一个线程组再转化为数组。 【注意】在使用时要注意线程组的执行顺序。需要勾选测试计划里的独立运行每个线程组按钮。 一、beanshell自带方法 props.put("变量名","值") 全局变量赋值 props.get("变量名") 获取全局变量...

[InstallShield]如何在不同的Script文件之间共享全局变量

看完标题,好吧,我承认,最近搞的事情有点杂,Python,C#,现在又搞起InstallShield了。。如果你尚不知道InstallShield为何物,有何用处,到底是不是可以吃的东西,那么请自行放狗搜之。 废话少说,在编写InstallShield的Script的时候,遇到一个问题:我在Setup.rul脚本里面定义了一些全局变量,如何在别的脚本中使用...