我想在Python中创建一个动态对象(在另一个对象内),然后为其添加属性.
我试过了:
obj = someobject
obj.a = object()
setattr(obj.a, 'somefield', 'somevalue')
Run Code Online (Sandbox Code Playgroud)
但这没用.
有任何想法吗?
编辑:
我从for循环中设置属性,循环遍历值列表,例如
params = ['attr1', 'attr2', 'attr3']
obj = someobject
obj.a = object()
for p in params:
obj.a.p # where p comes from for loop variable
Run Code Online (Sandbox Code Playgroud)
在上面的例子中,我会得到obj.a.attr1,obj.a.attr2,obj.a.attr3.
我使用了这个setattr函数因为我不知道怎么做obj.a.NAME一个for循环.
如何根据p上面示例中的值设置属性?
我已经看到很多人从模块中提取所有类的例子,通常是这样的:
# foo.py
class Foo:
pass
# test.py
import inspect
import foo
for name, obj in inspect.getmembers(foo):
if inspect.isclass(obj):
print obj
Run Code Online (Sandbox Code Playgroud)
真棒.
但我无法找到如何从当前模块中获取所有类.
# foo.py
import inspect
class Foo:
pass
def print_classes():
for name, obj in inspect.getmembers(???): # what do I do here?
if inspect.isclass(obj):
print obj
# test.py
import foo
foo.print_classes()
Run Code Online (Sandbox Code Playgroud)
这可能是非常明显的事情,但我找不到任何东西.谁能帮我吗?
如何在Python中创建类或方法摘要?
我试着__new__()像这样重新定义:
class F:
def __new__(cls):
raise Exception("Unable to create an instance of abstract class %s" %cls)
Run Code Online (Sandbox Code Playgroud)
但是现在如果我创建一个G继承自F这样的类:
class G(F):
pass
Run Code Online (Sandbox Code Playgroud)
然后我也无法实例化G,因为它调用了它的超类__new__方法.
有没有更好的方法来定义抽象类?
len()Python内置函数的功能成本是多少?(列表/元组/串/字典)
目前git正在努力,我无法想出以下的最佳解决方案.
有两个分支,一个叫master,一个叫mobiledevicesupport.我希望将mobiledevicesupport保持为一个连续的分支,只要mobiledevicesupport稳定,它就会与主分支合并/同步.这会将来自mobiledevicesupport的更改合并到master中,但也会将master中的所有更改带入mobiledevicesupport,以便继续处理分支并更改或修改功能.这需要与中央存储库和多个开发人员一起工作.
请举例说明其他人使用的类似工作流程,或者只是告诉我这个想法是不是很愚蠢,我应该考虑其他选择.目前工作流程似乎很合理,但我只是不知道如何让git以这种方式工作.
谢谢,所有帮助非常感谢.
更新1:如果我要将master与mobiledevicesupport和mobiledevice support合并到master中,我是否会在两个分支上获得复制提交.或者git足够聪明,我已经将分支A中的最新更改提取到分支B并将合并提交C添加到分支B.并且我已将分支B中的最新更改提取到分支A并将合并提交D添加到分支一个?
我打算发布一张图片,但我没有足够的声誉,所以我想下面的插图将要做.两个分支连续运行,经常合并两个方向.我不确定的关键是git将如何完成提交,并且它将在合并时从其他分支的提交填充任一分支,或者它将保持干净.我之前使用过rebase但它似乎结束了分支并将所有提交放入master中,或者我做错了.感谢你目前的帮助.
master
A--B--C-----H--I--J--M--N
\ / \
mobile \ / \
D--E--F--G--------K--L
Run Code Online (Sandbox Code Playgroud) 如果我的Python脚本至少需要特定版本的Python,那么在使用早期版本的Python启动脚本时,正确失败的正确方法是什么?
如何及早获得控制权以发出错误消息并退出?
例如,我有一个使用ternery操作符(2.5中的新增内容)和"with"块(2.6中的新增内容)的程序.我写了一个简单的小解释器 - 版本检查器例程,这是脚本会调用的第一件事......除了它没有那么远.相反,在我的例程被调用之前,脚本在python编译期间失败.因此,脚本的用户会看到一些非常模糊的synax错误回溯 - 这几乎需要专家推断它只是运行错误版本的Python的情况.
我知道如何检查Python的版本.问题是某些语法在旧版本的Python中是非法的.考虑这个程序:
import sys
if sys.version_info < (2, 4):
raise "must use python 2.5 or greater"
else:
# syntax error in 2.4, ok in 2.5
x = 1 if True else 2
print x
Run Code Online (Sandbox Code Playgroud)
在2.4下运行时,我想要这个结果
$ ~/bin/python2.4 tern.py
must use python 2.5 or greater
Run Code Online (Sandbox Code Playgroud)
而不是这个结果:
$ ~/bin/python2.4 tern.py
File "tern.py", line 5
x = 1 if True else 2
^
SyntaxError: invalid syntax
Run Code Online (Sandbox Code Playgroud)
(引导同事.)
从Udacity的深度学习类中,y_i的softmax只是指数除以整个Y向量的指数之和:
哪里S(y_i)是的SOFTMAX功能y_i,并e为指数和j是否定的.输入向量Y中的列数.
我尝试过以下方法:
import numpy as np
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
e_x = np.exp(x - np.max(x))
return e_x / e_x.sum()
scores = [3.0, 1.0, 0.2]
print(softmax(scores))
Run Code Online (Sandbox Code Playgroud)
返回:
[ 0.8360188 0.11314284 0.05083836]
Run Code Online (Sandbox Code Playgroud)
但建议的解决方案是:
def softmax(x):
"""Compute softmax values for each sets of scores in x."""
return np.exp(x) / np.sum(np.exp(x), axis=0)
Run Code Online (Sandbox Code Playgroud)
它产生与第一个实现相同的输出,即使第一个实现显式获取每列和最大值的差异,然后除以总和.
有人可以用数学方式显示原因吗?一个是正确的而另一个是错的吗?
实现在代码和时间复杂性方面是否相似?哪个更有效率?
我想知道如何检查变量是否是一个类(不是实例!).
我已经尝试使用该函数isinstance(object, class_or_type_or_tuple)来执行此操作,但我不知道类将具有什么类型.
例如,在以下代码中
class Foo: pass
isinstance(Foo, **???**) # i want to make this return True.
Run Code Online (Sandbox Code Playgroud)
我试图取代" class"与??? ,但我意识到这class是python中的关键字.
在我的Java Script应用程序中,我将日期存储为如下格式:
2011-09-24
Run Code Online (Sandbox Code Playgroud)
现在,当我尝试使用上面的值来创建一个新的Date对象(所以我可以以不同的格式检索日期)时,日期总会在一天后返回.见下文:
var doo = new Date("2011-09-24");
console.log(doo);
Run Code Online (Sandbox Code Playgroud)
日志:
Fri Sep 23 2011 20:00:00 GMT-0400 (Eastern Daylight Time)
Run Code Online (Sandbox Code Playgroud) 我能够用time.strptime解析包含日期/时间的字符串
>>> import time
>>> time.strptime('30/03/09 16:31:32', '%d/%m/%y %H:%M:%S')
(2009, 3, 30, 16, 31, 32, 0, 89, -1)
Run Code Online (Sandbox Code Playgroud)
如何解析包含毫秒的时间字符串?
>>> time.strptime('30/03/09 16:31:32.123', '%d/%m/%y %H:%M:%S')
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "/usr/lib/python2.5/_strptime.py", line 333, in strptime
data_string[found.end():])
ValueError: unconverted data remains: .123
Run Code Online (Sandbox Code Playgroud) python ×8
class ×2
date ×2
reflection ×2
abstract ×1
algorithm ×1
attributes ×1
collections ×1
git ×1
inheritance ×1
inspect ×1
javascript ×1
numpy ×1
object ×1
softmax ×1
time ×1
version ×1