社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

Python函数参数匹配模型(下)

若数 • 6 年前 • 535 次点击  
阅读 10

Python函数参数匹配模型(下)

任意参数 *

当我们的函数接收参数为任意个,或者不能确定参数个数时,我们,可以利用*来定义任意数目的参数,这个函数调用时,其所有不匹配的位置参数会被赋值为元组,我们可以在函数利用循环或索引进行使用

def f(*args):
    # 直接打印元组参数
    print(args)
    print('-'*20)
    # 循环打印元组参数
    [print(i) for i in args]
    ...


# 传递一个参数
f(1)
print('='*20)
# 传递5个参数
f(1, 2, 3, 4, 5)
复制代码

示例结果:

(1,)
--------------------
1
====================
(1, 2, 3, 4, 5)
--------------------
1
2
3
4
5
复制代码

###任意参数 ** 而**是用于收集关键字参数并将这些参数传递给一个新的字典,即在函数中我们可以利用处理字典的方式处理这些参数

def f(**args):
    # 直接打印字典参数
    print(args)
    for key, value in args.items():
        print('{}: {}'.format(key, value))


f(a=1)
print('='*20)
f(a=1, b=2, c=3)
复制代码

示例结果:

{'a': 1}
a: 1
====================
{'a': 1, 'b': 2, 'c': 3}
a: 1
b: 2
c: 3
复制代码

任意参数混合

我们可以混合一般参数、*参数以及**参数完成实现更加复杂的调用方式。

def f(a, *targs, **dargs):
    print(a, targs, dargs)


f(1,2,3, x=1, y=2)
复制代码

示例结果:

1 (2, 3) {'x': 1, 'y': 2}
复制代码

可以看到这种调用方式并不那么直观,甚至有些“混淆视听”,那么怎么在复杂任意参数的调用时,是的在函数调用更加直观明了?

解包参数

我们可以在函数调用时,直接利用*和**进行参数传递,然后让函数自动解包,也就类似之前的序列解包,使用调用时更加的直观。

def f(a, b, c, d):
    print(a, b, c, d)


f(1, *(2, 3), **{'d': 4})
复制代码

示例结果:

1 2 3 4
复制代码
Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/34304
 
535 次点击