python - title中文 - plt.title用法
最优雅的方法来检查在Python中的字符串是否为空? (13)
我发现硬编码(sic)“”每次检查一个空字符串都不太好。
干净的代码方法
这样做: foo == ""
是非常糟糕的做法。 ""
是一个神奇的价值。 你不应该检查不可思议的价值(通常被称为神奇数字 )
你应该做的是与描述性变量名称进行比较。
描述性变量名称
有人可能会认为“empty_string”是一个描述性变量名称。 事实并非如此 。
在你去之前做empty_string = ""
并且认为你有一个很好的变量名来比较。 这不是“描述性变量名”的意思。
一个好的描述性变量名是基于其上下文的。 你必须考虑空字符串是什么。
- 它从何而来。
- 为什么在那里。
- 为什么你需要检查它。
简单的表单字段示例
您正在构建一个用户可以输入值的表单。 你想检查用户是否写了一些东西。
一个好的变量名可能是not_filled_in
这使代码非常可读
if formfields.name == not_filled_in:
raise ValueError("We need your name")
彻底的CSV解析示例
您正在解析CSV文件,并希望将空字符串解析为None
(由于CSV完全是基于文本的,因此无法使用预定义的关键字就无法表示None
)
一个好的变量名可能是CSV_NONE
这使得代码易于更改和适应,如果你有一个新的CSV文件代表None
与另一个字符串比""
if csvfield == CSV_NONE:
csvfield = None
没有关于这段代码是否正确的问题。 很明显,它做它应该做的事情。
比较这一点
if csvfield == EMPTY_STRING:
csvfield = None
这里的第一个问题是,为什么空字符串应该得到特殊处理?
这将告诉未来的编码人员,一个空字符串应始终被视为None
。
这是因为它混合了业务逻辑(什么CSV值应该是None
)和代码实现(我们实际比较的是什么)
两者之间需要分开关注 。
Python是否有类似空字符串变量的地方?
if myString == string.empty:
无论检查空字符串值的最优雅方式是什么? 我发现硬编码""
每次检查一个空字符串都不好。
if stringname:
字符串为空时为false
。 我想这不可能比这更简单。
以我的经验测试""
并不总是奏效。 这个简单的测试一直为我工作:
if MyString == 'None'
要么
if MyString != 'None'
读取Excel电子表格当列使用以下while循环变空时,我想停止:
while str(MyString) != 'None':
你可以看看这个在Python中分配空值或字符串
这是关于比较空的字符串。 因此,而不是测试not
空虚,你可能会测试是你的字符串等于空字符串与""
空字符串...“
如果你想区分空字符串和空字符串,我会建议使用, if len(string)
,否则,我会建议使用简单的if string
如别人说的。 关于充满空白字符串的警告仍然适用,所以不要忘记strip
。
对于期望像apache StringUtils.isBlank或Guava Strings.isNullOrEmpty这样的行为的用户:
if mystring and mystring.strip():
print "not blank string"
else:
print "blank string"
我会在剥离之前测试一下没有。 另外,我会使用空字符串为False(或Falsy)的事实。 这种方法类似于Apache的StringUtils.isBlank或Guava的Strings.isNullOrEmpty
这是我将用来测试一个字符串是否为空或空或空白:
def isBlank (myString):
if myString and myString.strip():
#myString is not None AND myString is not empty or blank
return False
#myString is None OR myString is empty or blank
return True
而且,与测试字符串是否不是“非”或“空”非空白:
def isNotBlank (myString):
if myString and myString.strip():
#myString is not None AND myString is not empty or blank
return True
#myString is None OR myString is empty or blank
return False
上述代码更简洁的形式:
def isBlank (myString):
return not (myString and myString.strip())
def isNotBlank (myString):
return bool(myString and myString.strip())
我曾经写过类似于Bartek的答案和JavaScript的启发:
def isNotEmpty(s):
return bool(s and s.strip())
测试:
print isNotEmpty("") # False
print isNotEmpty(" ") # False
print isNotEmpty("ok") # True
print isNotEmpty(None) # False
正如上面所写的prmatta,但有错误。
def isNoneOrEmptyOrBlankString (myString):
if myString:
if not myString.strip():
return True
else:
return False
return False
测试空或空白字符串(较短的方式):
if myString.strip():
print("it's not an empty or blank string")
else:
print("it's an empty or blank string")
这个怎么样? 也许它不是“最优雅的”,但它对我来说似乎相当完整,清晰和安全:
if (s is None) or (str(s).strip()==""): // STRING s IS "EMPTY"...
有这种可能性的例外或误报吗?
a = ''
b = ' '
a.isspace() -> False
b.isspace() -> True
not str(myString)
对于空的字符串,此表达式为True。 非空字符串,None和非字符串对象都会产生False,但要注意的是对象可能会重写__str__以通过返回虚假值来阻止此逻辑。