Python教程81:函数的位置参数、默认参数、动态参数、关键字参数(入门必看)

发布时间:2023年12月18日

1.形式参数(Formal Parameters)和实际参数(Actual Parameters)是函数或方法定义和调用过程中的两个重要概念。举个例子,在下面的greet函数中,当我们调用greet(“李白”)时,"李白"就是实际参数,name是一个形式参数。这个实际参数,被用来替换函数定义中的形式参数,以执行函数操作。

# @Author : 小红牛
# 微信公众号:WdPython

简单来说,形式参数是函数或方法定义的参数列表,用于规定接收输入的方式;实际参数是在调用函数或方法时传递的值,用于执行函数或方法的操作。

def greet(name):
    print(f'大家好,我是{name}哥哥')

# 调用函数
greet('李白')  # 输出:大家好,我是李白哥哥

2.位置参数(Positional Arguments):位置参数是按照函数定义时的顺序传递的参数。在调用函数时,必须按照定义时的顺序传递参数。位置参数是函数的基础,通常用于定义函数的主体逻辑。这里还说明参数的个数传参的时候要相同,比如下面的greet函数有两个参数,传参的时候也要传两个,实参和形参数量保持一致,且第一个参数是name,第二个参数是age,顺序不能错乱,参数的类型也要一致,不然解释器容易报错。

def greet(name, age):
    print(f'大家好,我是{name}哥哥,今年{age}岁')

# 调用函数时,必须按照定义时的顺序传递参数
greet('李白', 18)  # 输出:大家好,我是李白哥哥,今年18岁

# 传参顺序不一样的输出
greet(18, '李白')  # 大家好,我是18哥哥,今年李白岁

3.默认参数(Default Arguments):默认参数是在函数定义时为参数设置一个默认值。如果在调用函数时没有提供该参数的值,那么将使用默认值。默认参数可以减少函数调用的复杂性,同时提供一种灵活的方式来处理未提供的参数值。下面的name=‘李白’, age=18就是两个默认参数。

def greet(name='李白', age=18):
    print(f'大家好,我是{name}哥哥,今年{age}岁')

# 1.调用函数时,不传递任何参数,使用默认值
greet()  # 输出:大家好,我是李白哥哥,今年18岁

# 2.调用函数时,只传递一个参数,其他参数使用默认值
greet('杜甫')  # 输出:大家好,我是杜甫哥哥,今年18岁
# 3.查询参数有默认值,返回值是一个元组
print(greet.__defaults__)   #输出 ('李白', 18)

混合参数的使用的小提醒: 当定义一个有默认值参数的函数时,有默认值的参数必须位于所有,没有默认值参数的后面。如下ab参数,放在默认参数name='李白’的前面就不会报错,反之放在后面就会有语法错误。

# 不会报错
def greet(a, b, name='李白', age=18):

# 会报错
def greet(name='李白', age=18, a, b):

4.关键字参数(Keyword Arguments):关键字参数,是在调用函数时明确指定参数的名称和值。在函数定义中,可以通过为参数设置默认值来确保它们有默认值,但在调用函数时,可以使用关键字参数来明确指定要使用的值。关键字参数提供了更大的灵活性,允许在调用函数时传递特定的值,而不是使用默认值。下面例子中,func1函数有4个参数abcd,在调用func1的时候指定了关键字参数d=4,指定的实参和形参,写法上都要放在最后面,除非你把所有的参数,都传入的是关键字参数,这样可以无序传参 。func2函数错误的原因,是因为形参c,如果是关键字参数的时候,一定要放在参数的最后面位置,不然报错。所以func3是对func2错误的改写。只需要把指定的关键字参数c,放在最后面即可。即函数含有混合传参时,关键字参数必须位于所有的位置参数之后。

print('1.正确的写法'.center(30, '-'))
def func1(a, b, c, d):
    print('参数的值:', a, b, c, d)

func1(1, 2, 3, d=4)  # 参数的值:1 2 3 4
func1(c=30, a=10, b=20, d=40)  # 参数的值:10 20 30 40

print('2.错误的写法'.center(30, '-'))
def func2(a, b, c, d):
    print('参数的值:', a, b, c, d)
func2(1, 2, 4, c=3)
# 输出 TypeError: func2() got multiple values for argument 'c'

print('3.错误的改对的方法'.center(30, '-'))
def func3(a, b, d, c):
    print('参数的值:', a, b, c, d)
func3(1, 2, 4, c=3) # 参数的值:1 2 3 4

5.动态参数(Variable-length Arguments):动态参数允许函数接受可变数量的参数。在Python中,有两种动态参数类型:args和**kwargs。args用于接收任意数量的位置参数,**kwargs用于接收任意数量的关键字参数。这些动态参数可以与其他普通参数一起传递给函数,以实现更灵活的函数调用。

# 动态参数示例(*args)  
def sum_numbers(*numbers):
    total = 0
    for num in numbers:
        total += num
    return total

# 调用函数时,传递任意数量的数字参数
result = sum_numbers(1, 2, 3)
print(result)   # 输出:6
result2 = sum_numbers(1, 2, 3, 4, 5)
print(result2)   # 输出:15

**kwargs的示例用法

def print_info(**kwargs):
    print(kwargs.items())
    for key, value in kwargs.items():
        print(f"{key}: {value}")

    # 调用函数并传递参数
print_info(name="李白", age=18, city='唐')

输出内容:

dict_items([('name', '李白'), ('age', 18), ('city', '唐')])
name: 李白
age: 18
city:

完毕!!感谢您的收看

----------★★历史博文集合★★----------

我的零基础Python教程,Python入门篇 进阶篇 视频教程 Py安装py项目 Python模块 Python爬虫 Json Xpath 正则表达式 Selenium Etree CssGui程序开发 Tkinter Pyqt5 列表元组字典数据可视化 matplotlib 词云图 Pyecharts 海龟画图 Pandas Bug处理 电脑小知识office自动化办公 编程工具

文章来源:https://blog.csdn.net/gxz888/article/details/135059870
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。