首页 > 编程语言 >Python | *args和**kwargs是什么?怎么用?

Python | *args和**kwargs是什么?怎么用?

时间:2023-06-11 17:46:28浏览次数:36  
标签:Python kwargs args 参数 key arg print

在python语言写成的模块中的函数里,常常可以看到函数的参数表列里面有这两个参数,形如:

def some_function(*args, **kwargs):
    to do list
    return ...

*args**kwargs是什么?

首先,解释星号的作用,一个星号*的作用是将tuple或者list中的元素进行unpack,作为多个参数分开传入;两个星号**的作用是把dict类型的数据作为参数传入。

*args用于传递任意数量的位置参数,其实际上会将这些参数打包成一个元组(tuple)传递给函数。这个元组的名字可以是任意的,但通常使用args来表示。例如:

def foo(*args):
    for arg in args:
        print(arg)
        
foo(1, 2, 3, 4)  # 输出:1 2 3 4

**kwargs用于传递任意数量的关键字参数,其实际上会将这些参数打包成一个字典(dict)传递给函数。这个字典的名字可以是任意的,但通常使用kwargs来表示。例如:

def bar(**kwargs):
    for key, value in kwargs.items():
        print(key, value)
        
bar(a=1, b=2, c=3)  # 输出:a 1   b 2   c 3

实际并不必须写成 *args**kwargs(这样写只是一个约定而已)。只有变量前面的 *(星号) 才是关键。当然我们可以写成 *var**vars, 但是不建议修改。

kwargs是keyword argument的缩写,args就是argument。我们知道,在Python中有两种参数,一种叫位置参数(positional argument),一种叫关键词参数(keyword argument),关键词参数只需要用 keyword = somekey 的方法即可传参,而位置参数只能由参数位置决定。这也就决定了位置参数一定要在前面,否则关键词参数数量的变化(比如有些kwargs有默认值因此没有传参或者在后面传参的),都会使得位置无法判断。因此常见的也是*args**kwargs 前面。

两者区别

  • *args 接收多余的位置参数, 以元组的形式显示
  • **kwargs 接收多余的关键字参数, 以字典的形式显示
  • 并且同时使用 *args**kwargs 时, *args 参数必须放在 **kwargs

*args的使用

你可以将不定数量的参数传递给一个函数。

def test(t_arg,*args):
	print("first arg:",t_arg)
	for arg in args:
		print("another arg through *args:",arg)
test('python','java','php','c++')

# 输出结果
"""
first arg: python
another arg through *args: java
another arg through *args: php
another arg through *args: c++
"""

**kwargs的使用

**kwargs 允许将不定长度的键值对, 作为参数传递给一个函数。如果想要在一个函数里处理带名字的参数, 应该使用 **kwargs

def test2(**kwargs):
    for key, value in kwargs.items():
        print(f'{key} == {value}')
test2(name='张三')
# name == 张三	

*args**kwargs 同时使用

在一个函数中,*args**kwargs可以同时使用,但是*args必须出现在**kwargs之前。例如:

def foobar(*args, **kwargs):
    for arg in args:
        print(arg)
    for key, value in kwargs.items():
        print(key, value)
        
foobar(1, 2, 3, a=4, b=5)  # 输出:1 2 3   a 4   b 5

**kwargs 遍历

方法一(推荐):

def test_kwargs(**kwargs):
    for key,value in kwargs.items():
        print("{} is {}.".format(key,value))
123

方法二:

def fxn(a1, **kwargs):
    print a1
    for k in kwargs:
        print k, " : ", kwargs[k]

标签:Python,kwargs,args,参数,key,arg,print
From: https://www.cnblogs.com/zhangxuegold/p/17473267.html

相关文章

  • Python使用Redis实现一个简单作业调度系统
        概述Redis作为内存数据库的一个典型代表,已经在很多应用场景中被使用,这里仅就Redis的pub/sub功能来说说怎样通过此功能来实现一个简单的作业调度系统。这里只是想展现一个简单的想法,所以还是有很多需要考虑的东西没有包括在这个例子中,比如错误处理,持久化等。下面是实现上......
  • Python内存数据库/引擎(sqlite memlite pydblite)
        1初探在平时的开发工作中,我们可能会有这样的需求:我们希望有一个内存数据库或者数据引擎,用比较Pythonic的方式进行数据库的操作(比如说插入和查询)。举个具体的例子,分别向数据库db中插入两条数据,”a=1,b=1″和“a=1,b=2”,然后想查询a=1的数据可能会使用这样的语句db......
  • Python使用multiprocessing实现一个最简单的分布式作业调度系统
    介绍Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上。一个服务进程可以作为调度者,将任务分布到其他多个机器的多个进程中,依靠网络通信。想到这,就在想是不是可以使用此模块来实现一个简单的作业调度系统。实现Job首先创建一个Job类,为......
  • python flask 表单处理Flask-WTF
        涉及到的插件和包有Flask-WTF,WTForms。内容有表单的创建使用流程,一些最佳实践,还有在页面显示提示消息的简单方式,配合Flask内置的flash()。Flask的requset对象包含了client端发送过来的所有请求,在request.form中就有POST方法提交过来的表单数据。直接使用这些数据可以......
  • python调用浏览器,实现刷网页小程序
       python打开浏览器,可以做简单的刷网页的小程序and其他有想象力的程序。不过仅供学习,勿用非法用途。python的webbrowser模块支持对浏览器进行一些操作主要有以下三个方法:webbrowser.open(url,new=0,autoraise=True)webbrowser.open_new(url)webbrowser.open_n......
  • python中文乱码问题大总结
        在运行这样类似的代码:#!/usr/bin/envpythons="中文"prints最近经常遇到这样的问题:问题一:SyntaxError:Non-ASCIIcharacter'\xe4'infileE:\coding\python\Untitled6.pyonline3,butnoencodingdeclared;seehttp://www.python.org/peps/pep-0263.......
  • Python中http请求方法库汇总
    最近在使用python做接口测试,发现python中http请求方法有许多种,今天抽点时间把相关内容整理,分享给大家,具体内容如下所示:一、python自带库----urllib2python自带库urllib2使用的比较多,简单使用如下:importurllib2response=urllib2.urlopen('http://localhost:8080/jenkins/api/jso......
  • Python爬虫
    目录PythonSpider第一章爬虫入门1.1爬虫概述1.1.1爬虫原理1.1.2爬虫分类1.1.3爬虫应用1.2爬虫流程1.2.1爬取网页1.2.2解析网页1.2.3存储数据1.3爬虫协议1.3.1Robots协议1.3.2robots.txt文件简介1.3.3robots.txt文件详解1.3.4爬虫准则1.4爬虫环境1.4.1原生Python+......
  • 实验6 turtle绘图与python库应用编程体验
    task1_1代码:fromturtleimport*defmove(x,y):'''画笔移动到坐标(x,y)处'''penup()goto(x,y)pendown()defdraw(n,size=100):'''绘制边长为size的正n变形'''foriinrange(n):......
  • Python中的logging模块
    官方文档基本用法下面的代码展示了logging最基本的用法。#-*-coding:utf-8-*-importloggingimportsys#获取logger实例,如果参数为空则返回rootloggerlogger=logging.getLogger("AppName")#指定logger输出格式formatter=logging.Formatter('%(ascti......