在您看来,您遇到的最令人惊讶,奇怪,奇怪或真正的"WTF"语言功能是什么?
每个答案只能有一个功能.
奇怪的是:
>>> a = 123
>>> b = 123
>>> a is b
True
>>> a = 123.
>>> b = 123.
>>> a is b
False
Run Code Online (Sandbox Code Playgroud)
似乎a is b或多或少被定义为id(a) == id(b).以这种方式制作错误很容易:
basename, ext = os.path.splitext(fname)
if ext is '.mp3':
# do something
else:
# do something else
Run Code Online (Sandbox Code Playgroud)
一些fnames意外地在else块中结束了.修复很简单,我们应该使用ext == '.mp3',但if ext is '.mp3'表面上看起来似乎是一种很好的pythonic方式来编写它,它比"正确"的方式更具可读性.
由于字符串是不可变的,为什么它是错误的技术细节是什么?什么时候身份检查更好,什么时候检查更好?
我仍然是Python的新手.我听到有人说使用is,不是==因为"这不是C".但我有一些代码x is 5,它没有按预期工作.
因此,遵循正确的Python/PEP样式,何时使用is以及何时使用==?
我有一个具有以下布局的对象:
class Obj1(object):
def __init__(self, user, password, items=None):
self._user = user
self._password = password
self._items = items
def add_items(self, item):
self._items.append(item)
def has_changed(self, obj2):
return self != obj2
Run Code Online (Sandbox Code Playgroud)
现在我做以下事情:
obj1 = Obj1('me', '1234')
obj1.add_item({'name':'george', 'progress':'70'})
#obj2 = obj1 #wont work since they would point to same object
obj2 = copy.copy(obj1)
obj1.add_item({'name':'monica', 'progress':'86'})
print obj2.has_changed(obj1)
Run Code Online (Sandbox Code Playgroud)
令人惊讶的是,这让我失意.有人能指出我在这里缺少的东西吗?
当我遇到一个小问题时,我正在处理一些代码.我有点像这样:
if myList is []:
# do things if list is empty
else:
# do other things if list is not empty
Run Code Online (Sandbox Code Playgroud)
当我运行程序(并且让myList为空)时,程序将直接进入else语句,这让我感到惊讶.但是,在查看此问题后,我将代码更改为:
if not myList:
# do things if list is empty
else:
# do other things if list is not empty
Run Code Online (Sandbox Code Playgroud)
这使得我的程序按照我的预期工作(它运行'if not myList'部分而不是'else'语句).
我的问题是这个if语句的逻辑发生了什么变化?我的调试器(我使用Pycharm)说myList两次都是空列表.