আপনি যদি পারফরম্যান্স সম্পর্কে যত্নবান হন (এবং আমি আপনাকে পরামর্শ দেওয়ার পরামর্শ দিচ্ছি না), চেষ্টা-ভিত্তিক পদ্ধতিটি পরিষ্কার বিজয়ী (আপনার পার্টিশন-ভিত্তিক পদ্ধতির সাথে তুলনা করা) বা রেজিএক্সপ্যাক পদ্ধতির সাথে যতক্ষণ না আপনি অনেক আশা করেন না অবৈধ স্ট্রিং, এক্ষেত্রে এটি সম্ভাব্য ধীরে ধীরে (সম্ভবত ব্যতিক্রম হ্যান্ডলিংয়ের ব্যয়ের কারণে)।
আবার, আমি আপনাকে পারফরম্যান্সের প্রতি যত্নশীল হওয়ার পরামর্শ দিচ্ছি না, আপনি যদি সেকেন্ডে 10 বিলিয়ন বার এই কিছু করছেন বা কেবল আপনাকে ডেটা দিচ্ছেন giving এছাড়াও, পার্টিশন-ভিত্তিক কোড কমপক্ষে একটি বৈধ স্ট্রিং পরিচালনা করে না।
$ ./floatstr.py
এফ ..
বিভাজন দু: খ: 3.1102449894
পার্টিশনটি খুশি: 2.09208488464
..
দু: খিত: 7.76906108856
সুখী: 7.09421992302
..
দুঃখের চেষ্টা করুন: 12.1525540352
খুশি চেষ্টা করুন: 1.44165301323
।
================================================== ====================
ব্যর্থ: পরীক্ষা_বিভাজন (__ মেইন __। রূপান্তরকরণ)
-------------------------------------------------- --------------------
ট্রেসব্যাক (সবচেয়ে সাম্প্রতিকতম কল সর্বশেষ):
ফাইল "./floatstr.py", পরীক্ষার_ভাগে লাইন 48,
self.failUnless (is_float_partition ( "20e2"))
AssertionError
-------------------------------------------------- --------------------
33.670 এর দশকে 8 টি পরীক্ষা চালানো
ব্যর্থ (ব্যর্থতা = 1)
এখানে কোড (পাইথন ২.6, জন গীটজেনের উত্তর থেকে নেওয়া রেজিপ্সপ ):
def is_float_try(str):
try:
float(str)
return True
except ValueError:
return False
import re
_float_regexp = re.compile(r"^[-+]?(?:\b[0-9]+(?:\.[0-9]*)?|\.[0-9]+\b)(?:[eE][-+]?[0-9]+\b)?$")
def is_float_re(str):
return re.match(_float_regexp, str)
def is_float_partition(element):
partition=element.partition('.')
if (partition[0].isdigit() and partition[1]=='.' and partition[2].isdigit()) or (partition[0]=='' and partition[1]=='.' and pa\
rtition[2].isdigit()) or (partition[0].isdigit() and partition[1]=='.' and partition[2]==''):
return True
if __name__ == '__main__':
import unittest
import timeit
class ConvertTests(unittest.TestCase):
def test_re(self):
self.failUnless(is_float_re("20e2"))
def test_try(self):
self.failUnless(is_float_try("20e2"))
def test_re_perf(self):
print
print 're sad:', timeit.Timer('floatstr.is_float_re("12.2x")', "import floatstr").timeit()
print 're happy:', timeit.Timer('floatstr.is_float_re("12.2")', "import floatstr").timeit()
def test_try_perf(self):
print
print 'try sad:', timeit.Timer('floatstr.is_float_try("12.2x")', "import floatstr").timeit()
print 'try happy:', timeit.Timer('floatstr.is_float_try("12.2")', "import floatstr").timeit()
def test_partition_perf(self):
print
print 'partition sad:', timeit.Timer('floatstr.is_float_partition("12.2x")', "import floatstr").timeit()
print 'partition happy:', timeit.Timer('floatstr.is_float_partition("12.2")', "import floatstr").timeit()
def test_partition(self):
self.failUnless(is_float_partition("20e2"))
def test_partition2(self):
self.failUnless(is_float_partition(".2"))
def test_partition3(self):
self.failIf(is_float_partition("1234x.2"))
unittest.main()