【Python】函数「一」——函数的参数传递

8 篇文章 1 订阅
6 篇文章 0 订阅
本文详细介绍了Python中函数参数的四种传递方式:直接传递、参数名传递、元组传递和字典传递,并通过示例解析了每种方式的使用。此外,还讲解了如何为参数设置默认值以及如何处理不定数量的参数。最后,探讨了Python函数参数中的特殊语法糖'/’和'*'的用法,并展示了它们在函数定义和调用中的作用。通过这些内容,读者可以更深入地理解Python函数的参数处理机制。
摘要由CSDN通过智能技术生成

参数传递的几种方式

Python支持多种函数参数传递。从传递方式上,可分为:

  • 直接传递
  • 参数名传递
  • 元组传递(本质上属于直接传递)
  • 字典传递(本质上属于参数名传递)
def funA(a, b):
    print(a, b)

# 1. 直接传递
funA(1, 2)
# 2. 参数名传递
funA(1, b=2)
funA(a=1, b=2)
funA(b=2, a=1)
# 3. 元组传递
params = (3, 4)
funA(*params)
# 4. 字典传递
data = { 'a': 5, 'b': 6 }
funA(**data)


为参数添加默认值

def funB(a, b=2):
    print(a, b)
    
'''
参数b默认值为2,因此funB(1)可以正常输出,结果为:1 2
'''
funB(1)

不定参的实现

当函数参数的数量不确定时,我们就需要函数对接收的参数数量没有限制,比如我们经常使用的print函数就可以接收多个字符串并进行拼接输出。

不定量参数定义又分为元组和字典两种方式:

  • 元组方式:在参数名前加"*",传递的参数会被打包成一个元组
  • 字典方式:在参数名前加"**",传递的参数会被打包成一个字典

# 1. 元组方式:在参数名前加"*",传递的参数会被打包成一个元组
def funC(*args):
    print(type(args), args)
    
funC(1, 2, 3)


# 2. 字典方式:在参数名前加"**",传递的参数会被打包成一个字典
def funD(**kwargs):
    print(type(kwargs), kwargs)

funD(a=1, b=2, c=3)


'''
将两种方式结合,咱们模拟实现print函数
sep是指定字符串元组str_tuple拼接时的分隔符,end是输出的结束符,默认为换行符
'''
def myprint(*str_tuple, **settings):
    sep = settings.get('sep')
    string = sep.join(str_tuple)
    end_str = settings.get('end') if settings.get('end') else '\n'
    print(string, end=end_str)

myprint("hello", "Amy", "Bertram", "Sam!", sep=', ')


一个有趣的语法糖:/和*

/和*是Python函数中有趣的语法糖:

  • 在函数参数中插入"/"参数,那么在其前面的参数就只能直接传递而无法用参数名传递
  • 在函数参数中插入"*"参数,那么在其后面的参数只能参数名传递而不能直接传递
# 这是一个正常的函数
def funE(a, b, c, d):
    print(a, b, c, d)
# 它可以这么调用
funE(1, 2, 3, 4)
funE(1, 2, 3, d=4)
funE(a=1, b=2, c=3, d=4)

# 如果加上"/",那么在其前面的参数就只能直接传递而无法用参数名传递
def funE_A(a, b, /, c, d):
    print(a, b, c, d)
# 它可以这么调用
funE_A(1, 2, 3, 4)
funE_A(1, 2, c=3, d=4)
# 但不能这么调用
# funE_A(1, b=2, c=3, d=4)
# funE_A(a=1, b=2, c=3, d=4)

# 如果加上"*",那么在其后面的参数只能参数名传递而不能直接传递
def funE_B(a, b, *, c, d):
    print(a, b, c, d)
# 它可以这么调用
funE_B(a=1, b=2, c=3, d=4)
funE_B(1, 2, c=3, d=4)
# 但不能这么调用
# funE_B(1, 2, 3, d=4)
# funE_B(1, 2, 3, 4)

我们还是与上一节一样,模拟实现print函数

# sep是指定字符串元组str_tuple拼接时的分隔符,默认为空格,end是输出的结束符,默认为换行符
def myprint2(str_list, /, *, sep=' ', end='\n'):
    string = sep.join(str_list)
    print(string, end=end)

str_list = ["hello", "Amy", "Bertram", "Sam!"]
myprint2(str_list, sep=', ')

如果我的分享能帮助到你,那我的分享就多了一份意义;如果有错误的地方劳烦指出,期待共同进步!

  • 1
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值