一、*args和**kwargs
python里的*args和**kwargs的特殊含义,他们都和函数有关,但是在函数调用和函数的声明时有着不同的意义。
一般来说,无论是函数的调用或者声明,单个星号表示有元组(或是列表)的出现,而两个星号则代表有字典出现。
二、函数的调用:
函数调用里的*和**
例如:
def check_web_server(host, port, path) : 用check_web_server('127.0.0.1', 8000, '/admin/')即可调用这个函数。
些信息在三元组里,如:
host_info= ('www.python.org', 80, '/') #http://www.python.org/ 这时候调用就会变成: check_web_server(host_info[0], host_info[1], host_info[2])
1.单星号
这种写法不可扩展,这时候我们可以用单星号来解决这种问题。因为在调用函数时,表达式在计算一个带星号前缀的元组或列表时,会将其打开。
check_web_server(*host_info)
2.双星号
双星号对应的字典的用法也是类似的。现在我们创建一个和('www.python.org', 80, '/')相似内容的字典
host_info= {'host': 'www.python.org', 'port': 80, 'path': '/'}
于是函数的调用就变成了:
check_web_server(**host_info)
它告诉函数在打开字典时,每个键是参数的名字,同时对应的值是函数调用的参数。它就等于:
check_web_server(host='www.python.org', port=80, path='/')
三、函数的声明
函数声明里的*和**
函数声明里的*和**虽然相似但作用不同:它们让Python得以支持变长参数(varargs),即函数可以接受任何数量的参数。
当定义一个有三个参数的函数时(没有默认值的参数),调用的时候必须传入正好三个参数。默认参数虽然引入了一些灵活性,但函数依然受制于所定义参数的最大数目。
如果需要更大的灵活性,我们可以用单星号表示的元组来定义一个变长参数,这个元组包含了所有的元素。现在我们来创建一个这样的“daily sales total”函数
def daily_sales_total(*all_sales) : total = 0.0 for each_sale in all_sales : total += float(each_sale) return total
相应的合法的函数调用有:
daily_sales_total() daily_sales_total(10.00) daily_sales_total(5.00, 1.50, '128.75') #Any type is allowed,not just flosts
不管你向这个函数传递多少参数,他都能够处理。all_sales就是一个包含了所有参数的元组(这就是我们要在函数定义里迭代all_sales的原因)。
你还可以把普通参数和和变长参数混在一起使用,这时候vararg就会捕捉所有剩下的参数,例如现在这个假设的check_web_server函数定义就能接受额外的参数了。
def check_web_server(host, port, path, *args):
注意:在函数定义里要使用变长参数 时,所有必须出现的参数一定先出现,然后是有默认值的参数,最后才是变长参数。
类似的,你也可以在函数声明里用双星号来接受任意数目的关键字参数,它们会在函数被调用时导入到另一个字典中。
def check_web_server(host, port, path, *args, **kwargs):
这个函数必须接受初始的三个参数,但是也能接受随后任何数目的参数或是关键字参数:在函数内部,我们可以分别检查args元组和kwargs字典的内容来决定是否丢弃它们。
相关推荐
python*excel 利用python进行excel操作代码 具体的操作和讲解见本人主页 后续将会持续更新excel,ppt,爬虫,人工智能等相关内容,敬请关注
python*pdf 利用python进行pdf操作代码 后续将会持续更新excel,ppt,爬虫,人工智能等相关内容,敬请关注
误删除Centos7.9 2009版本...rpm -Uvh --replacepkgs libxml2-python*.rpm --nodeps --force rpm -Uvh --replacepkgs python*.rpm --nodeps --force rpm -Uvh --replacepkgs rpm-python*.rpm yum*.rpm --nodeps --force
python入门
安装python分三个步骤: *下载python *安装python *检查是否安装成功 1、下载Python ...注意Linux和CentOS自带python,一般不用再下载python。 macOS 64-bit/32-bit installer:Mac电脑32位系统版本
A*算法是路径规划的算法之一,也是最经典的算法。此代码为学习过程中用python编写,能够实现生成指定大小的地图,并随机生成地图上的障碍物,然后在地图上进行算法寻最优路径
python实现*的形状(沙漏*)
一、*args的使用方法 *args 用来将参数打包成tuple给函数体调用 def fun(*arg): print(arg,type(arg)) print(*arg) fun(1,2,[8,9]) (1, 2, [8, 9]) 2 [8, 9] 并不一定必须是args,也可以是别的,但是官方不建议...
python语言基础,内部分享文档,可以帮您迅速了解python语言的奥秘
A*算法的python实现
这个项目需要安装**Python **和以下的Python函数库: 你还需要安装一个软件,以运行和编辑[ipynb](http://jupyter.org/)文件。 优达学城推荐学生安装 [Anaconda](https://www.continuum.io/downloads),这是一个...
Python实现9*9乘法表
主要介绍了Python可变参数*args和**kwargs用法,结合实例形式总结分析了Python中可变参数*args和**kwargs的功能、区别与具体使用技巧,需要的朋友可以参考下
python控制台输入密码,控制台输入密码变成`*`,支持删除等操作.
1. 你需要安装opencv,在cmd中输入:**pip3 install opencv-python** 2. 要使用需要将图片放置在和py文件同一个文件夹下,接着修改下面的pic后的参数为图片名字。 ``` if __name__ == "__main__": pic = ...
资源分类:Python库 所属语言:Python 资源全名:pyzgoubi-0.6.0.tar.gz 资源来源:官方 安装方法:https://lanzao.blog.csdn.net/article/details/101784059
完整的python3帮助文档,学习或使用python的童鞋,可以通过文档查看相关的函数及接口,大家快快下载吧
1.rpm -qa|grep python|xargs rpm -ev --allmatches --nodeps 删除python 2. whereis python |xargs rm -frv 删除所有残余文件 ...rpm -Uvh --force --nodeps --replacepkgs rpm-python*.rpm yum*.rpm
A*算法路径规划的python实现,长度不到150行,一个简单的demo,可以自定义起点、终点和障碍物的位置。