这是 Zed Shaw 在 Learning Python the Hard Way 中提供的代码:
ten_things = "Apples Oranges Crows Telephone Light Sugar"
print "Wait there's not 10 things in that list, let's fix that."
stuff = ten_things.split(' ')
more_stuff = ["Day", "Night", "Song", "Frisbee", "Corn", "Banana", "Girl", "Boy"]
while len(stuff) != 10:
next_one = more_stuff.pop()
print "Adding: ", next_one
stuff.append(next_one)
print "There's %d items now." % len(stuff)
print "There we go: ", stuff
print "Let's do some things with stuff."
print stuff[1]
print stuff[-1] # whoa! fancy
print stuff.pop()
print ' '.join(stuff) # what? cool!
print '#'.join(stuff[3:5]) # super stellar!
然后在一次学习演习中,他说:
我的问题是,我很难看到它们是如何相同的?据我了解,第一个函数是说获取
things
中的任何内容,并将它们与 ' '
连接起来。但是第二个函数(据我所知)是说调用 join
,同时使用 ' '
和 things
作为参数?在定义函数时您会使用它们的方式吗?我对此很迷茫……你们能澄清一下吗? 最佳答案
准确地说,''.join(things)
和 join('',things)
不一定相同。但是,''.join(things)
和 str.join('',things)
是相同的。解释需要一些关于类如何在 Python 中工作的知识。我将掩盖或忽略许多与本次讨论不完全相关的细节。
人们可能会以这种方式实现一些内置字符串类(免责声明:这几乎肯定不是它实际完成的方式)。
class str:
def __init__(self, characters):
self.chars = characters
def join(self, iterable):
newString = str()
for item in iterable:
newString += item #item is assumed to be a string, and += is defined elsewhere
newString += self.chars
newString = newString[-len(self.chars):] #remove the last instance of self.chars
return newString
好的,请注意每个函数的第一个参数是
self
。这只是约定俗成的,它可以是所有 Python 关心的 potatoes
,但第一个参数始终是对象本身。 Python 这样做是为了让您可以执行 ''.join(things)
并让它正常工作。 ''
是 self
将在函数内的字符串,而 things
是可迭代的。''.join(things)
不是调用此函数的唯一方法。您也可以使用 str.join('', things)
调用它,因为它是 str
类的一个方法。和以前一样, self
将是 ''
, iterable
将是 things
。这就是为什么这两种不同的方式来做同样的事情是等价的:
''.join(things)
是 syntactic sugar 代表 str.join('', things)
。关于python - 这两个功能如何相同?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/33928553/