0.目录
1.函数定义与调用
2.函数——灵活即强大
3.形参与实参
4.函数变量的作用域(局部变量和全局变量)
5.变量的屏蔽机制
6.函数体内修改全局变量——Global
1.函数的定义与调用
这里写了一个非常非常基础简单的函数:
>>> def myfirstfunction():
print('这是我的第一个函数!')
print('我很激动!')
>>> myfirstfunction()
这是我的第一个函数!
我很激动!
2.函数——灵活即强大
- 函数文档
- 关键字参数
- 默认参数
- 收集参数
>>> def speaking(name,words): #关键字参数
print(name + '->' + words)
>>> speaking('小甲鱼','让编程改变世界')
小甲鱼->让编程改变世界
>>> speaking('让编程改变世界','小甲鱼')
让编程改变世界->小甲鱼
>>> speaking(words = '让编程改变世界',name = '小甲鱼')
小甲鱼->让编程改变世界
>>> def saysome(name = '小甲鱼',words = '让编程改变世界'):
print(name + '->' + words ) #默认参数
>>> saysome()
小甲鱼->让编程改变世界
>>> saysome('最小生成树')
最小生成树->让编程改变世界
>>> saysome('最小生成树','二叉树')
最小生成树->二叉树
>>> def test(*params):
print('参数的长度是:',len(params));
print('第二个参数是:',params[1]);
>>> test(1,'小甲鱼',3.2,5,6,7,8)
参数的长度是: 7
第二个参数是: 小甲鱼
>>> def test(*params,exp):
print('参数的长度是:',len(params),exp);
print('第二个参数是:',params[1]);
>>> test(1,'小甲鱼',3.2,5,6,7,exp = 8)
参数的长度是: 6 8
第二个参数是: 小甲鱼
>>> test(1,'小甲鱼',3.2,5,6,7,8)
Traceback (most recent call last):
File "<pyshell#32>", line 1, in <module>
test(1,'小甲鱼',3.2,5,6,7,8)
TypeError: test() missing 1 required keyword-only argument: 'exp'
>>> def test(*params,exp = 8):
print('参数的长度是:',len(params),exp);
print('第二个参数是:',params[1]);
>>> test(1,'小甲鱼',3.2,5,6,7,8)
参数的长度是: 7 8
第二个参数是: 小甲鱼
3.形参与实参区别
1、函数定义方式不同
形参出现在函数定义中,在整个函数体内都可以使用, 离开该函数则不能使用。
实参出现在主调函数中,进入被调函数后,实参变量也不能使用。
2、使用原理不同
函数的形参列于函数声明中,在函数定义的函数体内使用。当函数调用时,形参(任何种类的)是一类将被填充的空白或是占位符。
实参是用来填充形参的。当函数被调用时,形参列在函数名后面的括号里。执行函数调用时,实参被传递给形参。
3、传值调用和引用调用不同
传值调用和引用调用指的是用于参数传递过程中的一种机制。传值调用中,只使用了实参的值。传值调用机制里,形参是一个局部变量,其初始值为相应实参的值。在引用调用机制里,将实参的地址传递给形参,从表面上看是以实参变量取代形参,因此任何发生在形参上的改变实际上都发生在实参变量上。
4.函数变量的作用域
具体来说,全局变量(Global Variable)和局部变量(local Variable)的区别如下:
-
作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等
-
内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区
-
生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了
-
使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量
>>> def discounts(price,rate):
final_price = price * rate
old_price = 88 #这里试图修改全局变量
print('修改后全局变量的值:',old_price)
return final_price
>>> old_price = float(input('请输入原价:'))
>>> rate = float(input('请输入折扣率:'))
>>> new_price = discounts(old_price,rate)
>>> print('修改后old_price的值位:',old_price)
>>> print('打折后价格是:',new_price)
请输入原价:100
请输入折扣率:0.8
修改后全局变量的值: 88
修改后old_price的值位: 100.0
打折后价格是: 80.0
#这里可以看到两个old_price不一样,虽然名称相同,
#但是函数体内的是局部变量,外面的是全局变量
5.变量的屏蔽机制
>>> count = 5
>>> def func():
count = 10
print(10)
>>> func()
10
>>> print(count)
5
全局变量定义完后,在函数中会屏蔽掉修改全局变量的操作。
6.Global关键字——函数体内修改全局变量
>>> def func():
global count
count = 10
print(10)
>>> func()
10
>>> print(count)
10