网站首页 > 基础教程 正文
问题
你想构造一个可接受任意数量参数的函数。
解决方案
为了能让一个函数接受任意数量的位置参数,可以使用一个 * 参数。例如:
def avg(first, *rest):
return (first + sum(rest)) / (1 + len(rest))
# Sample use
avg(1, 2) # 1.5
avg(1, 2, 3, 4) # 2.5
在这个例子中,rest 是由所有其他位置参数组成的元组。然后我们在代码中把它当成了一个序列来进行后续的计算。 为了接受任意数量的关键字参数,使用一个以**开头的参数。比如:
import html
def make_element(name, value, **attrs):
keyvals = [' %s="%s"' % item for item in attrs.items()]
attr_str = ''.join(keyvals)
element = '<{name}{attrs}>{value}</{name}>'.format(
name=name,
attrs=attr_str,
value=html.escape(value))
return element
# Example
# Creates '<item size="large" quantity="6">Albatross</item>'
make_element('item', 'Albatross', size='large', quantity=6)
# Creates '<p><spam></p>'
make_element('p', '<spam>')
在这里,attrs 是一个包含所有被传入进来的关键字参数的字典。 如果你还希望某个函数能同时接受任意数量的位置参数和关键字参数,可以同时使用 * 和 **。比如:
def anyargs(*args, **kwargs):
print(args) # A tuple
print(kwargs) # A dict
使用这个函数时,所有位置参数会被放到 args 元组中,所有关键字参数会被放到字典 kwargs 中。
讨论
一个 * 参数只能出现在函数定义中最后一个位置参数后面,而**参数只能出现在最后一个参数。有一点要注意的是,在 * 参数后面仍然可以定义其他参数。
def a(x, *args, y):
pass
def b(x, *args, y, **kwargs):
pass
猜你喜欢
- 2024-11-15 Python中10个最容易被忽略的内建函数
- 2024-11-15 Python 数据分析——NumPy ufunc函数
- 2024-11-15 应该早点了解 Python 中的 5 件事
- 2024-11-15 「Python基础知识」Python中常用的内建函数有哪些
- 2024-11-15 Python中高级函数及其用法(python3高级用法)
- 2024-11-15 python 自学 函数2(python函数详解)
- 2024-11-15 Python3入门——内置函数一(python内置函数怎么用)
- 2024-11-15 福利来了!68个Python内置函数最全总结,建议收藏
- 2024-11-15 Python 函数式编程(python编写程序函数)
- 2024-11-15 Python中的函数注释:参数有冒号,声明后有-> 箭头
- 06-18单例模式谁都会,破坏单例模式听说过吗?
- 06-18Objective-c单例模式的正确写法「藏」
- 06-18单例模式介绍(单例模式都有哪些)
- 06-18前端设计-单例模式在实战中的应用技巧
- 06-18PHP之单例模式(php单例模式连接数据库)
- 06-18设计模式:单例模式及C及C++实现示例
- 06-18python的单例模式(单例 python)
- 06-18你认为最简单的单例模式,东西还挺多
- 最近发表
- 标签列表
-
- jsp (69)
- gitpush (78)
- gitreset (66)
- python字典 (67)
- dockercp (63)
- gitclone命令 (63)
- dockersave (62)
- linux命令大全 (65)
- pythonif (86)
- location.href (69)
- dockerexec (65)
- tail-f (79)
- queryselectorall (63)
- location.search (79)
- bootstrap教程 (74)
- 单例 (62)
- linuxgzip (68)
- 字符串连接 (73)
- html标签 (69)
- c++初始化列表 (64)
- mysqlinnodbmyisam区别 (63)
- arraylistadd (66)
- mysqldatesub函数 (63)
- window10java环境变量设置 (66)
- c++虚函数和纯虚函数的区别 (66)