Python——Day5(函数)

0.目录

1.函数定义与调用
2.函数——灵活即强大
3.形参与实参
4.函数变量的作用域(局部变量和全局变量)
5.变量的屏蔽机制
6.函数体内修改全局变量——Global

1.函数的定义与调用

这里写了一个非常非常基础简单的函数:

>>> def myfirstfunction():
	print('这是我的第一个函数!')
	print('我很激动!')

>>> myfirstfunction()
这是我的第一个函数!
我很激动!

2.函数——灵活即强大

  1. 函数文档
  2. 关键字参数
  3. 默认参数
  4. 收集参数
>>> 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)的区别如下:

  1. 作用域不同:全局变量的作用域为整个程序,而局部变量的作用域为当前函数或循环等

  2. 内存存储方式不同:全局变量存储在全局数据区中,局部变量存储在栈区

  3. 生命期不同:全局变量的生命期和主程序一样,随程序的销毁而销毁,局部变量在函数内部或循环内部,随函数的退出或循环退出就不存在了

  4. 使用方式不同:全局变量在声明后程序的各个部分都可以用到,但是局部变量只能在局部使用。函数内部会优先使用局部变量再使用全局变量


>>> 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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值