第 4 章 函数----嵌套使用 中级
一个函数里面又调用了 另外一个函数,这就是函数嵌套调用。如果函数 test2 中,调用了另外一个函数 test1 那么执行到调用 test1 函数时,会先把函数 test1 中的任务都执行完才会回到 test2 中调用函数 test1 的位置,继续执行后续代码
# 一个函数里面又调用另一个函数
def test1():
print("我是test1")
def my_func():
print("我是my_func")
def test2(): #如果不调用test2函数,那么test1和my_func都不执行
test1() # test2 内部调用了test1
my_func()
test2() # 程序第一条执行的语句
复制代码
执行结果
"D:\Program Files1\Python\python.exe" D:/Pycharm-work/pythonTest/函数/13函数的嵌套.py
我是test1
我是my_func
Process finished with exit code 0
复制代码
第 5 章 函数----变量的作用域
5.1、局部变量和全局变量
局部变量是在函数内部定义的变量,只能在函数内部使用;全局变量是在函数外部定义的变量(没有定义在某一个函数内) ,所有函数内部都可以使用这个变量,
提示:在其他的开发语言中,大多不推荐使用全局变量-可变范围太大, 导致程序不好维护!
5.2、局部变量
局部变量是在函数内部定义的变量,只能在函数内部使用;函数执行结束后,函数内部的局部变量,会被系统回收;不同的函数,可以定义相同的名字的局部变量,彼此之间不会产生影响;
5.3 、局部变量的作用
在函数内部使用,临时保存函数内部需要使用的数据
总结
●局部变量
。函数内部定义的变量就是局部变量
。局部变量只能在函数内部使用 。不同的函数局部变量名字可以相同●全局变量 。函数外部定义的变量就是全局变量 。全局变量在所有函数内部也可以使用 。局部变量能解决的问题,不要通过全局变量解决,尽量少定义全局变量
5.4、局部变量的生命周期(局部变量作用范围)
def my_func1():
a = 1 # a是一个局部变量,只属于my_func1函数
print(a)
def my_func2():
a = 2 # a是一个局部变量,只属于my_func2函数
print(a)
my_func1() # 调用函数的时候,局部变量a出现了
# my_func1函数调用完毕,a 消失了
# 定义函数的时候局部变量并不存在,只有调用函数的时候局部变量出现了
复制代码
●局部变量从调用函数的时候开始在内存出现,函数调用完毕,局部变量从内存消失●如果一个函数内部定义了局部变量,但这个函数没有被调用,那么局部变量也不在内存中存在
5.5 、全局变量(全局变量作用范围)
全局变量是在函数外部定义的变量,所有函数内部都可以使用这个变量为了保证所有的函数都能够正确使用到全局变量,应该将全局变量定义放在其他函数上方。
●全局变量一般定义在函数定义的上方●全局变量从定义变量开始在内存中出现,一直到程序运行完成,和程序起从内存中消失
num1 = 2
def my_func1():
print(num1)
def my_func2():
print(num1)
my_func1()
num1 = 10
my_func2()
复制代码
执行结果
"D:\Program Files1\Python\python.exe" D:/Pycharm-work/pythonTest/函数/15全局变量.py
2
10
复制代码
5.6、全局变量与局部变量重名
●如果在函数内部定义一个变量名字和全局变量重名,那么在这个函数内部只能使用局部变量
num1 = 1
def my_func1():
num1 = 10 # 这里不是为全局变量赋值,这里是定义了一个局部变量,名字和全局变量重名
print(num1) # 打印的是局部变量num1的值
num1 += 1 # 这里改的是局部变量num1的值
def my_func2():
print(num1) # 全局变量num1
my_func1()
my_func2()
print(num1) # 打印的是全局变量的num1的值
复制代码
注意:只是在函数内部定义了一个局部变量而已,只是变量名相同在函数内部不能直接修改全局变量的值。
5.7、global 关键字
如果在函数中需要修改全局变量,需要使用 global 进行声明
●当需要在函数内部修改全局变量的值,修改前需要用 global 修饰全局变量的名字
def 函数():
global 全局变量名
全局变量名 = 值
复制代码
num1 = 10
def my_func1():
global num1 # 函数内部就不存在和全局变量重名的局部变量
num1 = 1 # 这里是给全局变量num1 修改值
def my_func2():
print(num1) # 如果在函数内部不修改全局变量的值,就不用global
print(num1)
my_func1()
print(num1)
执行结果:
"D:\Program Files1\Python\python.exe" D:/Pycharm-work/pythonTest/函数/17在函数内部修改全局变量的值.py
10
1
Process finished with exit code 0
复制代码
num1 = 10
def my_func1():
# global num1 # 函数内部就不存在和全局变量重名的局部变量
num1 = 1 # 这里是给全局变量num1 修改值
def my_func2():
print(num1) # 如果在函数内部不修改全局变量的值,就不用global
print(num1)
my_func1()
print(num1)
执行结果
"D:\Program Files1\Python\python.exe" D:/Pycharm-work/pythonTest/函数/17在函数内部修改全局变量的值.py
10
1
Process finished with exit code 0
复制代码
5.8、 练习
定义一个全局变量 name="张三”,定义一个函数 my_ test1, 在函数 my_ test1 内部修改全局变量 name 的值为”李四”
name = "张三"
def my_test1():
global name
name = "李四"
my_test1()
print(name)
执行结果:
"D:\Program Files1\Python\python.exe" D:/Pycharm-work/pythonTest/函数/18练习-在函数内部修改全局变量的值.py
李四
Process finished with exit code 0
复制代码
变量的作用域
a = 1
def my_test1():
global a
a = 2
def my_test2():
a = 3 # 这里的a是一个只在my_test2里面的局部变量
my_test1()
print(a) # 程序入口在这里
my_test2()
print(a)
执行结果:
"D:\Program Files1\Python\python.exe" D:/Pycharm-work/pythonTest/函数/19变量作用域.py
1
2
Process finished with exit code 0
复制代码
评论