Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/281.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在python中传递列表并将其长度设置为默认参数_Python_List_Oop_Methods - Fatal编程技术网

在python中传递列表并将其长度设置为默认参数

在python中传递列表并将其长度设置为默认参数,python,list,oop,methods,Python,List,Oop,Methods,我有一个来自Python的类方法,如下所示: def func(indel, nind=indel.length): #do_something indel是一个列表 当我使用这个函数定义时,我得到了一个错误。有什么方法可以做到吗?当您尝试运行此代码时,您将得到错误NameError:name'indel'未定义 定义函数时,indel尚未分配值,只有在调用函数后才会有值。因此,你应该做以下几点 def func(indel): nind=len(indel) #do_

我有一个来自Python的类方法,如下所示:

def func(indel, nind=indel.length):
    #do_something
indel是一个列表


当我使用这个函数定义时,我得到了一个错误。有什么方法可以做到吗?

当您尝试运行此代码时,您将得到错误
NameError:name'indel'未定义

定义函数时,
indel
尚未分配值,只有在调用函数后才会有值。因此,你应该做以下几点

def func(indel):
    nind=len(indel)
    #do_something

当您尝试运行此代码时,将出现错误
NameError:name'indel'未定义

定义函数时,
indel
尚未分配值,只有在调用函数后才会有值。因此,你应该做以下几点

def func(indel):
    nind=len(indel)
    #do_something
不可能。这是不可能的(即使您使用了正确的语法,即
def func(indel,nind=len(indel)):

函数的默认参数是在函数定义时(这也是为什么您永远不应该使用可变的默认参数)精确计算的。在定义期间,
indel
尚未定义,如您可能会遇到的错误所示:
NameError:name'indel'未定义

唯一的选项是在函数中“计算”列表的长度。

否。这是不可能的(即使使用了正确的语法,即
def func(indel,nind=len(indel)):

函数的默认参数是在函数定义时(这也是为什么您永远不应该使用可变的默认参数)精确计算的。在定义期间,
indel
尚未定义,如您可能会遇到的错误所示:
NameError:name'indel'未定义


唯一的选择是在函数中“计算”列表的长度。

我想知道为什么要使用参数,但您可能希望这样做,因为传递列表的长度是可选的,例如,如果您想对列表的一小部分进行操作。如果是这样,我将使用以下代码:

def func(indel, length = None):
    #do_something
    if length is None: # By default, use the length of the list
        length = len(indel)
    # do whatever with indel and length

# test methods
test = [1, 2, 3, 4, 5]

func(test) # in this case, length = 5

func(test, 1) # in this case, length = 1

虽然我想知道为什么要使用参数,但您可能希望这样做,因为传递列表的长度是可选的,例如,如果希望对列表的一小部分进行操作。如果是这样,我将使用以下代码:

def func(indel, length = None):
    #do_something
    if length is None: # By default, use the length of the list
        length = len(indel)
    # do whatever with indel and length

# test methods
test = [1, 2, 3, 4, 5]

func(test) # in this case, length = 5

func(test, 1) # in this case, length = 1
另一种方法是

    def setElementConnectivities(self,indel,nind=None):
        nind = len(indel) if nind is None else nind
        ind = np.copy(indel[0:nind])
        print(ind)
另一种方法是

    def setElementConnectivities(self,indel,nind=None):
        nind = len(indel) if nind is None else nind
        ind = np.copy(indel[0:nind])
        print(ind)

如果您确实希望在调用函数时能够传递
nind
,但不指定
nind
时希望默认长度为
indel
,则可以执行以下操作:

def func(indel, nind=None):
    nind = len(indel) if nind is None else nind 
如果在调用时未指定
nind
,则
nind
None
,随后更改为
len(indel)


如果在调用时指定了
nind
,那么
nind
是您正在调用的值(异常是
None
的“值”)

如果您希望在调用函数时能够传递
nind
,但如果不指定
nind
,则希望默认长度为
indel
,可以执行以下操作:

def func(indel, nind=None):
    nind = len(indel) if nind is None else nind 
如果在调用时未指定
nind
,则
nind
None
,随后更改为
len(indel)



当您在调用时指定
nind
时,那么
nind
是您正在调用的值(异常是
None
的“值”)

使用len(indel)获取python中的长度您需要传递参数的任何原因?如果您只需要列表的长度,那么为什么不使用
len
在函数内部访问它呢?实际上,我将发送一些长度,或者如果我不发送长度,我希望列表的默认长度使用len(indel)来获取python中的长度。您需要传递参数的原因是什么?如果您只需要列表的长度,那么为什么不使用
len
在函数内部访问它呢?事实上,我将发送一些长度,或者如果我不发送长度,我希望列表的默认长度实际上,使用装饰器这将非常容易。@cᴏʟᴅsᴘᴇᴇᴅ, 也许吧,但是为了什么?“保存”呼叫
len
?不值得,我想我应该提一下,因为你说只有一个选择。@cᴏʟᴅsᴘᴇᴇᴅ 从字面上讲,使用装饰器执行此操作仍然算作“函数内部”;)实际上,这对一个装饰师来说是很容易的ᴏʟᴅsᴘᴇᴇᴅ, 也许吧,但是为了什么?“保存”呼叫
len
?不值得,我想我应该提一下,因为你说只有一个选择。@cᴏʟᴅsᴘᴇᴇᴅ 从字面上讲,使用装饰器执行此操作仍然算作“函数内部”;)很好地推断了这里需要kwarg。为了更好的实践,我会将默认值改为None。如果length为None,那么
def func(…,length=None)
是否优于数值?@ThomasKühn是的,特别是因为Python支持负数indexing@DeepSpace是的,正是我所想的:事情是这样的,因为我来自C++背景(虽然我确实知道Python),但有时我不知不觉地使用C++的方法。在任何情况下,问题现在都得到了解决,一切都很好。这里需要对KWAG所做的很好的推导。
如果长度为None:
比数值更可取吗?@ThomasKühn是的,特别是因为Python支持负数indexing@DeepSpace是的,正是我所想的:事情是因为我来自C++背景(虽然我确实知道Python),有时候