python基础之全局局部变量及函数参数

1.局部变量和全局变量

  1.1局部变量

  局部变量是在函数内部定义的变量,只能在定义函数的内部使用

  函数执行结束后,函数内部的局部变量会被系统收回

  不同函数可以定义相同名字的局部变量,但是各用个的互不影响

  

  局部变量的生命周期:

      1.所谓生命周期就是变量从被创建到被系统回收的过程

       2.局部变量在函数被调用时才会被创建

       3.函数执行结束后局部变量被系统回收

       4.局部变量在生命周期内,可以用来存储函数内部临时使用到的数据

    

 

  1.2全局变量

  全局变量是在函数外部定义的变量(没有定义在某一个函数内),所有函数内部都可以使用这个变量

  注意:函数执行时,在需要处理变量时会:

  1.首先查找 函数内部 是否存在 指定名称的局部变量,如果有,直接使用

  2.如果没有,查找 函数外部 是否存在 指定名称的全局变量,如果有,直接使用

  3.如果还有没, 程序报错!

  

  2)函数不能直接修改全局变量的引用

  在函数内部可以通过全局变量的引用获取对应的数据,但是不允许直接修改全局变量的引用 

  

  

   3)在函数内部修改全局变量的值

   如果在函数内部需要修改全局变量的值,需要使用关键字 global 进行声明

   

 

 

2.函数的参数

2.1 在函数内部,针对形参使用赋值语句,并不会影响到调用函数时传递的实参变量的值

无论传递的参数是可变还是不可变,只要针对参数使用赋值语句,只会在函数内部修改局部变量的引用,不会影响到外部变量的引用

>>> def demo(num, list):
...     print('函数内部代码')
        #在函数内部,针对参数使用赋值语句,不会修改到外部的实参变量
...     num = 100
...     list = [1,2,3]
...     print(num)
...     print(list)
...     print('函数代码完成')
...
>>> gl_num = 99
>>> gl_list = [4,5,6]
>>> demo(gl_num,gl_list)
函数内部代码
100
[1, 2, 3]
函数代码完成
>>> print(gl_num)
99
>>> print(gl_list)
[4, 5, 6]

2.2 如果传递的参数是可变类型,在函数内部,通过方法修改了数据的内容,同样会影响到外部的数据

 1 def demo(num_list):
 2     # 使用方法修改列表的内容
 3     num_list.append(9)
 4     print('函数内部结果:', num_list)
 5 
 6 
 7 gl_list = [1, 2, 3]
 8 demo(gl_list)
 9 print('函数外部结果:', gl_list)
10 ----------------------------------------------
11 函数内部结果: [1, 2, 3, 9]
12 函数外部结果: [1, 2, 3, 9]

3.扩展  列表使用 += 运算符

 1 def demo(num, num_list):
 2     print("函数开始")
 3     # num = num + num
 4     num += num
 5 
 6     # 列表变量使用 += 不会像数字一样做相加再赋值操作
 7     # 本质是在调用列表的 extend 方法
 8     # num_list.extend(num_list)
 9     num_list += num_list
10     print(num)
11     print(num_list)
12     print("函数结束")
13 
14 
15 gl_num = 10
16 gl_list = [1, 2, 3]
17 demo(gl_num, gl_list)
18 print(gl_num)
19 print(gl_list)
20 --------------------------------------------------------------
21 函数开始
22 20
23 [1, 2, 3, 1, 2, 3]
24 函数结束
25 10
26 [1, 2, 3, 1, 2, 3]

 

 

 

 

 

 

 

 

 

 

 

 

 

 

   

 

  

posted @ 2019-02-02 18:05  重案组之虎曹达华  阅读(849)  评论(0编辑  收藏  举报