python中列表的切片操作

有拾起了scipy,温习了odeint,但是遇到了之前没想明白的一个python语法,关于列表的切片操作

一个二维数组,要想取每个一级元素的某一位,如一个列表10个元素,每个元素又是包含(x,y)两个元素。

想把每个元素的第一个取出来,需要这样做:

list[:,0]

逗号,分隔出二维数组的维数。

冒号,切片操作。冒号前,起始元素;冒号后终止元素

三维数组同理

python中函数参数的打包和解包

最近学习scipy中的optimize模块的几个函数,包括fsolve,leastsq。注意到里面有几处函数调用,其参数调用不是很了解。于是百度/Google了一下。看了看觉得收益匪浅。

以fsolve为例,其定义如下:

def fsolve(func, x0, args=(), fprime=None, full_output=0, col_deriv=0, xtol=1.49012e-8, maxfev=0, band=None, epsfcn=None, factor=100, diag=None)

Parameters

func : callable “f(x, *args)“
A function that takes at least one (possibly vector) argument.

x0 : ndarray
The starting estimate for the roots of “func(x) = 0“.

args : tuple, optional
Any extra arguments to `func`.

fprime : callable(x), optional
A function to compute the Jacobian of `func` with derivatives across the rows. By default, the Jacobian will be estimated.

其中args参数的传递,一直不太明白,是怎么传的,如何赋值。调用的时候是怎么判断函数需要几个参数的(这个应该是自己定义的,自己清楚)。今天查了一下函数参数的打包与解包才算弄清楚。

摘录关键部分如下:

python中的 * 和 ** ,能够让函数支持任意数量的参数,它们在函数定义和调用中,有着不同的目的。

一、打包参数

* 的作用:在函数定义中,收集所有位置参数到一个新的元组,并将整个元组赋值给变量args。

** 的作用:在函数定义中,收集关键字参数到一个新的字典,并将整个字典赋值给变量kwargs。

二、解包参数

* 的作用:在函数调用中,* 能够将元组或列表解包成不同的参数。

** 的作用:在函数调用中,** 会以键/值的形式解包一个字典,使其成为一个独立的关键字参数。

打包和解包并不能脱离函数而存在!!