我刚刚才知道有Truthy和Falsy在Python这是与正常不同的价值观True和False?
是否有人可以深入解释什么truthy和falsy值?
我应该在哪里使用它们?
truthy和True值以及falsy和False值之间有什么区别?
我正在尝试学习python,并且遇到了一些既好又短的代码,但并不完全有意义
背景是:
def fn(*args):
return len(args) and max(args)-min(args)
Run Code Online (Sandbox Code Playgroud)
我得到它正在做的事情,但为什么python这样做 - 即返回值而不是True/False?
10 and 7-2
Run Code Online (Sandbox Code Playgroud)
返回5.同样,更改和将导致或将导致功能更改.所以
10 or 7 - 2
Run Code Online (Sandbox Code Playgroud)
会回来10.
这是合法/可靠的风格,还是有任何问题?
使用if foo is None而不是if foo == None测试值是否具体是标准惯例None.
如果你想确定一个值是否正确True(不仅仅是一个真实的值),是否有任何理由使用if foo == True而不是if foo is True?这在CPython(2.x和3.x),Jython,PyPy等实现之间是否有所不同?
示例:say True用作要与值'bar'或任何其他类似真值的值区分开的单例值:
if foo is True: # vs foo == True
...
elif foo == 'bar':
...
Run Code Online (Sandbox Code Playgroud)
是否存在使用if foo is True会产生不同结果的情况if foo == True?
注意:我知道Python布尔值 - 如果x:,则vs x == True,vs如果x为True.但是,它仅解决是否if foo,if foo == True或if foo is True通常应用于确定是否foo具有真实值. …
我们知道,Python有对象的布尔值:如果一个类有一个__len__方法,它的每个实例__len__()都会返回0,它将被计算为一个布尔值False(例如,空列表).
实际上,每个可迭代的空自定义对象都被评估为False好像它出现在布尔表达式中.
现在假设我有一个foo属性类bar.我怎样才能定义它的真值,以便它会被评估True if bar % 2 == 0,False否则呢?
例如:
myfoo = foo()
myfoo.bar = 3
def a(myfoo):
if foo:
print "spam"
else:
print "eggs"
Run Code Online (Sandbox Code Playgroud)
所以,a(myfoo)应该打印"eggs".
我有一个愚蠢但问题.假设我有一个包含不同值的列表.像这样:
[1,2,3,'b', None, False, True, 7.0]
Run Code Online (Sandbox Code Playgroud)
我想迭代它并检查每个元素是否都不在某些禁用值的列表中.例如,这个列表是[0,0.0].
当我检查是否为假时,[0,0.0我得到了True.我知道python会False转到0这里.但我怎么能避免它并使这个检查正确 - 该False值不在[0,0.0]列表中?
我通读了有关插槽使用的主要答案,它让我了解了如何以及在何处使用__slots__.
现在,我将代码从 Python 2 移植到 Python 3,类似于以下内容:
class B(object):
__slots__ = ('_fields')
_fields = set()
Run Code Online (Sandbox Code Playgroud)
但这会在 Python 2 上正常工作时给出错误 Python 3:
ValueError: '_fields' in __slots__ conflicts with class variable.
我将代码更改为
class B(object):
__slots__ = ('_fields')
def __init__(self):
_fields = set()
Run Code Online (Sandbox Code Playgroud)
它工作正常。我的疑问是,它甚至是正确的更改吗?
正如我从原始代码中得到的,我猜它是说不要__dict__用于节省内存或更快的访问或任何原因,但同时也试图将属性类型指定_field为 set()。上面的更改是否是正确的表达方式,或者它可能会产生一些副作用。
进一步实验:我进一步实验了以下变体(在 Python 3 上):
import pdb
class A(object):
a = set()
'''
class B(object):
__slots__ = ('a')
a = set()
'''
class C(object):
__slots__ = ('a')
def …Run Code Online (Sandbox Code Playgroud) 我可以像这样检查python列表或字典是否为空
lis1, dict1 = [], {}
# similar thing can be done for dict1
if lis1:
# Do stuff
else:
print "List is empty"
Run Code Online (Sandbox Code Playgroud)
如果我尝试对我的类对象执行此操作,即通过键入if my_object:此始终评估为来检查我的对象属性是否为非空True
>>> class my_class(object):
... def __init__(self):
... self.lis1 = []
... self.dict1 = {}
...
>>> obj1 = my_class()
>>> obj1
<__main__.my_class object at 0x10c793250>
>>> if obj1:
... print "yes"
...
yes
Run Code Online (Sandbox Code Playgroud)
我可以专门编写一个函数来检查我的对象属性是否为非空,然后调用if obj1.is_attributes_empty():,但我更想知道如何if评估standard data-typeslikelist和dicttoTrue或False取决于它们包含或为空的项目。
如果我想用我的类对象实现这个功能,我需要覆盖或更改哪些方法?
我有:
x = None
Run Code Online (Sandbox Code Playgroud)
到目前为止,我发现的许多参考文献都以以下方式进行“空”检查:
if x is None:
...
Run Code Online (Sandbox Code Playgroud)
(例如,这个问题)。
而在我的代码中,我有:
if not x:
...
Run Code Online (Sandbox Code Playgroud)
我目前正在做的事情按预期工作(返回 true),但我想知道是否有任何用例可以按照第一个示例中的方式执行检查是最佳的。
如果这很明显或者之前有人问过这个问题,我深表歉意 - 我在网站上找不到这个特定问题的答案。
我今天遇到了一段代码,看起来像这样:
class ClassName(object):
def __init__(self):
self._vocabulary = None
def vocabulary(self):
self._vocabulary = self._vocabulary or self.keys()
return self._vocabulary
Run Code Online (Sandbox Code Playgroud)
这条线到底在self._vocabulary = self._vocabulary or self.keys()做什么?
我见过一些类似的代码:
nodeIds = Framework.getDataAsList(key) or []
Run Code Online (Sandbox Code Playgroud)
什么是它翻译成的完整代码片段?是否检查功能输出False或None结果?是否有一些类似的Java语法?