python中的函数

摘要:本文主要介绍了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 ''' 
原文地址:https://www.cnblogs.com/lzy820260594/p/11802135.html