【本章节涵盖内容:拆包,交换变量的值,引用,可变/不可变数据类型,函数使用注意事项】
1,拆包、交换变量的值
<1> 对返回的数据直接拆包
def get_my_info():
high = 178
weight = 100
age = 18
return high, weight, age # 函数返回三个数据,会自动打包为元组
# result = get_my_info() # result 接收到一个元组
# print(result)
my_high, my_weight, my_age = get_my_info() # 直接把元组拆分为三个变量来使用,更加方便
print(my_high)
print(my_weight)
print(my_age)
总结:
- 拆包时要注意,需要拆的数据的个数要与变量的个数相同,否则程序会异常
- 除了对元组拆包之外,还可以对列表、字典等拆包
In [17]: a, b = (11, 22)
In [18]: a
Out[18]: 11
In [19]: b
Out[19]: 22
In [20]: a, b = [11, 22]
In [21]: a
Out[21]: 11
In [22]: b
Out[22]: 22
In [23]: a, b = {"m":11, "n":22} # 取出来的是key,而不是键值对
In [24]: a
Out[24]: 'm'
In [25]: b
Out[25]: 'n'
<2> 交换2个变量的值
# 第1种方式,使用中间变量
# a = 4
# b = 5
# c = 0
#
# c = a
# a = b
# b = c
#
# print(a)
# print(b)
# 第2种方式,直接交换。
a, b = 4, 5
a, b = b, a # 实际上这一步里既有打包,也有拆包
print(a)
print(b)
3,引用
想一想
>>> a = 1
>>> b = a
>>> b
1
>>> a = 2
>>> a
2
请问此时b的值为多少?
>>> a = [1, 2]
>>> b = a
>>> b
[1, 2]
>>> a.append(3)
>>> a
[1, 2, 3]
请问此时b的值又是多少?
在python中,值是靠引用来传递来的。
我们可以用id()来判断两个变量是否为同一个值的引用。 我们可以将id值理解为那块内存的地址标示。
>>> a = 1
>>> b = a
>>> id(a)
13033816
>>> id(b) # 注意两个变量的id值相同
13033816
>>> a = 2
>>> id(a) # 注意a的id值已经变了
13033792
>>> id(b) # b的id值依旧
13033816
>>> a = [1, 2]
>>> b = a
>>> id(a)
139935018544808
>>> id(b)
139935018544808
>>> a.append(3)
>>> a
[1, 2, 3]
>>> id(a)
139935018544808
>>> id(b) # 注意a与b始终指向同一个地址
139935018544808
总结:
之前为了更好的理解变量,咱们可以把a=100
理解为变量a中存放了100,事实上变量a存储是100的引用(可理解为在内存中的一个编号)
4,可变、不可变类型
总结
-
所谓可变类型与不可变类型是指:数据能够直接进行修改,如果能直接修改那么就是可变,否则是不可变
-
可变类型(修改数据,内存地址不会发生变化)有: 列表、字典、集合
-
不可变类型(修改数据,内存地址必定发生变化)有: 数字、字符串、元组
5,函数使用注意事项
1. 自定义函数
无参数、无返回值
def 函数名():
语句
无参数、有返回值
def 函数名():
语句
return 需要返回的数值
注意:
一个函数到底有没有返回值,就看有没有return,因为只有return才可以返回数据
在开发中往往根据需求来设计函数需不需要返回值
函数中,可以有多个return语句,但是只要执行到一个return语句,那么就意味着这个函数的调用完成
有参数、无返回值
def 函数名(形参列表):
语句
注意:
在调用函数时,如果需要把一些数据一起传递过去,被调用函数就需要用参数来接收
参数列表中变量的个数根据实际传递的数据的多少来确定
有参数、有返回值
def 函数名(形参列表):
语句
return 需要返回的数值
函数名不能重复
如果在同一个程序中出现了多个相同函数名的函数,那么在调用函数时就会出现问题,所以要避免名字相同
还有一点 不仅要避免函数名之间不能相同,还要避免 变量名和函数名相同的,否则都会出现问题
详细的讲解在python就业班中进行学习,此阶段只要注意这些问题即可
2. 调用函数
调用的方式为:
函数名([实参列表])
调用时,到底写不写 实参?
-
如果调用的函数 在定义时有形参,那么在调用的时候就应该传递参数
调用时,实参的个数和先后顺序应该和定义函数中要求的一致
如果调用的函数有返回值,那么就可以用一个变量来进行保存这个值
3. 作用域
在一个函数中定义的变量,只能在本函数中用(局部变量)
在函数外定义的变量,可以在所有的函数中使用(全局变量)