关键字不定长参数,可以接收多个未定义参数的关键字赋值
''' 关键字不定长参数的格式: def 函数名(**kwargs): 函数体 '''
TypeError: 'a' is an invalid keyword argument for print()
def func(**kwargs):
print(**kwargs) # 相当于给print输入了多个关键字参数 print(a=1, b=2, c=3)
# #
func(a=1, b=2, c=3)
使用**kwargs可以将关键字参数进行传递
def func(**kwargs):
print(1, 2, **kwargs) # 相当于print(1, 2, sep='&', end='a')
# #
func(sep='&', end='a')
kwargs 内部到底是什么存储结构呢?
def func(**kwargs): # kwargs 在从传参之后,会将实参位置的所有未定义参数的关键字参数转换为字典的键值对,保存在kwargs当中 print(kwargs) # {'a': 1, 'b': 2, 'c': 3}
func(a=1, b=2, c=3)
案例:
使用创建一个函数可以保存学员的全部信息,并将其储存到字典当中
def student_info(**kwargs): print(f'学员信息为:{kwargs}')
student_info(name='xiaoming', age=18, gender='男')
关键字不定长参数,可以接收多个未定义参数的关键字赋值
''' 关键字不定长参数的格式: def 函数名(**kwargs): 函数体 '''
TypeError: 'a' is an invalid keyword argument for print()
def func(**kwargs):
print(**kwargs) # 相当于给print输入了多个关键字参数 print(a=1, b=2, c=3)
# #
func(a=1, b=2, c=3)
使用**kwargs可以将关键字参数进行传递
def func(**kwargs):
print(1, 2, **kwargs) # 相当于print(1, 2, sep='&', end='a')
# #
func(sep='&', end='a')
kwargs 内部到底是什么存储结构呢?
def func(**kwargs): # kwargs 在从传参之后,会将实参位置的所有未定义参数的关键字参数转换为字典的键值对,保存在kwargs当中 print(kwargs) # {'a': 1, 'b': 2, 'c': 3}
func(a=1, b=2, c=3)
案例:
使用创建一个函数可以保存学员的全部信息,并将其储存到字典当中
def student_info(**kwargs): print(f'学员信息为:{kwargs}')
student_info(name='xiaoming', age=18, gender='男')
组包:就是讲多个值进行组合,打包为一个容器类型的过程
拆包:就是讲一个容器类型,拆分成多个数据,分别赋值给多个变量的过程
组包
def func1(): return 1, 2, 3, 4
func1返回了多个数据,Python自动将其打包为一个元组,这个过程就是组包
print(func1()) # (1, 2, 3, 4)
将多个数据打包整合为一个容器,赋值给变量,这个就是组包过程
a = 1, 2, 3, 4 print(a)
拆包(解包)
将等号右侧的列表,拆分为四个数据元素,分别赋值给a,b,c,d这个过程就是拆包
a, b, c, d = [1, 2, 3, 4] print(a, b, c, d)
之前我们在循环汇总用过拆包过程
list1 = [1, 2, 3, 4] for index, value in enumerate(list1): print(index, value)
dict1 = {'name': 'xiaoming', 'age': 18} for key, value in dict1.items(): print(key, value)
同时应用组包和拆包的案例
a = 1 b = 2
需求:将a, b进行互换值
这个互换过程,是先讲a,b的值提取出来,组包为一个元组,然后进行拆包,将元组内的两个数据分别赋值给,a,b变量
a, b = b, a print(a, b)
注意:字典可以拆包么?可以
dict1 = {'a': 1, 'b': 2, 'c': 3}
对字典进行拆包,得到的是字典的键
char1, char2, char3 = dict1 print(char1, char2, char3)
集合可以拆包么? 可以
对于集合进行拆包,没有任何问题,但是一般不会这样做,因为赋值顺序无法指定
set1 = {'Tom', 'Bob', 'Rose'} a, b, c = set1 print(a, b, c)
在Python中所有的数据分为三个维度: 值(判断==), 数据类型(int...float...), 唯一标识(id)
值相等的数据,唯一标识和数据类型不一定相等
bool1 = False int1 = 0
0 和False的值相等
print(bool1 == int1) # True
数据类型不等
print(type(bool1) == type(int1)) # False
唯一标识不等
id 判断数据是否是同一内存空间中的数据(同一内存空间中的数据必相等)
print(id(bool1) == id(int1)) # False
值和数据类型相等的,唯一标识不一定相等
list1 = [1, 2, 3] list2 = [1, 2, 3]
list1 和list2 值相等
print(list1 == list2) # True
list1和list2 数据类型相等
print(type(list1) == type(list2)) # True
list1 和list2 的唯一标识不等,也就是说,其所在的内存空间不一致
print(id(list1) == id(list2)) # False
唯一标识相等的, 值和数据类型必然相等
在同一内存空间中只能储存同一个值
str1 = 'abc' str2 = 'abc'
str1 和str2 的唯一标识相等
print(id(str1) == id(str2)) # True
数据类型相等
print(type(str1) == type(str2)) # True
数据值相等
print(str1 == str2) # True
怎样判断id 唯一标识是否相等呢? is关键字
使用is可以判断是否为同一个内存空间中的数据
print(list1 is list2) # False print(str1 is str2) # True