这是 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/

10-16 07:35