यहाँ जब तक आप iteratively, लेकिन एक और तरीका यह करने के लिए (प्रत्येक अक्षर, कई बार के लिए) यह कर रहे हैं, यह करने के लिए एक सिफारिश तरीका नहीं है। पायथन 3 में प्लस अलग है।
import string
a = 'ababc'
firstchar = a[0]
trantab = string.maketrans(firstchar, '*')
def translate(mystr, firschar):
trantab = string.maketrans(firstchar, '*')
return firstchar + string.translate(mystr[1:], trantab)
def translate_iter(mystr, firschar, trantab):
return firstchar + string.translate(mystr[1:], trantab)
def replace(mystr, firstchar):
return firstchar + mystr[1:].replace(firstchar, '*')
In [29]: %timeit translate(a, firstchar)
1000000 loops, best of 3: 582 ns per loop
In [30]: %timeit replace(a, firstchar)
1000000 loops, best of 3: 240 ns per loop
In [32]: %timeit translate_iter(a, firstchar, trantab)
1000000 loops, best of 3: 376 ns per loop
संपादित करें: तारों पर शामिल होने का उपयोग न करें। इसका कोई कारण नहीं है।
import dis
In [36]: def add(a,b):
return a+b
....:
In [37]: def join(a,b):
return join((a,b))
....:
In [42]: dis.dis(add)
2 0 LOAD_FAST 0 (a)
3 LOAD_FAST 1 (b)
6 BINARY_ADD
7 RETURN_VALUE
In [43]: dis.dis(join)
2 0 LOAD_GLOBAL 0 (join)
3 LOAD_FAST 0 (a)
6 LOAD_FAST 1 (b)
9 BUILD_TUPLE 2
12 CALL_FUNCTION 1
15 RETURN_VALUE
आप एक व्यर्थ फ़ंक्शन कॉल कर रहे हैं जो कोई समझ में नहीं आता है, कोड को कम पठनीय बनाता है, और समग्र प्रदर्शन धीमा करता है।
मैं सभी पठनीयता के लिए प्रदर्शन बलिदान के लिए हूं, लेकिन जब यह प्रदर्शन और पठनीयता दोनों को त्याग नहीं करता है।
स्रोत
2015-06-09 19:29:30
कि सबसे अच्छा तरीका है [KISS सिद्धांत] के अनुसार (http://en.wikipedia.org/wiki तरह लग रहा है/KISS_principle)। आप इसका उपयोग क्यों नहीं करेंगे? –
सोच रहा है कि इसके बारे में जाने के अन्य समान तरीके क्या हैं, यदि कोई हैं तो। सूचियों के साथ यह कैसे करेगा? – SpicyClubSauce
आप गति के लिए स्ट्रिंग.ट्रांसलेट विधि भी नियोजित कर सकते हैं: https://docs.python.org/2/library/string.html लेकिन यह सबसे अच्छा तरीका है। इसके अलावा, गिरफ्तार विकास संदर्भ के लिए +1। –