我正在学习Python,想看看是否有人可以帮助分解并逐步理解这个功能的作用?
def label(self, index, *args):
"""
Label each axes one at a time
args are of the form <label 1>,...,<label n>
APIPARAM: chxl
"""
self.data['labels'].append(
str('%s:|%s'%(index, '|'.join(map(str,args)) )).replace('None','')
)
return self.parent
答案 0 :(得分:3)
在尝试理解格式之前更改格式是个好主意:
def label(self, index, *args):
"""
Label each axes one at a time
args are of the form <label 1>,...,<label n>
APIPARAM: chxl
"""
self.data['labels'].append(
str( '%s:|%s' % \
( index, '|'.join( map( str,args ) ) )
).replace( 'None', '' )
)
return self.parent
所以:
它会向self.data[ 'labels' ]
列表附加内容。我们知道这一点,因为append()
是list object的一种方法。
这是一个字符串,以便:
xxx:|yyy
xxx
将替换为参数index
yyy
将替换为转换为字符串(map(str,args)
)并与|
字符(join(...)
)结合的所有其他参数,因此会产生类似'{{1}的内容}}“a|b|None|c
的每个出现都被替换为空字符串,并将其附加到列表中修改强>
正如@abarnert所指出的那样,解释None
的含义以及为什么以后将其用作*args
可能会更好,所以就这样了。
args
(星号+任意名称)表示“*args
列表中可进一步提供的任意数量的匿名参数”。也可以使用args
- 注意两个用于接受密钥参数的星号,即以**kwargs
形式传递给函数的参数,其中foo = bar
是参数的名称,{ {1}}是它的价值,而不仅仅是foo
。
如上所述bar
和bar
是任意的,也可以使用args
或kwargs
,但使用*potatoes
和**potatoes
是Python中的约定(有时人们也使用args
而不是kwargs
,但意思是相同的 - 分别是任意数量的匿名和任意数量的关键参数。)
如果事先不知道函数/方法应该接受的参数的数量,则使用两者 - 例如考虑一个处理聚会客人名称的函数,可能不知道可能有多少,所以定义一个以下功能是有道理的:
**kw
然后下面的两个电话都有效:
**kwargs
此SO帖子中也解释了这一点:https://stackoverflow.com/a/287101/680238
答案 1 :(得分:2)
我认为误导性的行是:
self.data['labels'].append(
str('%s:|%s'%(index, '|'.join(map(str,args)) )).replace('None','')
)
可以更清楚地格式化这些内容以帮助阅读:
self.data['labels'].append(
str('%s:|%s' % (
index,
'|'.join(map(str, args))
)).replace('None', '')
)
但可以更好地改写为:
self.data['labels'].append( # append to the list at `self.data['labels']`
'%s:|%s' % ( # a string of the format X:|Y
index, # where X is the index
'|'.join( # and Y is a list joined with '|'s
str(arg) if arg is not None else # with each item in the list
'' for arg in args # being it's string representation
)
)
)
答案 2 :(得分:1)
*args
变成了一个名为args的参数列表。 self.data['labels']
看起来像是一个列表。 .append将一个项添加到列表中。附加的项目由最右边的部分replace
返回的字符串返回。要解析什么字符串,从parens内部开始,然后解决问题。 map(str,args)
将所有args转换为字符串并返回该列表。 '|'.join(
获取map的输出并将其连接到一般模式elem1|elem2|elem3...
的单个字符串中,然后使用格式字符串'%s:|%s'
。第一个%s
被index的值替换,第二个由'|'.join
输出的字符串替换。然后,它会调用此字符串上的replace,将'None'
的所有出现替换为''
。然后它返回self.parent。