在python中传递列表并将其长度设置为默认参数
我有一个来自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_
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),有时候