一、*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字典的内容来决定是否丢弃它们。
相关推荐
- **1.6 Debian GNU/Linux上的Python**:介绍了在Debian GNU/Linux系统中安装Python的方式。 - **1.7 从源代码安装Python**:适合高级用户,讲解如何从源码编译并安装Python。 - **1.8 使用Python的交互Shell**:...
4. **Learning Python** - 《Python学习手册(套装上下册)(原书第5版)》 马特·祖瑞克的经典之作,全面覆盖Python语言的各个方面,适合深入学习。 5. **Python Cookbook** - 《Python Cookbook(第3版)中⽂版》 ...
它结合了Dijkstra算法的全局最优性和Greedy最佳优先搜索的效率,通过引入启发式函数来估计从当前节点到目标节点的最佳路径。在Python环境下实现A*算法,有助于理解其工作原理,并能方便地应用于各种实际问题。 在这...
Python 3.4.0 API 文档是 Python 开发者不可或缺的重要参考资料,它详细地介绍了 Python 3.4 版本的各种内置函数、模块、类和接口。这个文档以 CHM(Compiled HTML Help)格式提供,是 Microsoft 开发的一种帮助文件...
使用纯python脚本控制pico3000系列示波器,支持win和linux平台(源码),很好的资源! 使用纯python脚本控制pico3000系列示波器,支持win和linux平台(源码),很好的资源! 使用纯python脚本控制pico3000系列示波器...
python实现*的形状(沙漏*)
3. **创建安装目录**: 在D盘或其他盘符下创建Python安装目录,例如`D:\Python`,并在该目录下为Python2和Python3分别创建子目录,如`D:\Python\python27`和`D:\Python\python3x`。 #### 安装Python2 1. **安装...
Python是一种高级、通用的编程语言,以其简洁明了的语法和强大的功能而受到广大开发者的喜爱。它的设计哲学强调代码的可读性和简洁的语法,特别是使用空格缩进划分代码块,而非使用大括号或者关键字。Python支持多种...
8. **安装和使用 Python**:涵盖 Python 的下载、安装、配置环境变量、设置虚拟环境等,是新用户了解 Python 环境搭建的基础教程。 9. **发布 Python 模块**:对于希望分享或分发自己代码的开发者,这份文档讲述了...
本文档提供了 Python 编程语言的详细入门教程,从零基础到精通,涵盖了 Python 的各个方面,包括语法、数据类型、函数、模块、面向对象、异常处理、网络编程和并发编程等。 第一章:Python 介绍 * Python 由来和...
在Python编程语言中,扩展和嵌入Python解释器是两个重要的概念,特别是在开发涉及C/C++和其他低级语言与Python交互的应用时。Python3.7.2中文文档提供了关于这两个主题的详细指导,帮助开发者更好地理解和利用Python...
1. **安装Python**: 首先,你需要了解如何在Windows、Mac或Linux系统上下载和安装Python解释器,包括选择版本(如Python 3.x)和配置环境变量。 2. **Python交互式环境**: 介绍IDLE,Python的默认集成开发环境,...
- **安装Python**:可以从Python官方网站下载相应版本的安装包,按照向导进行安装。 - **Python环境**:Python自带的集成开发环境IDLE可以方便地编写和运行Python程序,此外还可以使用其他IDE,如Sublime Text,...
### Python基础教程知识点总结...以上是对“Python基础教程(全60课)”的主要内容进行了详细的总结和扩展。这套教程覆盖了从环境搭建到高级主题如面向对象编程、正则表达式等内容,非常适合初学者系统地学习Python编程。
Python是一种广泛使用的高级编程语言,以其易读性、简洁的语法和强大的功能而闻名。Python 3.8是Python语言的一个重要版本,它包含了多个新特性和改进,旨在提升开发者的效率和代码质量。在Windows操作系统上安装...
5. **配置和编译Python**:运行`./configure`以配置Python,然后使用`make`命令编译源码。这一步会使用前面安装的GCC和GLIBC等工具。 6. **安装Python**:最后,使用`make altinstall`(推荐,以避免覆盖系统默认的...
6. **使用Python**:现在你已经可以开始使用Python 3.9了,无论是编写脚本、开发应用还是学习编程,都能享受到这一版本带来的新特性和性能提升。 在安装过程中,如果遇到任何问题,可以参考"安装步骤.jpg"中的指南...