为什么要.dt.days花费100倍的时间.dt.total_seconds()?
df = pd.DataFrame({'a': pd.date_range('2011-01-01 00:00:00', periods=1000000, freq='1H')})
df.a = df.a - pd.to_datetime('2011-01-01 00:00:00')
df.a.dt.days # 12 sec
df.a.dt.total_seconds() # 0.14 sec
Run Code Online (Sandbox Code Playgroud) 我有这个非常简单的代码:
from typing import List, Iterable
Position = (int, int)
IntegerMatrix = List[List[int]]
def locate_zeros(matrix: IntegerMatrix) -> Iterable[Position]:
"""Given an NxM matrix find the positions that contain a zero."""
for row_num, row in enumerate(matrix):
for col_num, element in enumerate(row):
if element == 0:
yield (col_num, row_num)
Run Code Online (Sandbox Code Playgroud)
这是错误:
Traceback (most recent call last):
File "type_m.py", line 6, in <module>
def locate_zeros(matrix: IntegerMatrix) -> Iterable[Position]:
File "/usr/lib/python3.5/typing.py", line 970, in __getitem__
(len(self.__parameters__), len(params)))
TypeError: Cannot change parameter count from 1 to 2 …Run Code Online (Sandbox Code Playgroud) 为什么当一个耗尽的发电机被多次调用StopIteration时,每次都会被调用,而不是仅仅是第一次尝试?后续调用是否毫无意义,并指出调用者代码中可能存在错误?
def gen_func():
yield 1
yield 2
gen = gen_func()
next(gen)
next(gen)
next(gen) # StopIteration as expected
next(gen) # why StopIteration and not something to warn me that I'm doing something wrong
Run Code Online (Sandbox Code Playgroud)
当有人意外使用过期的生成器时,这也会导致此行为:
def do_work(gen):
for x in gen:
# do stuff with x
pass
# here I forgot that I already used up gen
# so the loop does nothing without raising any exception or warning
for x in gen:
# do stuff with x
pass
def …Run Code Online (Sandbox Code Playgroud) 我有一个load_config加载并返回 python 模块的函数:
import imp
def load_config(path: str):
return imp.load_source('config', path)
print(type(load_config('config.py')))
Run Code Online (Sandbox Code Playgroud)
此代码段打印<class 'module'>.
如何load_config使用 Mypy注释返回值?
文档说:
每个类都保留一个对其直接子类的弱引用列表.此方法返回所有仍然存活的引用的列表.
但是,每个类如何首先获得其子类的弱引用列表?换句话说,当我创造
class B(A):
pass
Run Code Online (Sandbox Code Playgroud)
怎么A发现它B只是继承了它?并且这种机制是否足够强大以存活边缘情况(自定义元类,分配__bases__等)?
有时,应用程序与第三方软件包中的内部文件之间会发生模块名称冲突.例如,profile.py当前文件夹中命名的文件在jupyter notebook尝试导入而不是自己的文件时会导致崩溃profile.py.从包用户的角度来看,避免这个问题的好方法是什么?(或者这是包开发人员应该以某种方式阻止的东西?)
注意:虽然由于应用程序和内置名称(例如time.py或socket.py)之间的冲突而发生类似的问题,但至少记住标准库模块和其他内置对象的名称相对容易.
文档到flask.Config.from_object说:
您不应使用此功能加载实际配置,而应使用配置默认值。实际的配置应该使用 from_pyfile() 加载,并且最好从不在包内的位置加载,因为包可能安装在系统范围内。
为什么我不应该使用这个函数来加载实际配置?为什么要使用from_pyfile和从不在包内的位置加载实际配置?
请注意,Flask Web Development似乎用于from_object加载实际配置(第 78-79 页):
存储在定义的类之一中的配置设置
config.py可以使用from_object()Flask 的app.config配置对象中可用的方法直接导入到应用程序中。
# code excerpt from the book:
app = Flask(__name__)
app.config.from_object(config[config_name])
config[config_name].init_app(app)
Run Code Online (Sandbox Code Playgroud) 我试图实现一个(原型,而不是生产)版本的持久字典,它使用磁盘上的 pickle 作为持久存储。然而,pickle.load调用是__setitem__为了它自己的目的,而且这是(当然)覆盖以确保对字典的更改传播回持久存储的方法——因此它调用pickle.dump. 当然,调用pickle.dump是不行的,因为每个项目都是在 unpickling 期间设置的。
除了蛮力(如下)之外,有没有办法解决这个问题?我尝试阅读Pickling Class Instances以寻找使用特殊方法的解决方案,但没有找到。
下面的代码监控 unpickling 是否正在进行,并pickle.dump在这种情况下跳过;虽然它工作正常,但感觉很糟糕。
import os, pickle
class PersistentDict(dict):
def __new__(cls, *args, **kwargs):
if not args: # when unpickling
obj = dict.__new__(cls)
obj.uninitialized = True
return obj
path, *args = args
if os.path.exists(path):
obj = pickle.load(open(path, 'rb'))
del obj.uninitialized
return obj
else:
obj = dict.__new__(cls, *args, **kwargs)
obj.path = path
obj.dump()
return obj
def __init__(self, *args, **kwargs):
pass
def __setitem__(self, …Run Code Online (Sandbox Code Playgroud) 两者之间有什么区别吗?
f x = x + 1
Run Code Online (Sandbox Code Playgroud)
和
let f x = x + 1
Run Code Online (Sandbox Code Playgroud)
什么时候输入GHCi?IIUC,有一条特殊的规则,即let没有in内部GHCi有效地适用于整个翻译范围.但如果存在let没有区别,这条规则的重点是什么?
编辑:使用GHCi 8.0.2版.
一个非常简单的钻石型继承案例:
class Root:
def f(self):
print('Root')
class A(Root): pass
class B(Root):
def f(self):
print('B')
class AB(A, B): pass
AB().f()
Run Code Online (Sandbox Code Playgroud)
在大多数情况下,在最简单的情况下,您可以将从父类继承的属性的搜索视为深度优先,从左到右,而不是在层次结构中存在重叠的同一类中搜索两次.
因此,我希望我的例子按顺序解决:AB - > A - > Root - > B.但事实并非如此.使用ActiveState Python 3.1.2,输出为'B'而不是'Root'.
我错过了什么?
另外,我注意到ActiveState Python 2.6使用相同的代码打印"Root".决议规则是否在2.6和3.1之间变化?