为什么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 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解释器执行"基本优化",而不涉及任何细节.显然,它依赖于实现,但有没有办法让我们了解可以优化哪些类型的事物,以及它可以节省多少运行时间?
使用-O有什么缺点吗?
我唯一知道的是-O禁用assert,但可能不应该assert用于生产中仍然可能出错的东西.
我知道永远不要使用内置函数名作为变量标识符.
但有没有理由不将它们用作属性或方法标识符?
例如,在我自己的类中编写my_object.id = 5或定义实例方法是否安全dict?
python namespaces naming-conventions reserved-words python-3.x
如果我有一个带有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个文件应该用一个处理器处理吗?
我有od类型OrderedDict.我想访问它最近添加的(键,值)对.od.popitem(last = True)会这样做,但也会删除od我不想要的那对.
有什么好办法呢?可以/应该这样做:
class MyOrderedDict(OrderedDict):
def last(self):
return next(reversed(self))
Run Code Online (Sandbox Code Playgroud) 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?
的文档说,一类是可哈希只要它定义__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创建后的实例.当然,口译员无论如何都不会检查.
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)
我怀疑它与默认情况下的语言相比会导致性能下降,但至少它可行(除非我介绍的任何错误).
这是我目前的代码:
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 ×10
python-3.x ×7
class ×1
dictionary ×1
hashable ×1
iterator ×1
math ×1
namespaces ×1
nan ×1
numpy ×1
optimization ×1
pandas ×1
printing ×1
sorting ×1