标签: argument-unpacking

2149
推荐指数
17
解决办法
65万
查看次数

星级算子是什么意思?

*运算符在Python 中的含义是什么,例如在代码中zip(*x)f(**k)

  1. 如何在解释器内部处理?
  2. 它会影响性能吗?是快还是慢?
  3. 什么时候有用,什么时候不用?
  4. 它应该用于功能声明还是通话中?

python syntax parameter-passing argument-unpacking iterable-unpacking

559
推荐指数
5
解决办法
17万
查看次数

拆包,扩展拆包和嵌套扩展拆包

考虑一下这些表达方式......请耐心等待...这是一个很长的清单......

(注意:重复一些表达式 - 这只是为了呈现"上下文")

a, b = 1, 2                          # simple sequence assignment
a, b = ['green', 'blue']             # list asqignment
a, b = 'XY'                          # string assignment
a, b = range(1,5,2)                  # any iterable will do


                                     # nested sequence assignment

(a,b), c = "XY", "Z"                 # a = 'X', b = 'Y', c = 'Z' 

(a,b), c = "XYZ"                     # ERROR -- too many values to unpack
(a,b), c = "XY"                      # ERROR -- need more than 1 value …
Run Code Online (Sandbox Code Playgroud)

python argument-unpacking python-3.x iterable-unpacking

93
推荐指数
2
解决办法
3万
查看次数

将数组解压缩为参数

所以在Python和Ruby中,有一个splat运算符(*)用于将数组作为参数解包.在Javascript中有.apply()函数.有没有办法在Go中将数组/切片作为函数参数解包?任何资源都会很棒!

有点像这样:

func my_func(a, b int) (int) {
    return a + b
}

func main() {
    arr := []int{2,4}
    sum := my_func(arr)
}
Run Code Online (Sandbox Code Playgroud)

如果我犯了语法/各种错误,我会道歉.我是Go的新手.

go argument-unpacking

86
推荐指数
2
解决办法
5万
查看次数

作为**解包的映射的python类

如果没有子类化dict,那么类需要被视为一个映射,以便它可以传递给**的方法

from abc import ABCMeta

class uobj:
    __metaclass__ = ABCMeta

uobj.register(dict)

def f(**k): return k

o = uobj()
f(**o)

# outputs: f() argument after ** must be a mapping, not uobj
Run Code Online (Sandbox Code Playgroud)

至少到它抛出缺少映射功能的错误,所以我可以开始实现.

我查看了模拟容器类型,但只是定义魔术方法没有效果,并且使用ABCMeta覆盖并将其注册为dict将断言验证为子类,但是失败是isinstance(o,dict).理想情况下,我甚至不想使用ABCMeta.

python mapping class argument-unpacking

57
推荐指数
2
解决办法
7269
查看次数

将数组/列表传递给Python

我一直在寻找将Python倾向于调用它们的数组或列表传递给函数.

我读了一些关于使用*args的内容,例如:

def someFunc(*args)
    for x in args
        print x
Run Code Online (Sandbox Code Playgroud)

但不确定这是对还是错.似乎没有什么能像我想的那样工作.我习惯于能够轻松地将数组传递给PHP函数,这让我感到困惑.我似乎也做不到这个:

def someFunc(*args, someString)
Run Code Online (Sandbox Code Playgroud)

因为它引发了一个错误.

我想我只是让自己完全糊涂了,并且正在找人为我清理它.

python parameter-passing argument-unpacking

42
推荐指数
4
解决办法
25万
查看次数

如何从列表中提取参数并将它们传递给函数调用

从列表中提取项目并将它们作为参数传递给函数调用的简单方法是什么,如下例所示?

例:

def add(a,b,c,d,e):
    print(a,b,c,d,e)

x=(1,2,3,4,5)

add(magic_function(x))
Run Code Online (Sandbox Code Playgroud)

python list argument-unpacking

42
推荐指数
3
解决办法
3万
查看次数

Python:python中的Splat/unpack运算符*不能用在表达式中?

有没有人知道为什么unary(*)运算符不能用在涉及iterators/lists/tuples的表达式中的原因?

为什么它只限于功能拆包?或者我认为错了?

例如:

>>> [1,2,3, *[4,5,6]]
File "<stdin>", line 1
[1,2,3, *[4,5,6]]
        ^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)

为什么不是*运营商:

[1, 2, 3, *[4, 5, 6]] give [1, 2, 3, 4, 5, 6]
Run Code Online (Sandbox Code Playgroud)

而当*操作符与函数调用一起使用时,它会扩展:

f(*[4, 5, 6]) is equivalent to f(4, 5, 6)
Run Code Online (Sandbox Code Playgroud)

使用列表时+*使用列表时之间存在相似性,但在使用其他类型扩展列表时则不相似.

例如:

# This works
gen = (x for x in range(10))

def hello(*args):
    print args    
hello(*gen)

# but this does not work
[] + gen
TypeError: can only concatenate …
Run Code Online (Sandbox Code Playgroud)

python argument-unpacking python-2.7 iterable-unpacking pep448

25
推荐指数
2
解决办法
8942
查看次数

Python关键字参数解包并返回字典

我有一个函数定义如下,我传递的是关键字参数.如何返回与关键字参数同名的字典?

我可以手动做:

def generate_student_dict(first_name=None, last_name=None , birthday=None, gender =None):
    return {
        'first_name': first_name,
        'last_name': last_name,
        'birthday': birthday,
        'gender': gender
    }
Run Code Online (Sandbox Code Playgroud)

但我不想这样做.有没有什么方法可以让我在没有实际输入字典的情况下完成这项工作?

 def generate_student_dict(self, first_name=None, last_name=None, birthday=None, gender=None):
     return # Packed value from keyword argument.
Run Code Online (Sandbox Code Playgroud)

python dictionary argument-unpacking

20
推荐指数
2
解决办法
3339
查看次数

python的splat运算符*和**在哪里有效?

拆包/图示运营商***在横跨Python版本(2.7,3.X <3.5和3.x> = 3.5)其适用性广泛不同.

例如:

                                   |   2.7    |   3.1-3.4  |   3.5   
----------------------------------------------------------------------
function(*args)                         ?            ?          ?    

x, *y, z = [1, 2, 3, 4, 5]              x            ?          ?    

{**x, **y}                              x            x          ?    
Run Code Online (Sandbox Code Playgroud)

我错过了各种版本之间是否还有其他差异?我正在浏览PEP和Readmes,但文档并未详细说明.

python function parameter-passing argument-unpacking iterable-unpacking

17
推荐指数
1
解决办法
3513
查看次数