python strip()是什么意思?具体看我例子

def not_empty(s):
return s and s.strip()

filter(not_empty, ['A', '', 'B', None, 'C', ' '])
# 结果: ['A', 'B', 'C']

怎么解释这个return s and s.strip(),没理解

关键是理解”s and s.strip()“ 这个表达式的值。Python语法是这么运行的:

如果s is None,那么s会被判断为False。而False不管和什么做and,结果都是False,所以不需要看and后面的表达式,直接返回s(注意不是返回False)。
如果s is not None,那么s会被判断为True,而True不管和什么and都返回后一项。于是就返回了s.strip()。
温馨提示:内容为网友见解,仅供参考
第1个回答  2019-01-23

关键知识点A:and

    在布尔上下文中从左到右演算表达式的值。

    0、''、[]、()、{}、None 在布尔上下文中为假,其它任何东西都为真。

关键知识点B:filter 函数

filter 函数的作用是“根据返回值是True还是False决定保留还是丢弃该元素。”(True的留下 False的去除)

因此:

如果s = None,表达式的结果是False,filter过滤该队列元素

如果s = '',表达式的结果是False,filter过滤该队列元素

如果s = 空格,s.strip()的结果是'',表达式的结果是False,filter过滤该队列元素

如果s = 其他,表达式的结果是Ture,filer保留该队列元素(并不是s.strip后的元素)

第2个回答  推荐于2017-12-25

filter 函数的作用是“根据返回值是True还是False决定保留还是丢弃该元素。”(真的留下 假的去除)

看下到底返回了什么:

def not_empty(s):
return s and s.strip()
print(not_empty("A"),not_empty(""),not_empty("B"),not_empty(None),not_empty("C"),not_empty(" "))

A  B None C

用bool() 检测下 哪些是真,假print(bool(not_empty("A")),bool(not_empty("")),bool(not_empty("B")),bool(not_empty(None)),bool(not_empty("C")),bool(not_empty(" ")))

True False True False True False

明白了不?关于return s and s.strip() 返回值的问题上边的最佳答案写的很明白 :“如果s is None,那么s会被判断为False。而False不管和什么做and,结果都是False,所以不需要看and后面的表达式,直接返回s(注意不是返回False)。
如果s is not None,那么s会被判断为True,而True不管和什么and都返回后一项。于是就返回了s.strip()。”

本回答被网友采纳
第3个回答  2018-04-24
从廖大那刚过来,开始也是不解,后来试了一下理解了
首先要理解and,结果是一个布尔值(True或False),只有当s和s.strip( )【都】为True时结果才为True,不然就是False
因为filter的筛选作用,不是True的统统扔掉,所以我们来重点分析一下为什么 "" ," ",None会被扔掉
1. None:
这个很容易理解,bool(None)=False,在判断s的时候就被扔了
2. "" :
字符串类型,里面什么也没有,只用了两个引号围起来表示他是字符串,bool("")=False,判断时同上
3. " ":
字符串类型,重点来了,【里面有空格】,这和上面那个什么都没有的字符串类型不等价,空格也是东西,这时候bool(" ")=True!!!
所以单靠判断bool(s)的话这种【字符串类型的空格】是可以躲过筛选的,所以需要加入s.strip( )修补这种情况
s.strip( )作用:去除字符串首尾的空格,例如“ A ”得到“A”
在这里 " " 遇到s.strip( )就被打回原形变成了"",bool结果为False
相似回答