专业编程基础技术教程

网站首页 > 基础教程 正文

二十二、Python函数参数类型(位置、关键字、默认、不定长参数)

ccvgpt 2024-11-27 12:12:52 基础教程 3 ℃


在调用Python函数时可使用的参数类型主要有以下几种:

二十二、Python函数参数类型(位置、关键字、默认、不定长参数)

  • 必要参数(位置参数)
  • 关键字参数
  • 默认参数
  • 不定长参数

必要参数(位置参数)


在Python中,必要参数必须以正确的顺序传入函数。调用的时候必须和定义函数声明时的一样

def rectangle_area(width, height):
    """
    计算长方形面积
    """
    return width*height

# 调用
ra1 = rectangle_area(10,5)
print(f'长方形长为10,宽为5的面积是:{ra1}')
# 如果您只传入一个参数
# ra2 = rectangle_area(10) #报错:rectangle_area() missing 1 required positional argument: 'height'


关键字参数

在Python中,关键字参数和函数调用关系非常紧密,函数调用时使用关键字参数来确定传入的参数,因此,调用函数时使用关键字参数,参数的顺序与声明可以不一致,因为Python解释器可以根据关键字参数名匹配参数值。

def trapezoid_area(topline, baseline, height):
    '''
    计算梯形面积
    '''
    area = (topline+baseline)*height/2
    return area

# 通过必要参数(位置参数时,形参与实参必须一一对应)
t1 = trapezoid_area(10,20,10)
print(f'上底为10,下底为20, 高为10的梯形面积为:{t1}')
# 通过关键字来调用
t2 = trapezoid_area(topline=10, baseline=20, height=10)
print(f'上底为10,下底为20, 高为10的梯形面积为:{t2}')
# 顺序可以不一致
t3 = trapezoid_area(height=10,topline=10, baseline=20)
print(f'上底为10,下底为20, 高为10的梯形面积为:{t3}')


默认参数

调用函数时,如果没有传递参数,则会使用默认参数。

def produce_product(id, name, product_type='生活品', price=10, quantity=10):
    '''
    封装product成列表返回
    '''
    product = []
    product.append(id)
    product.append(name)
    product.append(product_type)
    product.append(price)
    product.append(quantity)
    return product

# 调用
p1 = produce_product(1, '洗衣粉', '数码', 2999, 5)
print(f'p1: {p1}')

# 默认参数是使用定义函数时的默认值
p2 = produce_product(2, '洗衣粉')
print(f'p2: {p2}')

不定长参数

在特定情况下,可能需要一个函数能处理比当初声明时更多的参数,这些参数叫做不定长参数。和以上几种参数相比,不定长参数在声明时不会指定特定名称。比较常见的例子是,计算不确定数值的最大值,数据库连接时除了必要参数以外的可选参数等。

在Python中,处理不定长参数有两种:

  • 加了*的参数会以元组的形式导入,存放所有未命名的变量参数
  • 加了**的参数会以字典的形式导入
def print_star_info(name,gender='男', *args, **kwargs):
    '''
    打印明星信息
    '''
    print(name, gender, args, kwargs)


# 调用
print_star_info('陈老师','男','白芷','欣彤','阿叫',hobby='CB', skill='拍照')
print_star_info('杨过','男','郭襄','郭芙','李莫愁', weapon='玄铁重剑', car='雕哥',\
kongfu=['黯然销魂掌','九阴真经','玉女素心剑法','玄铁剑法','蛤蟆功','打狗棒法'])


最近发表
标签列表