Python 形参和实参,局部变量和全局变量的含义理解及使用-爱代码爱编程
目录
1、形参和实参
1.1 形参的含义及使用
- 形参 :形式参数,表示函数内所要用的参数的类型和名字,没有确定值。
形参变量只有在被调用时才分配内存单元,在调用结束时, 即刻释放所分配的内存单元。因此,形参只有在函数内部有效。 函数调用结束返回主调函数后则不能再使用该形参变量。(定义函数的时候,括号里面写的那个参数名称,他只对那个函数内部有效,也就是函数内部就可以直接用这个名称,其他地方即使有同样的名称,也是和这个函数里面不同的。)
def function(name):
这里面的参数name就是形参,它代表的是所用参数的形式。只占据一个参数位置,没有具体值。
1.2 实参的含义及使用
- 实参 :实际参数,是调用函数时传递的值,也就是执行这个参数时真正的参数。实参是实际存在的,已经确定的参数,常量,变量,表达式,都是实参。
#定义函数
print(name + ‘123’)
#调用函数
function(‘hello’)
上面print中的name为实参,调用函数中的hello也是实参,因为它们代表的是具体的参数值。
2、局部变量和全局变量
2.1 变量作用域的概念
首先我们要知道变量作用域:变量作用域指的是变量生效的范围,主要分为两类:局部变量和全局变量。
(1)变量作用范围:可操作范围;
(2)Python 是静态作用域,变量的作用域源于它在代码中的位置;
(3)在不同的位置,可能有不同的命名空间。
变量的作用域决定了在哪一部分程序你可以访问哪个特定的变量名称。两种最基本的变量作用域是:全局变量、局部变量。
2.2 局部变量
- 定义:在函数内部定义的变量,它的作用域也仅限于函数内部,出了函数就不能使用了,我们将这样的变量称为局部变量。
#定义一个函数,声明一个变量:分别测试函数体内访问、函数体外访问
def testA():
a = 100
print(a) #函数体内部访问,能访问到a变量
#定义函数
testA() #调用函数
# print(a) #报错:a变量是函数内部的变量,函数外无法访问--因为a是一个局部变量,这就证实了当函数执行完毕后,其内部定义的变量会被销毁并回收。
上面的变量a为局部变量是定义在testA函数内部的变量,在函数外部访问则会立即报错。(当函数被执行时,Python 会为其分配一块临时的存储空间,所有在函数内部定义的变量,都会存储在这块空间中。而在函数执行完毕后,这块临时存储空间随即会被释放并回收,该空间中存储的变量自然也就无法再被使用。)
- 局部变量作用:在函数体内部,临时保存数据,即当函数调用完成后,则销毁局部变量。
2.3 全局变量
- 定义:在函数体内、外都能生效的变量。
#声明全局变量:函数体内外都能访问
a = 100
print(a)
def testA():
print(a)# 访问全局变量a,并打印变量a存储变量
def testB():
print(a)# 访问全局变量a,并打印变量a存储变量
testA()
testB()
# 100
# 100
上面的a并未放在任何函数中,因此任何函数都可以访问a,所以a是全局变量。
- 区别:和局部变量不同,全局变量的默认作用域是整个程序,即全局变量既可以在各个函数的外部使用,也可以在各函数内部使用。因此由上面的定义和例子也可以看出,所谓的全局变量跟局部变量主要是针对函数内外而言的。
2.4 修改全局变量值
那么,如何将上例中testB()函数中变量a的值修改为200呢?
# a = 100
# print(a)
# def testA():
# print(a)
# def testB():
# a = 200 #如果直接修改a=200,此时的a是全局变量还是局部变量?结论:这个a是局部变量
# 因为在全局位置(B函数调用后)打印a得到的不是200而是100
# print(a)
# testA()
# testB()
# 100 全局变量
# 100 全局变量
# 200 局部变量
# print(a)
# 100
# 可以看出,如果在函数里面直接把变量a=200赋值,此时a不是全局变量的修改,而是相当于在函数内部声明了一个新的局部变量。
a = 100
def testA():
print(a)
def testB():
# global 关键词声明a是全局变量
global a
a = 200
print(a)
testA()
testB()
print(a)
# 100
# 200
# 200
因此,要想修改全局变量,我们可以引入global关键词声明a是全局变量。
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。 本文链接: https://blog.csdn.net/Liii_NN/article/details/108600709