Python函数参数

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

原文地址:https://www.cnblogs.com/hany-postq473111315/p/12295062.html