小编max*_*max的帖子

为什么Python赋值不返回值?

为什么Python赋值语句而不是表达式?如果它是一个表达式,它返回赋值中右侧的值,那么在某些情况下它会允许更简洁的代码.有什么问题我看不到吗?

例如:

# lst is some sequence
# X is come class
x = X()
lst.append(x)
Run Code Online (Sandbox Code Playgroud)

可以改写为:

lst.append(x = X())
Run Code Online (Sandbox Code Playgroud)

嗯,确切地说,上述方法不起作用,因为x它将被视为关键字参数.但另一对parens(或关键字参数的另一个符号)将解决这个问题.

python language-design python-3.x

46
推荐指数
4
解决办法
2万
查看次数

迭代Python 3中的字典items(),values(),keys()

如果我理解正确,在Python 2中,iter(d.keys())就像是一样d.iterkeys().但现在,d.keys()是一个视图,它位于列表和迭代器之间.视图和迭代器之间有什么区别?

换句话说,在Python 3中,有什么区别

for k in d.keys()
    f(k)
Run Code Online (Sandbox Code Playgroud)

for k in iter(d.keys())
    f(k)
Run Code Online (Sandbox Code Playgroud)

另外,这些差异如何在一个简单的for循环中显示(如果有的话)?

python dictionary iterator python-3.x

41
推荐指数
1
解决办法
9万
查看次数

Python优化(-O或PYTHONOPTIMIZE)有什么作用?

文档只说Python解释器执行"基本优化",而不涉及任何细节.显然,它依赖于实现,但有没有办法让我们了解可以优化哪些类型的事物,以及它可以节省多少运行时间?

使用-O有什么缺点吗?

我唯一知道的是-O禁用assert,但可能不应该assert用于生产中仍然可能出错的东西.

python optimization python-3.x

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

使用内置函数名作为属性或方法标识符是不好的做法吗?

我知道永远不要使用内置函数名作为变量标识符.

但有没有理由不将它们用作属性或方法标识符?

例如,在我自己的类中编写my_object.id = 5或定义实例方法是否安全dict

python namespaces naming-conventions reserved-words python-3.x

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

Python的multiprocessing.Pool.map中的"chunksize"参数

如果我有一个带有2个处理器的池对象,例如:

p=multiprocessing.Pool(2)
Run Code Online (Sandbox Code Playgroud)

我想迭代目录上的文件列表并使用map函数

有人可以解释这个函数的chunksize是什么:

p.map(func, iterable[, chunksize])
Run Code Online (Sandbox Code Playgroud)

如果我将chunksize设置为10,那意味着每10个文件应该用一个处理器处理吗?

python multiprocessing

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

OrderedDict中的最后一个元素

我有od类型OrderedDict.我想访问它最近添加的(键,值)对.od.popitem(last = True)会这样做,但也会删除od我不想要的那对.

有什么好办法呢?可以/应该这样做:

class MyOrderedDict(OrderedDict):
  def last(self):
    return next(reversed(self))
Run Code Online (Sandbox Code Playgroud)

python ordereddictionary python-3.x

36
推荐指数
3
解决办法
2万
查看次数

大熊猫相当于np.where

np.where具有矢量化if/else的语义(类似于Apache Spark的when/ otherwiseDataFrame方法).我知道我可以np.where在pandas上使用Series,但pandas经常定义自己使用的API而不是原始numpy函数,这对于pd.Series/ 通常更方便pd.DataFrame.

果然,我找到了pandas.DataFrame.where.但是,乍一看,它具有完全不同的语义.我找不到重写np.where使用pandas的最基本示例的方法where:

# df is pd.DataFrame
# how to write this using df.where?
df['C'] = np.where((df['A']<0) | (df['B']>0), df['A']+df['B'], df['A']/df['B'])
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗 或者是大熊猫where用于完全不同的用例,尽管名称相同np.where

python numpy pandas

35
推荐指数
2
解决办法
4万
查看次数

是什么让用户定义的类不可用?

文档说,一类是可哈希只要它定义__hash__方法和__eq__方法.然而:

class X(list):
  # read-only interface of `tuple` and `list` should be the same, so reuse tuple.__hash__
  __hash__ = tuple.__hash__

x1 = X()
s = {x1} # TypeError: unhashable type: 'X'
Run Code Online (Sandbox Code Playgroud)

什么使得X不可取消?

请注意,我必须将相同的列表(在正则相等方面)散列为相同的值; 否则,我会违反哈希函数的这个要求:

唯一需要的属性是比较相等的对象具有相同的哈希值

文档会警告不应该在其生命周期内修改可清除对象,当然我不会修改X创建后的实例.当然,口译员无论如何都不会检查.

python class user-defined-types python-3.x hashable

34
推荐指数
4
解决办法
2万
查看次数

Python:在存在nan的情况下,sort函数会中断

sorted([2, float('nan'), 1]) 回报 [2, nan, 1]

(至少在Activestate Python 3.1实现上.)

我理解这nan是一个奇怪的对象,所以如果它出现在排序结果中的随机位置,我不会感到惊讶.但它也混淆了容器中非纳米数的排序,这实在是出乎意料.

我问了一个相关的问题有关max,并根据我理解为什么sort是这样工作的.但是,这应该被视为一个错误吗?

文档只是说"返回一个新的排序列表[...]"而没有指定任何细节.

编辑:我现在同意这不违反IEEE标准.但是,我认为这是任何常识观点的错误.即使微软经常承认自己的错误,也已经认识到这个错误,并将其修复为最新版本:http://connect.microsoft.com/VisualStudio/feedback/details/363379/bug- in-list-double-sort-in-list-which-contains-double-nan.

无论如何,我最终关注@ khachik的回答:

sorted(list_, key = lambda x : float('-inf') if math.isnan(x) else x)
Run Code Online (Sandbox Code Playgroud)

我怀疑它与默认情况下的语言相比会导致性能下降,但至少它可行(除非我介绍的任何错误).

python sorting math nan

29
推荐指数
4
解决办法
5855
查看次数

打印列表的制表符分隔值

这是我目前的代码:

print(list[0], list[1], list[2], list[3], list[4], sep = '\t')
Run Code Online (Sandbox Code Playgroud)

我想写得更好.但

print('\t'.join(list))
Run Code Online (Sandbox Code Playgroud)

不会起作用,因为列表元素可能是数字,其他列表等,所以join会抱怨.

python printing python-3.x

28
推荐指数
3
解决办法
6万
查看次数