摘要:本文主要介绍了python中函数涉及到的一些细小知识点。
1、关于全局变量和局部变量
在函数体中定义的一个变量为局部变量,但是可以通过global关键词将这个局部变量变成全局变量。
2、关于函数的返回值
- 一个函数不可以有两个return
- 如果同时返回多个值,那么返回值会默认成元组
- 返回值除了最基础的数据类型,当然也可以是字典、列表、元组等类型
3、关于函数的参数
(1)位置参数和关键字参数:
- 位置参数:传入的值和函数定义的参数应该一一对应
- 关键字参数:采用键=键值的形式进行传参,这个时候就不用注意参数的顺序了
- 位置参数和关键字参数混合使用的时候,位置参数应该处于关键字参数前面
(2)默认参数(缺省参数):
默认参数是在函数定义时就已经直接采用键=键值的方式对该参数进行了赋值,那么在调用函数的时候如果不对该参数传参,那么该参数就直接使用默认值,如果进行传参,那么就放弃默认值而采用传入的参数。
(3)不定长参数之包裹位置传递:
采用args*作为参数的形式(包裹位置传递):
1 def func(args *): 2 print(args)
这样就可以在传参的时候直接一次性传入最少0个,最多没有上限个参数,而且这样传入的参数以元组的形式存在。
1 # 接收所有位置参数,返回一个元组 2 def user_info(*args): 3 print(args) 4 5 6 user_info('TOM') 7 user_info('TOM', 20) 8 user_info('TOM', 20, 'man') 9 user_info()
执行结果如下:
1 ('TOM',) 2 ('TOM', 20) 3 ('TOM', 20, 'man') 4 ()
(4)不定长参数之包裹关键字参数:
- 属于不定长参数的范围,传入的参数以字典的形式存在
- 传入的参数以关键字的形式来进行书写
- 采用**kwargs的形式进行传参
1 # 收集所有关键字参数,返回一个字典 2 def user_info(**kwargs): 3 print(kwargs) 4 5 6 user_info() 7 user_info(name='TOM') 8 user_info(name='TOM', age=20)
执行结果如下:
1 {} 2 {'name': 'TOM'} 3 {'name': 'TOM', 'age': 20}
4、关于拆包
拆包,顾名思义,就是将元组、字典这样的数据的集合拆开并赋值给变量:
元组拆包:
1 tuple=('tom',17,'009') 2 a,b,c=tuple 3 print(a,b,c)
结果如下:
tom 17 009
字典拆包:
1 dict={'name':'tom','age':18,'class':'001'} 2 a,b,c=dict #从下面的结果可以看到,这里获取的是键 3 4 print(a,b,c) 5 print(dict[a],dict[b],dict[c])
结果如下:
1 name age class 2 tom 18 001
5、关于数据的交换
在python中,交换数据当然可以像c语言中一样采用第三个变量的方式进行,也可以采用以下这样更为简单的形式进行:
1 a,b=1,2 2 print(a,b) # 1 2 3 4 a,b=b,a 5 print(a,b) #2 1
6、关于python中的引用
- 在python中,同一个不可变类型的变量(整型、浮点型、字符型、元组等)先后赋予不同的值,那么这个变量所代表的的内存地址就会发生改变,如下:
1 a=1 2 print(id(a)) #1572301856 3 a=2 4 print(id(a)) #1572301888
也正因为如此,下面的这种情况才可以很好的理解:
1 a=1 2 b=a 3 print(id(a)) #1572301856 4 print(id(b)) #1572301856 5 6 a=2 7 print(id(a)) #1572301888 8 print(id(b)) #1572301856
- 如果对于可变类型的变量(列表,字典,集合等),改变变量存储的内容,内存地址并不会发生改变:
1 aa = [10, 20] 2 bb = aa 3 4 print(bb) 5 6 print(id(aa)) 7 print(id(bb)) 8 9 aa.append(30) 10 print(aa) 11 print(bb) # 列表是可变类型 12 13 print(id(aa)) 14 print(id(bb))
执行结果如下:
1 [10, 20] 2 2684605628744 3 2684605628744 4 [10, 20, 30] 5 [10, 20, 30] 6 2684605628744 7 2684605628744
- 再比如下面的例子可以更好的理解这样的原理:
1 def test1(a): 2 print(a) 3 print(id(a)) 4 5 a += a 6 print(a) 7 print(id(a)) 8 9 b = 100 10 test1(b) 11 ''' 12 100 13 1571518592 14 200 15 1571521792 16 ''' 17 18 c = [11, 22] 19 test1(c) 20 ''' 21 [11, 22] 22 1734212653832 23 [11, 22, 11, 22] 24 1734212653832 25 '''