美文网首页python学习
python \*和**用法、序列解包

python \*和**用法、序列解包

作者: caizhanjin | 来源:发表于2019-08-12 20:55 被阅读0次
1.算数运算

* 代表乘法
** 代表乘方

2.函数形参

主要用于函数定义,区别:

  • *args,表示任何多个无名参数,它本质是一个 tuple(位置参数positional argument)
  • **kwargs 表示关键字参数,它本质上是一个 dict(关键词参数keyword argument)
    如果同时使用 *args 和 **kwargs 时,必须 *args 参数列要在 **kwargs 之前。可变位置参数*args是一个元组,是不可修改的。
def fun(name, *args, **kwargs):
  print(name)
  print(args)
  print(kwargs)
 
fun(1, 2, 3, 4, 5, a="1", b="2", c="3")

1
(2, 3, 4, 5)
{a="1", b="2", c="3"}
3.函数实参

如果函数的形参是定长参数,也可以使用 *args 和 **kwargs 调用函数,类似对元组和字典进行解引用。

def fun(data1, data2, data3):
  print("data1: ", data1)
  print("data2: ", data2)
  print("data3: ", data3)
  
args = ("one", 2, 3)
fun(*args)

data1:  one
data2:  2
data3:  3

kwargs = {"data3": "one", "data2": 2, "data1": 3}
fun(**kwargs)

data1:  3
data2:  2
data3:  one
4.序列解包
  • 什么是序列解包,看例子:这种方法并不限于列表和元组,而是适用于任意序列类型(甚至包括字符串和字节序列)。只要赋值运算符左边的变量数目与序列中的元素数目相等,都可以用这种方法将元素序列解包到另一组变量中。
a, b, c = 1, 2, 3
# a = 1
# b = 2
# c = 3
  • 可以利用 * 表达式获取单个变量中的多个元素,只要它的解释没有歧义即可。* 获取的值默认为 list.
    获取剩余部分:
a, b, *c = 0, 1, 2, 3
# a = 0
# b = 1
# c = (2, 3)

获取中间部分:

a, *b, c = 0, 1, 2, 3
# a = 0
# b = (1, 2)
# c = 3

如果左值比右值要多,那么带 * 的变量默认为空:

a, *b, c = a, b, *c = 0, 1
# a = 0
# b = 1
# c = ()

嵌套解包:

(a, b), (c, d) = (1, 2), (3, 4)
# a = 1
# b = 2
# c = 3
# d = 4

出处:
https://blog.csdn.net/yilovexing/article/details/80577510
https://blog.csdn.net/yilovexing/article/details/80576788

相关文章

  • python \*和**用法、序列解包

    1.算数运算 * 代表乘法** 代表乘方 2.函数形参 主要用于函数定义,区别: *args,表示任何多个无名参数...

  • 2018-04-07

    # Python序列解包

  • Python序列解包

    序列解包是Python特有的语法,它将一个序列(或任何可迭代对象)解开,并将得到的值存储到一系列变量中。 一个有趣...

  • 学习 python有趣的解包用法

    python中的解包可以这样理解:一个list是一个整体,想把list中每个元素当成一个个个体剥离出来,这个过程就...

  • 编程语言基础python之序列解包和打包

    python中序列类型有可变的列表、字典、集合和不可变的元组、字符串。Python中一次给多个变量赋值的方法,称为...

  • Python3序列赋值、序列解包详解(上)

    ###概述赋值是各个编程语言通用的概念,而在Python有多种赋值方法以供选择,比如元组、列表、序列赋值运算等,甚...

  • Python3序列赋值、序列解包详解(下)

    扩展序列解包 上节我们提到解决赋值中等号两边参数不一致的方法可以通过切片,但在Python3中我们可以利用特定的语...

  • ES6

    ES6: ES6 新语法 1.变量 解构赋值 (解构赋值对应的python里的序列解包) 解构赋值方式一: 解构赋...

  • 第三部分:第十章

    1.upper():将字符串中的小写字母转为大写字母 2.python 3.0中的扩展序列解包中,a,*b = '...

  • 你应该知道的Python新方法(一 )

    Python 3.5 + : 扩展了*可迭代解包操作符和**字典解包操作符 矩阵乘法添加了中缀运算符 @ 为标准...

网友评论

    本文标题:python \*和**用法、序列解包

    本文链接:https://www.haomeiwen.com/subject/cfppjctx.html