Dette har altid forvirret mig. Det virker som om, at det ville være pænere:
my_list = ["Hello", "world"]
print(my_list.join("-"))
# Produce: "Hello-world"
end dette:
my_list = ["Hello", "world"]
print("-".join(my_list))
# Produce: "Hello-world"
Er der en specifik grund til, at det er sådan?
Det skyldes, at enhver iterabel kan sammenføjes, ikke kun lister, men resultatet og "joiner" er altid strenge.
For eksempel:
import urllib2
print('\n############\n'.join(
urllib2.urlopen('http://data.stackexchange.com/users/7095')))
Fordi metoden join()
er i string-klassen i stedet for list-klassen?
Jeg er enig i, at det ser mærkeligt ud.
Se http://www.faqs.org/docs/diveintopython/odbchelper_join.html:
Historisk note. Da jeg først lærte Python, forventede jeg, at join var en metode af en liste, som ville tage den afgrænseren som et argument. Masser af folk har det på samme måde, og der er en historie bag join-metoden. Tidligere før Python 1.6 havde strings ikke alle disse nyttige metoder. Der var en separat strengmodul, som indeholdt alle strengfunktioner; hver funktion tog en streng som sin første første argument. Funktionerne blev anset for at være vigtige nok til at blive lagt ind i strings selv, hvilket gav mening for funktioner som lower, upper og split. Men mange hardcore Python programmører gjorde indsigelse mod den nye join metode, idet de argumenterede for, at det burde være en metode for listen i stedet, eller at den slet ikke skulle flytte sig, men blot forblive en del af det gamle string-modul (som stadig har masser af nyttige ting i det). Jeg bruger udelukkende den nye join-metode, men du vil se kode skrevet enten måde, og hvis det virkelig generer dig, kan du kan du bruge den gamle string.join-funktion i stedet.
--- Mark Pilgrim, Dive into Python