相关疑难解决方法(0)

最奇怪的语言特征

在您看来,您遇到的最令人惊讶,奇怪,奇怪或真正的"WTF"语言功能是什么?

每个答案只能有一个功能.

language-agnostic programming-languages

975
推荐指数
176
解决办法
48万
查看次数

何时使用==以及何时使用?

奇怪的是:

>>> 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 memory equality

23
推荐指数
3
解决办法
1万
查看次数

Python是vs ==

可能重复:
Python中的字符串比较:is = == 运算符
何时==不等于is运算符?(蟒蛇)

我仍然是Python的新手.我听到有人说使用is,不是==因为"这不是C".但我有一些代码x is 5,它没有按预期工作.

因此,遵循正确的Python/PEP样式,何时使用is以及何时使用==

python operators

3
推荐指数
1
解决办法
2285
查看次数

在Python中检查两个对象是否已更改?

我有一个具有以下布局的对象:

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)

令人惊讶的是,这让我失意.有人能指出我在这里缺少的东西吗?

python

2
推荐指数
1
解决办法
1066
查看次数

如果不是myList和myList是否在[]中是什么区别?

当我遇到一个小问题时,我正在处理一些代码.我有点像这样:

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两次都是空列表.

python if-statement list empty-list

0
推荐指数
1
解决办法
185
查看次数