在下面的方法定义,什么是*和**为做param2?
def foo(param1, *param2):
def bar(param1, **param2):
Run Code Online (Sandbox Code Playgroud) python syntax parameter-passing variadic-functions argument-unpacking
*运算符在Python 中的含义是什么,例如在代码中zip(*x)或f(**k)?
python syntax parameter-passing argument-unpacking iterable-unpacking
在python中将列表列表加入单个列表(或迭代器)的简短语法是什么?
例如,我有一个如下列表,我想迭代a,b和c.
x = [["a","b"], ["c"]]
Run Code Online (Sandbox Code Playgroud)
我能想到的最好的是如下.
result = []
[ result.extend(el) for el in x]
for el in result:
print el
Run Code Online (Sandbox Code Playgroud) 运营商的正确名称是什么*,如function(*args)?解压缩,解压缩,其他什么?
我有一个Python函数,它需要几个参数.在某些情况下,可以省略其中一些参数.
def some_function (self, a, b, c, d = None, e = None, f = None, g = None, h = None):
#code
Run Code Online (Sandbox Code Playgroud)
这些参数d通过h是字符串,每个都有不同的含义.重要的是我可以选择以任意组合传递哪些可选参数.例如,(a, b, C, d, e)或(a, b, C, g, h),或(a, b, C, d, e, f,或全部(这些是我的选择).
如果我可以重载函数会很棒 - 但我读到Python不支持重载.我试图在列表中插入一些必需的int参数 - 并得到一个参数不匹配错误.
现在我发送空字符串代替前几个缺少的参数作为占位符.我希望能够使用实际值调用函数.
有没有办法做到这一点?我可以传递一个列表而不是参数列表吗?
现在使用ctypes的原型看起来像:
_fdll.some_function.argtypes = [c_void_p, c_char_p, c_int, c_char_p, c_char_p, c_char_p, c_char_p, c_char_p]
Run Code Online (Sandbox Code Playgroud) 可能重复:
Python中的转置/解压缩功能
我有一个如下所示的列表:
list = (('1','a'),('2','b'),('3','c'),('4','d'))
Run Code Online (Sandbox Code Playgroud)
我想将列表分成2个列表.
list1 = ('1','2','3','4')
list2 = ('a','b','c','d')
Run Code Online (Sandbox Code Playgroud)
我可以这样做:
list1 = []
list2 = []
for i in list:
list1.append(i[0])
list2.append(i[1])
Run Code Online (Sandbox Code Playgroud)
但我想知道是否有更优雅的解决方案.
我有一个数组列表,我想获得数组中元素的笛卡尔积.
我将用一个例子来说明这个更具体......
itertools.product似乎可以做到这一点,但我陷入了一些细节.
arrays = [(-1,+1), (-2,+2), (-3,+3)];
Run Code Online (Sandbox Code Playgroud)
如果我做
cp = list(itertools.product(arrays));
Run Code Online (Sandbox Code Playgroud)
我明白了
cp = cp0 = [((-1, 1),), ((-2, 2),), ((-3, 3),)]
Run Code Online (Sandbox Code Playgroud)
但我想得到的是
cp1 = [(-1,-2,-3), (-1,-2,+3), (-1,+2,-3), (-1,+2,+3), ..., (+1,+2,-3), (+1,+2,+3)].
Run Code Online (Sandbox Code Playgroud)
我尝试了一些不同的东西:
cp = list(itertools.product(itertools.islice(arrays, len(arrays))));
cp = list(itertools.product(iter(arrays, len(arrays))));
Run Code Online (Sandbox Code Playgroud)
他们都让我CP0代替CP1.
有任何想法吗?
提前致谢.
我的例子是:
>>> def f(a, b, c, d): print(a, b, c, d, sep = '&')
>>> f(1,2,3,4)
1&2&3&4
>>> f(*[1, 2, 3, 4])
1&2&3&4
Run Code Online (Sandbox Code Playgroud)
要彻底了解它,我想查阅有关'*'的文档.
你能建议我去哪儿看吗?
在此示例中,明星运算符对输入参数列表的作用是什么?
def main(name, data_dir='.'):
print 'name', type(name)
if __name__ == '__main__':
main(*sys.argv)
Run Code Online (Sandbox Code Playgroud)
具体来说,如果我使用星号运算符运行程序,它会打印:
name <type 'str'>
Run Code Online (Sandbox Code Playgroud)
如果在没有星形的情况下运行main(sys.argv)则打印
name <type 'list'>
Run Code Online (Sandbox Code Playgroud) 有没有一种简单的方法来计算python中N个列表的元素总和?我知道如果我们定义了 n个列表(调用第i个列表c_i),我们可以这样做:
z = [sum(x) for x in zip(c_1, c_2, ...)]
Run Code Online (Sandbox Code Playgroud)
例如:
c1 = [1,2]
c2 = [3,4]
c3 = [5,6]
z = [sum(x) for x in zip(c1,c2,c3)]
Run Code Online (Sandbox Code Playgroud)
这里 z = [9, 12]
但是如果我们没有c_i定义并且c_1...c_n在列表中有C什么呢?
有没有类似的方法找到z,如果我们只是有C?
我希望这很清楚.
已解决:我想知道*运营商的全部内容......谢谢!