python *args 和**kwargs的用法

简介: 当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值。

当函数的参数不确定时,可以使用*args 和**kwargs,*args 没有key值,**kwargs有key值。

关于args:

#!-*-coding:utf-8-*-
#__author__ = 'ecaoyng'

def func_args(farg, *args):
    print("The first arg is %s" % farg)
    print(type(args))
    for arg in args:
        print('Other arg is %s' % arg)

func_args('hello','dear', 'python')

输出:

The first arg is hello
<class 'tuple'>
Other arg is dear
Other arg is python

当然,也可以将

parameters = ['hello','dear', 'python']
func_args(*parameters)
结果也是一样的

kwargs的用法

#!-*-coding:utf-8-*-
#__author__ = 'ecaoyng'

def fun_var_kwargs(farg, **kwargs):
    print ("arg:", farg)
    for key in kwargs:
        print("another keyword arg: %s: %s" % (key, kwargs[key]))


# fun_var_kwargs(farg=1, myarg2="two", myarg3=3)

kargs={'a': 1, 'b': 2, 'c': 3, 'd' : 4}
fun_var_kwargs(kargs)
print('='*40)
fun_var_kwargs('First',**kargs)

输出结果:

arg: {'a': 1, 'd': 4, 'b': 2, 'c': 3}
========================================
arg: First
another keyword arg: a: 1
another keyword arg: d: 4
another keyword arg: b: 2
another keyword arg: c: 3

现在更进一步讨论Python的星号(、*)的作用
当函数的参数前面有一个星号的时候表示这是一个可变的位置参数,两个星号*表示是可变的关键字参数。


def foo(*args, **kwarg):
    for item in args:
        print('In args:')
        print(item)

    for k,v in kwarg.items():
        print('In kwarg')
        print (k,v)
    print(30*'=')

foo(1, 2, 3, a=4, b=5)
# outputs:
# 1 in args.
# 2 in args.
# 3 in args.
# (a,4) in kwarg.
# (b,5) in kwarg.
foo(2, 3, a=4, b=5, c=1)
# outputs:
# 2 in args.
# 3 in args.
# (a,4) in kwarg.
# (b,5) in kwarg.
# (c,1) in kwarg.
#如上,我们可以传入任意多个参数
v = (1, 2, 4)
v2 = [11, 15, 23]
d = {'a': 1, 'b': 12}
foo(v, d)
# In args:
# (1, 2, 4)
# In args:
# {'a': 1, 'b': 12}
foo(*v, **d)
# In args:
# 1
# In args:
# 2
# In args:
# 4
# In kwarg
# b 12
# In kwarg
# a 1
foo(v2, d)
# In args:
# [11, 15, 23]
# In args:
# {'b': 12, 'a': 1}
foo(*v2, **d)
# In args:
# 11
# In args:
# 15
# In args:
# 23
# In kwarg
# a 1
# In kwarg
# b 12

注意
上面的示例中如果v、v2、d没有加星号那么就当成了一个参数传递给了函数,如果加了星号那么就会解包后传递给函数。
可变位置参数*args是一个元组,是不可修改的。
对于字典类型的如果只使用一个型号*那么传入的只是字典的键。

目录
相关文章
|
2天前
|
数据采集 NoSQL 中间件
python-scrapy框架(四)settings.py文件的用法详解实例
python-scrapy框架(四)settings.py文件的用法详解实例
8 0
|
2天前
|
存储 数据采集 数据库
python-scrapy框架(三)Pipeline文件的用法讲解
python-scrapy框架(三)Pipeline文件的用法讲解
6 0
|
2天前
|
存储 数据采集 JSON
python-scrapy框架(二)items文件夹的用法讲解
python-scrapy框架(二)items文件夹的用法讲解
10 0
|
2天前
|
数据采集 前端开发 中间件
python-scrapy框架(一)Spider文件夹的用法讲解
python-scrapy框架(一)Spider文件夹的用法讲解
9 0
|
11天前
|
Python 容器
Python中的for循环用法详解,一文搞定它
Python中的for循环用法详解,一文搞定它
|
17天前
|
缓存 Python
Python 标准库functools高阶函数用法
Python 标准库functools高阶函数用法
39 1
|
17天前
|
机器学习/深度学习 缓存 程序员
Python包管理工具 pip 及其常用命令和参数用法
Python包管理工具 pip 及其常用命令和参数用法
63 0
|
1月前
|
Python
Python中的r字符串前缀及其用法详解
Python的r字符串前缀用于创建原始字符串,不解析转义字符。在处理文件路径、正则表达式和特殊字符时特别有用。例如,`r&#39;C:\path&#39;`会保持反斜杠原样,而`&#39;\n&#39;`会被解释为换行。r字符串前缀不能用于变量或表达式,且仅影响字符串本身。了解这一特性有助于编写更清晰、准确的代码。
44 0
|
1月前
|
Python
Python中break详解以及用法
`break`语句在Python中用于提前结束循环。当遇到`break`时,循环立即停止,程序跳至循环体外继续执行。它适用于`for`和`while`循环,常与条件判断结合,满足特定条件即中断循环。示例展示了在不同循环中使用`break`的情况。注意,`break`只能用于循环且仅终止最内层循环,会导致循环中的`else`语句不执行。它是控制程序流程的有效工具,但需谨慎使用。
14 1
|
1月前
|
Python
python中threads.append的用法
将线程对象`t`添加到`threads`列表便于管理与控制线程,如等待所有线程完成。通过迭代列表并调用`join`方法,可依次等待每个线程执行完毕,实现同步。代码示例: ```python for t in threads: t.join() print(&quot;All threads are done!&quot;) ``` `join`方法使当前线程阻塞,直到线程执行结束。所有线程完成后,输出&quot;All threads are done!&quot;。
18 1