我有一个使用datetime.utcnow()创建并保存在数据库中的python datetime实例.
为了显示,我想使用默认的本地时区将从数据库检索的日期时间实例转换为本地日期时间(即,就像使用datetime.now()创建日期时间一样).
如何仅使用python标准库将UTC日期时间转换为本地日期时间(例如,没有pytz依赖项)?
似乎一个解决方案是使用datetime.astimezone(tz),但是如何获得默认的本地时区?
考虑以下代码段:
# directorys == {'login': <object at ...>, 'home': <object at ...>}
for d in directorys:
self.command["cd " + d] = (lambda : self.root.change_directory(d))
Run Code Online (Sandbox Code Playgroud)
我希望创建一个包含两个函数的字典如下:
# Expected :
self.command == {
"cd login": lambda: self.root.change_directory("login"),
"cd home": lambda: self.root.change_directory("home")
}
Run Code Online (Sandbox Code Playgroud)
但看起来生成的两个lambda函数完全相同:
# Result :
self.command == {
"cd login": lambda: self.root.change_directory("login"),
"cd home": lambda: self.root.change_directory("login") # <- Why login ?
}
Run Code Online (Sandbox Code Playgroud)
我真的不明白为什么.你有什么建议吗 ?
最近,我根据paramiko制作了一个连接工作站的代码,其中包含不同的用户名(感谢私钥).
我从来没有遇到任何问题,但今天,我有: SSHException: Error reading SSH protocol banner
这很奇怪,因为它在任何连接上都是随机发生的.有没有办法解决它?
我正在使用ThreeJS开发一个显示实体列表的Web应用程序,每个实体都有相应的"查看"和"隐藏"按钮; 例如,entityName 查看隐藏.当用户单击" 查看"按钮时,将调用以下函数并成功在屏幕上绘制实体.
function loadOBJFile(objFile){
/* material of OBJ model */
var OBJMaterial = new THREE.MeshPhongMaterial({color: 0x8888ff});
var loader = new THREE.OBJLoader();
loader.load(objFile, function (object){
object.traverse (function (child){
if (child instanceof THREE.Mesh) {
child.material = OBJMaterial;
}
});
object.position.y = 0.1;
scene.add(object);
});
}
function addEntity(object) {
loadOBJFile(object.name);
}
Run Code Online (Sandbox Code Playgroud)
在单击" 隐藏"按钮时,将调用以下函数:
function removeEntity(object){
scene.remove(object.name);
}
Run Code Online (Sandbox Code Playgroud)
问题是,单击" 隐藏"按钮后,一旦加载,实体就不会从屏幕中删除.如何使" 隐藏"按钮起作用?
我做了小实验.我在函数内部scene.remove(object.name);
之后添加,结果,当点击"查看"按钮时,没有实体绘制(如预期的那样)意味着内部工作正常.但我仍然无法弄清楚如何在removeEntity(object)中使用它.scene.add(object);
addEntity
scene.remove(object.name);
addEntity
另外,我检查了scene.children的内容,它显示:[object Object],[object Object],[object Object],[object Object],[object Object],[object Object]
完整代码: …
我正在开发一个Python应用程序,我希望在其上看到实时统计信息.我想用Flask
它来使它易于使用和理解.
问题是我的Flask服务器应该从我的Python应用程序的最开始开始,并在最后停止.它应该如下所示:
def main():
""" My main application """
from watcher.flask import app
# watcher.flask define an app as in the Quickstart flask documentation.
# See: http://flask.pocoo.org/docs/0.10/quickstart/#quickstart
app.run() # Starting the flask application
do_my_stuff()
app.stop() # Undefined, for the idea
Run Code Online (Sandbox Code Playgroud)
因为我需要我的应用程序上下文(用于统计),我不能使用multiprocessing.Process
.然后我试图使用a threading.Thread
,但看起来Werkzeug不喜欢它:
* Running on http://0.0.0.0:10079/
Exception in thread Flask Server:
Traceback (most recent call last):
File "/usr/lib/python2.7/threading.py", line 810, in __bootstrap_inner
self.run()
File "/usr/lib/python2.7/threading.py", line 763, in run
self.__target(*self.__args, **self.__kwargs)
File ".../develop-eggs/watcher.flask/src/watcher/flask/__init__.py", line 14, …
Run Code Online (Sandbox Code Playgroud) 请考虑以下代码:
from typing import Callable, Any
TFunc = Callable[..., Any]
def get_authenticated_user(): return "John"
def require_auth() -> Callable[TFunc, TFunc]:
def decorator(func: TFunc) -> TFunc:
def wrapper(*args, **kwargs) -> Any:
user = get_authenticated_user()
if user is None:
raise Exception("Don't!")
return func(*args, **kwargs)
return wrapper
return decorator
@require_auth()
def foo(a: int) -> bool:
return bool(a % 2)
foo(2) # Type check OK
foo("no!") # Type check failing as intended
Run Code Online (Sandbox Code Playgroud)
这段代码按预期工作.现在想象一下我想扩展这个,而不是只是执行func(*args, **kwargs)
我想在参数中注入用户名.因此,我修改了函数签名.
from typing import Callable, Any
TFunc = Callable[..., Any] …
Run Code Online (Sandbox Code Playgroud) 我想用Sphinx记录Python对象属性.我明白我应该用
:ivar varname: description
:ivar type varname: description
Run Code Online (Sandbox Code Playgroud)
但是我看到了一个奇怪的行为,那就是Sphinx在我的项目中搜索变量名并尝试创建符号链接.例如这段代码:
class A(object):
"""
:ivar x: some description
"""
def __init__(self, x):
self.x = x
class B(object):
def x(self):
return 1
class C(object):
def x(self):
return 2
Run Code Online (Sandbox Code Playgroud)
会导致此错误:
mylibrary.module1.A的module1.py:docstring:无:警告:找到多个目标为交叉引用u'x':mylibrary.module1.Cx,mylibrary.module1.Bx
我是否错误地理解了:ivar的目的或用法?
让我们举个简单的例子吧.
my_list = [
{"name": "toto", "value": 3},
{"name": "foo", "value": 42},
{"name": "bar", "value": 56}
]
def foo(name):
try:
value = next(e["value"] for e in my_list if e["name"] == name)
except StopIteration:
print "Uuuh not found."
else:
if value % 2:
print "Odd !"
else:
print "Even !"
Run Code Online (Sandbox Code Playgroud)
如您所见,上面的代码有效:
>>> foo("toto")
Odd !
>>> foo("foo")
Even !
>>> foo("kappa")
Uuuh not found.
Run Code Online (Sandbox Code Playgroud)
我只是想知道为什么我们不能在这样的elif
语句中使用语句有一个特殊的原因try
:
try:
value = next(e["value"] for e in my_list if e["name"] == name) …
Run Code Online (Sandbox Code Playgroud) 当我用参数创建一个函数时,PyCharm让我用:param param_name:
字段创建docstring ,这非常好.但我还需要添加:type param_name:
.
那样:
def foo(bar, xyz):
return bar + xyz
Run Code Online (Sandbox Code Playgroud)
使用生成docstring选项我有(即使使用文档存根启用的插入'类型'和'rtype'):
def foo(bar, xyz):
"""
:param bar:
:param xyz:
"""
return bar + xyz
Run Code Online (Sandbox Code Playgroud)
而我想的是:
def foo(bar, xyz):
"""
:param bar:
:type bar:
:param xyz:
:type xyz:
"""
return bar + xyz
Run Code Online (Sandbox Code Playgroud) 我使用了很多Pycharm docstring类型解析器来指定方法参数和返回的类型,属性或实例变量.如果它几乎一直在工作,我有一个关于告诉PyCharm我有一个函数或类作为参数/属性/ ...的问题.
这是一个简短的例子:
class Bar:
def __init__(self, bar):
"""
:type bar: str
"""
print bar
class Foo:
"""
:type my_class: Bar.__class__
"""
def __init__(self, cinstance=Bar):
"""
:type cinstance: Bar.__class__
"""
self.my_class = cinstance
def run(self):
# it should print an unexpected type warning, but it doesn't.
self.my_class(2)
Run Code Online (Sandbox Code Playgroud)
如果我只是把Bar
而不是Bar.__class__
,当然PyCharm告诉我,Bar
不能打电话.那么如何告诉他我正在给他上课?
请注意,对于@classmethod
装饰器,PyCharm没有任何问题可以理解我们正在谈论的是类而不是实例.
以下是我的尝试:
python ×9
pycharm ×2
datetime ×1
decorator ×1
docstring ×1
flask ×1
if-statement ×1
javascript ×1
loops ×1
paramiko ×1
python-2.7 ×1
python-3.x ×1
three.js ×1
timezone ×1
try-catch ×1
type-hinting ×1
typing ×1