Python函数参数:
注:变量没有类型,有类型的是变量指向的内存空间中的值
可变类型:列表、集合、字典
不可变类型:数字、字符串、元组
可变类型在函数中发生改变时,原变量也会跟着发生变化
示例程序:
列表使用 赋值,+=,append,extend,insert 方法均会使列表的值发生改变
def add_elem(args,string):
'''将 lst_num 添加到 args 中'''
args.append(string)
# args += string
# args.extend(string)
# args.insert(len(args),string)
return args
lst = [1,2,3,4]
string = "ABC"
print(add_elem(lst,string))
# [1, 2, 3, 4, 'A', 'B', 'C']
print(lst)
# [1, 2, 3, 4, 'ABC']
def add_elem(args,string):
'''将 lst_num 添加到 args 中'''
args[len(args)-1] = string
return args
lst = [1,2,3,4]
string = "ABC"
print(add_elem(lst,string))
# [1, 2, 3, 'ABC']
print(lst)
# [1, 2, 3, 'ABC']
位置参数:
实参必须以正确的顺序传入函数,调用时的数量必须与声明时一致
# 必需参数
def hello(name):
'''输出欢迎信息'''
print("hello {0}".format(name))
name = "XiaoMing"
hello(name)
# hello XiaoMing
# hello() 会报错,因为没有传入参数
关键字参数:
函数在调用时使用关键字确定传入参数的值(可以不根据参数位置)
注:关键字即为函数定义时使用的形参名
对应关键字名进行传递:
# 关键字参数
def add(num_1,num_2):
'''将两个数字进行相加'''
print("num_1:",num_1)
print("num_2:",num_2)
print("num_1 + num_2",num_1 + num_2)
add(num_2 = 6,num_1 = 8)
# num_1: 8
# num_2: 6
# num_1 + num_2 14
默认参数:
当调用函数时,如果没有传递参数,则会使用默认参数
如果传递了参数,则默认参数不起作用
注:程序有时会设置好已经修改好的默认参数,调用只需要传入不是默认参数的参数即可
# 默认参数
def add(num_1,num_2 = 10):
'''将两个数字进行相加'''
print("num_1:",num_1)
print("num_2:",num_2)
print("num_1 + num_2",num_1 + num_2)
# add(15)
# # num_1: 15
# # num_2: 10
# # num_1 + num_2 25
# 不传入 num_2 的值,使用 num_2 的默认参数
add(num_1 = 15)
# num_1: 15
# num_2: 10
# num_1 + num_2 25
# 传入 num_2 的值,不使用 num_2 的默认参数
add(num_2 = 6,num_1 = 8)
# num_1: 8
# num_2: 6
# num_1 + num_2 14
不定长参数:
当需要的参数不确定,又还想使用参数进行函数内的运算时,可以考虑不定长参数
不定长参数:
* 变量
1.形参使用 *变量名: 实参通常为传入的多余变量(可以是字典变量)、 列表 或 元组 等
如果实参使用了 *列表,*元组,则函数中接收的是列表或元组中的所有的元素值
2.形参使用 **变量名:通常为 **字典变量 或 字典元素(键值对) 等
示例:
# 不定长参数
def print_info(*vartuple):
print(vartuple)
# 调用 printinfo 函数
print_info(70, 60, 50)
# (70, 60, 50)
当不定长参数前面存在位置参数时:
传入参数的值先传递给位置参数,剩余的传递给不定长参数
注:如果没有剩余的实参,则不定长参数没有值
不使用位置参数:
可以接收所有数据类型数据,除了 a = 2 这种键值对,**字典变量等
注:如果实参中使用了 *列表,*元组,则函数接收的为列表或元组的所有元素值
# 不定长参数
# 不使用位置参数
def print_info(*vartuple):
# print(type(vartuple))
print(vartuple)
# for i in vartuple:
# print(i,end =" ")
# print(type(vartuple[5]))
#
# print(vartuple[5])# 不定长参数
# 不使用位置参数
def print_info(*vartuple):
# print(type(vartuple))
print(vartuple)
# for i in vartuple:
# print(i,end =" ")
# print(type(vartuple[5]))
#
# print(vartuple[5])
# 调用 printinfo 函数
# print_info(70,12.3,5+9j,True,"hello",[1,2,3],(7,8,9),{'a':123})
# # (70, 12.3, (5+9j), True, 'hello', [1, 2, 3], (7, 8, 9), {'a': 123})
# print_info([1,2,3])
# # ([1, 2, 3],)
# print_info(*[1,2,3],'a')
# # <class 'tuple'>
# # (1, 2, 3, 'a')
# print_info((1,2,3))
# # ((1, 2, 3),)
# print_info(*(1,2,3),'a')
# # (1, 2, 3, 'a')
# 调用 printinfo 函数
# print_info(70,12.3,5+9j,True,"hello",[1,2,3],(7,8,9),{'a':123})
# # (70, 12.3, (5+9j), True, 'hello', [1, 2, 3], (7, 8, 9), {'a': 123})
# print_info([1,2,3])
# # ([1, 2, 3],)
# print_info(*[1,2,3],'a')
# # <class 'tuple'>
# # (1, 2, 3, 'a')
# print_info((1,2,3))
# # ((1, 2, 3),)
# print_info(*(1,2,3),'a')
# # (1, 2, 3, 'a')
使用位置参数:
# 使用位置参数
def print_info(num,*vartuple):
print(num)
print(vartuple)
# 调用 printinfo 函数
print_info(70, 60, 50)
# 70
# (60, 50)
** 变量名:
形参使用 **变量名:实参可以使用 a = 2、**字典元素
# ** 变量名:
# 形参使用 **变量名:实参可以使用 a = 2、**字典元素
def print_info(**attrs):
print(attrs)
print(type(attrs))
# <class 'dict'>
dic = {'a':123}
print_info(**dic,b = 4,c = 6)
# {'a': 123, 'b': 4, 'c': 6}
在形参中使用 * 和 ** 参数接收:
def print_info(num,*vartuple,**attrs):
print(num)
print(vartuple)
print(attrs)
# 调用 printinfo 函数
print_info(70, 60, 50,{'a':123},b = 456,c = 789)
# 70
# (60, 50, {'a': 123})
# {'b': 456, 'c': 789}
2020-02-11