相关疑难解决方法(0)

97
推荐指数
1
解决办法
9521
查看次数

为什么此代码会打印随机选择的属性?

今天在编写一些特别糟糕的代码时,我偶然发现了这种神秘的行为.下面的Python 3程序打印随机选择的属性object.这是怎么发生的?

对于非确定性的一个明显的怀疑是vars(object)字典的随机排序,但我看不出它是如何导致观察到的行为.我得到的一个假设是,它是由__setattr__被覆盖的顺序引起的,但是lambda总是只被调用一次(通过打印调试检查)这一事实证明了这一点.

class TypeUnion: 
    pass

class t: 
    pass

def super_serious(obj):
    proxy = t()
    for name, val in vars(object).items():
        if not callable(val) or type(val) is type: 
            continue
        try: 
            setattr(t, name, lambda _, *x, **y: val)
        except AttributeError: 
            pass
    return proxy

print(super_serious(TypeUnion()).x)
Run Code Online (Sandbox Code Playgroud)

注意:上述程序并未试图做任何有用的事情; 它比原来大大减少了.

python python-3.x name-lookup

5
推荐指数
1
解决办法
152
查看次数

无序集合 - 在python中设置

很抱歉,如果这是一个基本问题,但我试图了解set类型如何在python中工作

来自docs:

set对象是不同的可哈希对象的无序集合.

作为无序集合,集合不记录元素位置或插入顺序.

但如果它们是无序的,为什么我在这个测试中总是获得相同的顺序?我期待一些随机的顺序.

users_ids = set([1, 1, 2, 3])
>>> print users_ids
set([1, 2, 3])
Run Code Online (Sandbox Code Playgroud)

python python-2.7

4
推荐指数
1
解决办法
3404
查看次数

为什么Python 3.3+ dict排序不仅是未定义的,而且是变量的?

我出于好奇而问这个问题(具体来说,深入了解python是如何工作的).

我完全知道python dict对象是无序的 - 你可以放入一堆项目,并打印出一些表示dict,并且表示中项目的顺序将与输入项目的顺序无关.

然而,令我好奇的是,为什么顺序从一次执行代码变为另一次?

我有一个非常简单的python脚本,正在打印dict到控制台.字典看起来像这样(内容非常相关):

{
    'hello': 'hi',
    'goodbye': 'bye',
    'hahaha': 'lol',
}
Run Code Online (Sandbox Code Playgroud)

将其打印到控制台会导致项目不仅以随机顺序打印,而且每次运行程序时都以不同的顺序打印.这是我的问题:为什么会这样?

注意:python代码在django项目中(但在这种情况下我没有使用任何django功能 - 只是提到它以防它以某种方式相关).

python django

4
推荐指数
1
解决办法
128
查看次数

如何获得结果字典中的预期订单?

result = {}
a = ["a","b","c"]
b = [1, 2, 3]

for i in range(3):
  result[a[i]] = b[i]

print result
Run Code Online (Sandbox Code Playgroud)

我希望得到以下结果: {'a': 1, 'b': 2, 'c': 3}

但真正的是 {'a': 1, 'c': 3, 'b': 2}

是什么原因以及如何解决?

python

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