aboutsummaryrefslogtreecommitdiff
path: root/mesonbuild/mconf.py
diff options
context:
space:
mode:
authorDylan Baker <dylan@pnwbakers.com>2017-05-01 15:11:01 -0700
committerJussi Pakkanen <jpakkane@gmail.com>2017-05-02 21:57:26 +0300
commita8173630eac1f35914fdc2d918a636ac268b9033 (patch)
treec971b7e0be066df5a2a77f1141eb1517dd3903ef /mesonbuild/mconf.py
parentae924b01a006bc1542fe7eaae1d8a933459e8a0a (diff)
downloadmeson-a8173630eac1f35914fdc2d918a636ac268b9033.zip
meson-a8173630eac1f35914fdc2d918a636ac268b9033.tar.gz
meson-a8173630eac1f35914fdc2d918a636ac268b9033.tar.bz2
Don't use len() to test emptiness vs not emptiness
Meson has a common pattern of using 'if len(foo) == 0:' or 'if len(foo) != 0:', however, this is a common anti-pattern in python. Instead tests for emptiness/non-emptiness should be done with a simple 'if foo:' or 'if not foo:' Consider the following: >>> import timeit >>> timeit.timeit('if len([]) == 0: pass') 0.10730923599840025 >>> timeit.timeit('if not []: pass') 0.030033907998586074 >>> timeit.timeit('if len(['a', 'b', 'c', 'd']) == 0: pass') 0.1154778649979562 >>> timeit.timeit("if not ['a', 'b', 'c', 'd']: pass") 0.08259823200205574 >>> timeit.timeit('if len("") == 0: pass') 0.089759664999292 >>> timeit.timeit('if not "": pass') 0.02340641999762738 >>> timeit.timeit('if len("foo") == 0: pass') 0.08848102600313723 >>> timeit.timeit('if not "foo": pass') 0.04032287199879647 And for the one additional case of 'if len(foo.strip()) == 0', which can be replaced with 'if not foo.isspace()' >>> timeit.timeit('if len(" ".strip()) == 0: pass') 0.15294511600222904 >>> timeit.timeit('if " ".isspace(): pass') 0.09413968399894657 >>> timeit.timeit('if len(" abc".strip()) == 0: pass') 0.2023209120015963 >>> timeit.timeit('if " abc".isspace(): pass') 0.09571301700270851 In other words, it's always a win to not use len(), when you don't actually want to check the length.
Diffstat (limited to 'mesonbuild/mconf.py')
-rw-r--r--mesonbuild/mconf.py12
1 files changed, 6 insertions, 6 deletions
diff --git a/mesonbuild/mconf.py b/mesonbuild/mconf.py
index 2ab5f92..b4add65 100644
--- a/mesonbuild/mconf.py
+++ b/mesonbuild/mconf.py
@@ -56,7 +56,7 @@ class Conf:
# Ninja is run.
def print_aligned(self, arr):
- if len(arr) == 0:
+ if not arr:
return
titles = ['Option', 'Description', 'Current Value', '']
longest_name = len(titles[0])
@@ -139,7 +139,7 @@ class Conf:
print('')
print('Base options:')
okeys = sorted(self.coredata.base_options.keys())
- if len(okeys) == 0:
+ if not okeys:
print(' No base options\n')
else:
coarr = []
@@ -158,7 +158,7 @@ class Conf:
print('')
print('Compiler options:')
okeys = sorted(self.coredata.compiler_options.keys())
- if len(okeys) == 0:
+ if not okeys:
print(' No compiler options\n')
else:
coarr = []
@@ -188,7 +188,7 @@ class Conf:
self.print_aligned(parr)
print('')
print('Project options:')
- if len(self.coredata.user_options) == 0:
+ if not self.coredata.user_options:
print(' This project does not have any options')
else:
options = self.coredata.user_options
@@ -197,7 +197,7 @@ class Conf:
optarr = []
for key in keys:
opt = options[key]
- if (opt.choices is None) or (len(opt.choices) == 0):
+ if (opt.choices is None) or (not opt.choices):
# Zero length list or string
choices = ''
else:
@@ -222,7 +222,7 @@ def run(args):
print('%s <build directory>' % args[0])
print('If you omit the build directory, the current directory is substituted.')
return 1
- if len(options.directory) == 0:
+ if not options.directory:
builddir = os.getcwd()
else:
builddir = options.directory[0]