Python学习笔记(五):函数的参数

1.关键字(keyword)参数

按照形参位置传入的参数被称为位置参数;如果使用位置参数的方式来传入参数值,则必须严格按照定义函数时指定的顺序来传入参数值。

如果根据参数名来传入参数值,则无须遵守定义形参的顺序,这种方式被称为关键字(keyword)参数。如下代码所示:

# 定义一个函数
def girth(width, height) :
    print("width:", width)
    print("height:", height)
    return 2 * (width + height)
# 传统调用函数的方式,根据位置传入参数值
print(girth(3.5, 4.8))

# 根据关键字参数来传入参数值
print(girth(width = 3.5, height = 4.8))

# 使用关键字参数时,可以交换位置
print(girth(height = 4.8, width = 3.5))

# 部分使用关键字参数,部分使用位置参数(关键字参数必须位于位置参数之后)
print(girth(3.5, height = 4.8))

# 下面的代码错误,关键字参数必须位于位置参数之后,关键字参数之后的只能是关键字参数
# print(girth(width = 3.5, 4.8))

2.参数默认值

在某些情况下,程序需要在定义函数时为一个或多个形参指定默认值-这样在调用函数时就可以省略为该形参传入参数值,而是直接使用该形参的默认值。示例代码如下所示:

# 为两个参数指定默认值
def say_hi(name = "allan", message = "欢迎来到毛茸茸小镇") :
    print(name, ",你好")
    print("消息是:", message)
# 全部使用默认参数
say_hi()
# 只有message参数使用默认值
say_hi("crystal")
# 两个参数都不使用默认值
say_hi("crystal", "学习Python")
# 只有name参数使用默认值
say_hi(message = "学习Python")
# 定义一个打印三角形的函数,有默认值的参数必须放在后面
def printTriangle(char, height = 5) :
    for i in range(1, height + 1) :
        # 先打印一排空格
        for j in range(height - i) :
            print(" ", end = "")
        # 再打印一排特殊字符
        for j in range(2 * i - 1) :
            print(char, end = "")
        print()

printTriangle("@", 6)
printTriangle("#", height = 7)
printTriangle("*")

3.参数收集(个数可变的参数)

Python允许在形参前面添加一个星号(*),这样就意味着该参数可接受多个参数值,多个参数值被当成元组传入。

参数收集的本质就是一个元组:Python会将传给books参数的多个值收集成一个元组。如下代码所示:

# 定义一个形参个数可变的函数
def test(a, *books) :
    print(books)
    # books被当作元组处理
    for b in books :
        print(b)
    # 输出整数变量a的值
    print(a)
# 调用test()函数
test(5, "Java", "Python")
test()函数的第一个参数是一个个数可变的参数,由于该参数可接收个数不等的参数值,因此如果需要给后面的参数传入参数值,则需要使用关键字参数;否则,程序会把所传入的多个值都当成是传给books参数的。如下代码所示:
# 定义一个形参个数可变的函数
def test(*books, num) :
    print(books)
    for b in books :
        print(b)
    print(num)

# 调用test()函数
test("Java", "Python", num = 5)
Python还可以收集关键字参数,此时Python会将这种关键字参数收集成字典。如下所示:
# 定义一个形参个数可变的函数
def test(x, y, z = 3, *books, **scores) :
    print(x, y, z)
    print(books)
    print(scores)

# 调用test()函数
test(1, 2, 3, "Java", "Python", 语文 = 90, 数学 = 95)

test(1, 2, "Java", "Python", 语文 = 90, 数学 = 95)

test(1, 2, 语文 = 90, 数学 = 95)

4.逆向参数收集

所谓逆向参数收集,指的是在程序已有列表、元组、字典等对象的前提下,把它们的元素“拆开”后传给函数的参数。如下代码所示:

# 将列表的元素传递给函数的参数
def test(name, message) :
    print("用户是:", name)
    print("消息是:", message)
my_list = ["crystal", "欢迎来到毛茸茸小镇"]
test(*my_list)

# 将一个元组传递给函数的参数
def test1(name, *nums) :
    print("name参数:", name)
    print("nums参数:", nums)
my_tuple = (1, 2, 3)
# 使用逆向参数收集,将my_tuple元组的元素传给nums参数
test1('allan', *my_tuple)

#使用逆向参数收集,将my_tuple元组的第一个元素传给name参数,剩下的元素传给nums参数
def test2(name, *nums) :
    print("name参数:", name)
    print("nums参数:", nums)
my_tuple = (1, 2, 3)
test2(*my_tuple)

# 如果不使用逆向参数收集(不在元组参数之前添加星号),整个元组将会作为一个参数,而不是将元组的元素作为多个参数
def test3(name, *nums) :
    print("name参数是:", name)
    print("nums参数是:", nums)
my_tuple = (1, 2, 3)
test3(my_tuple)

# 字典也支持逆向参数收集,字典将会以关键字参数的形式传入
def bar(book, price, desc) :
    print(book, "这本书的价格是:", price)
    print("描述信息:", desc)
my_dict = {"book" : "疯狂Python讲义", "price" : 56, "desc" : "这是一本好书!"}
bar(**my_dict)

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小蝌蚪找玛玛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值