"""
*参数与**参数是python中的中带你,他们都被称为可变参数,我们经常会在代码中看到*a,**b
作为函数定义时:
1、*参数收集所有未匹配的位置参数组成一个tuple对象,局部变量a指向此tuple对象
2、**参数收集所有未匹配的关键字参数组成一个dic对象,局部变量b指向此dic对象
def temp(*a,**b):
pass
作为函数调用时:
1、*参数用于解包tuple对象的每个元素,作为一个一个的位置参数传入到函数中。
2、**参数用于解包dic对象的每个元素,作为一个一个的关键字参数传入到函数中。
mytuple=('wang','li','sun')
temp(*mytuple)
等同于---
temp('wang','li','sun')
"""
# 包含两个位置参数函数
# def print_str(first, second):
# print(first)
# print(second)
#
# print_str('hello')
# 传一个参数这时会报错:缺少一个参数TypeError: print_str() missing 1 required positional argument: 'second'
# ==========
# 思考如何修改print_str()参数可以让他接受一个参数、也可以接收两个参数、或者接受数量不定的更多参数?
# 首先考虑将后面参数修改为可变参数
# def print_str(first, *secondnd):
# print(first)
# print(second)
#
#
# print_str('hello') # hello 和()一个空元组对象
# print_str('hello', 'xxw', 'dw', 'xw')
# ==========
# 调用print_str()函数时,直接传入一个*参数会发生什么
# num = ('1', '2', '3', '4', '5')
#
#
# def print_str(first,*second):
# print(first)
# print(second)
#
#
# if __name__ == '__main__':
# print_str(*num)# 1 和('2', '3', '4', '5')
# ============
# 如果未定义可变参数呢
# num = ('1', '2', '3', '4', '5')
# num1 = ('1', '2', )
#
# def print_str(first,second):
# print(first)
# print(second)
#
#
# if __name__ == '__main__':
# print_str(*num1) #1和2
# print_str(*num) #报错
# 这里等同与print_str(1,2,3,4,5),但是他只能传两个参数所以报错
# 这里在函数调用时,表示解包功能,注意解包时,tuple元素数量要与函数的位置参数总数一至
# ===============================
# 函数定义中,参数名称前有两个**
# def print_str(**thing):
# print(thing)
#
#
# print_str(first=5, second=10) # {'first': 5, 'second': 10}
# ================
#
thing = {'name': 'xw', 'age': '22'}
def print_str(first, **thing):
print(first)
print(thing)
print_str(2, **thing)
*参数和**参数区别讲解
最新推荐文章于 2023-10-24 09:29:04 发布