我有一棵拥有数十万个节点的大树,我正在使用它__slots__来减少内存消耗.我刚刚发现了一个非常奇怪的错误并修复了它,但我不明白我看到的行为.
这是一个简化的代码示例:
class NodeBase(object):
__slots__ = ["name"]
def __init__(self, name):
self.name = name
class NodeTypeA(NodeBase):
name = "Brian"
__slots__ = ["foo"]
Run Code Online (Sandbox Code Playgroud)
然后我执行以下操作:
>>> node = NodeTypeA("Monty")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 4, in __init__
AttributeError: 'NodeTypeA' object attribute 'name' is read-only
Run Code Online (Sandbox Code Playgroud)
如果NodeTypeA.name没有定义则没有错误(旁注:该属性是错误的,没有理由在那里).如果NodeTypeA.__slots__从未定义过也没有错误,因此它有一个__dict__.
我不明白的是:为什么超类中存在类变量会干扰在子类的槽中设置实例变量?
任何人都可以解释为什么这种组合导致object attribute is read-only错误?我知道我的例子是人为的,并且不太可能是真实程序中的故意,但这并不会使这种行为变得不那么奇怪.
谢谢,
乔纳森
我有一个SyncAdapter用于我的应用程序,以及AccountManager将我的应用程序帐户添加到Android帐户管理器.我向帐户管理器添加帐户的代码如下所示:
Bundle data = new Bundle(5);
data.putString(_PEOPLE_ID, people_id);
data.putString(_FIRST_NAME, first_name);
data.putString(_LAST_NAME, last_name);
data.putString(_PLAN, plan);
data.putString(_BIRTHDAY, birthday);
Account account = new Account(username, _ACCOUNT_TYPE);
try {
boolean created;
created = _account_manager.addAccountExplicitly(account,
_cryptography.encrypt(_SEED, password), data);
response.accountCreated(created);
_account_manager.setAuthToken(account, _TOKEN_TYPE, session_token);
_model.updateActiveAccount(people_id, username, password);
SharedPreferences.Editor settings = _settings.edit();
settings.putString(_ACCOUNT_TYPE, account.name);
settings.putString(_TOKEN_TYPE, session_token);
settings.commit();
// Tells the content provider that it can sync this account
ContentResolver.setIsSyncable(account, AUTHORITY, 1);
final Bundle extras = new Bundle(1);
extras.putBoolean(SYNC_EXTRAS_INITIALIZE, true);
ContentResolver.addPeriodicSync(account, AUTHORITY, extras, 900);
} catch …Run Code Online (Sandbox Code Playgroud) 我正在向我的解析器添加subparsers来模拟子命令功能(例如代码见:python中的简单命令行应用程序 - 解析用户输入?).现在我想添加一个quit不带参数的subparser/command并附加一个"quit"动作.可能吗 ?我该怎么办呢?
当我读取文件时,tf.read_file我得到了类型的东西tf.string.文档只说它是"可变长度字节数组.Tensor的每个元素都是一个字节数组." (https://www.tensorflow.org/versions/r0.10/resources/dims_types.html).我不知道如何解释这个.
我对这种类型无能为力.在通常的python中你可以通过索引获取元素my_string[:4],但是当我运行以下代码时,我得到一个错误.
import tensorflow as tf
import numpy as np
x = tf.constant("This is string")
y = x[:4]
init = tf.initialize_all_variables()
sess = tf.Session()
sess.run(init)
result = sess.run(y)
print result
Run Code Online (Sandbox Code Playgroud)
它说
File "/usr/local/lib/python2.7/dist-packages/tensorflow/python/framework/tensor_shape.py", line 621, in assert_has_rank
raise ValueError("Shape %s must have rank %d" % (self, rank))
ValueError: Shape () must have rank 1
我也无法将我的字符串转换为tf.float32张量.它是.flo文件,它有魔术标题"PIEH".这个numpy代码成功地将这样的头转换为数字(参见这里的例子/sf/answers/1961152861/)但我不能用tensorflow做到这一点.我试过tf.string_to_number(string, out_type=tf.float32)但它说
tensorflow.python.framework.errors.InvalidArgumentError: StringToNumberOp could not correctly convert string: …
尝试调整来自旺旺的答案以从"git diff"中排除文件以获得--stat标志并失败 - 接受的答案(创建驱动程序)似乎只是unix(重定向到/ bin/true,无论这意味着什么)加上它创建了一个驱动程序将它永久地分配给文件类型,而我正在寻找一个开关来临时禁用文件的差异(或者更确切地说是某些文件).
脚本解决方案:
git diff `git status -s |grep -v ^\ D |grep -v file/to/exclude.txt |cut -b4-`
Run Code Online (Sandbox Code Playgroud)
实际上调用git状态并编辑其输出 - 而我想要的是指示git diff本身在计算(简单)--stat(只是更改行)时忽略一些文件.我经历了git-diff文档,但似乎无法找到这样的选项.有人帮我一把吗?
$ git --version
git version 2.6.1.windows.1
Run Code Online (Sandbox Code Playgroud) 背景信息:
我需要大约每小时更新一些来自网络的数据,即使我的应用程序关闭也是如此.更新数据本身大约需要40秒到1分钟.然后将其作为Serializable保存到文件中.我的应用启动时会读取此文件.
这是我为时刻而采取的方法(不使用服务)
像这样使用AlarmManager和BroadcastReceiver:
private void set_REFRESH_DATA_Alarm(){
mContext = Main.this;
alarmManager = (AlarmManager) getSystemService(ALARM_SERVICE);
broadcast_intent = new Intent(mContext,
RepeatingAlarmReceiver_REFRESH_DATA.class);
pendingIntent = PendingIntent.getBroadcast(mContext, 0, broadcast_intent, 0);
// do a REFRESH every hour, starting for the first time in 30 minutes from now ...
Calendar now = Calendar.getInstance();
long triggerAtTime = now.getTimeInMillis()+ (1 * 30 * 60 * 1000); // starts in 30 minutes
long repeat_alarm_every = (1 * 60 * 60 * 1000); // repeat every 60 minutes
alarmManager.setRepeating(AlarmManager.RTC_WAKEUP, triggerAtTime,
repeat_alarm_every, …Run Code Online (Sandbox Code Playgroud) 我试图理解Python(2.6)如何处理类,实例等,在某个时刻,我尝试了这段代码:
#/usr/bin/python2.6
class Base(object):
default = "default value in base"
def __init__(self):
super(Base, self).__init__()
@classmethod
def showDefaultValue(cls, defl = default):
print "defl == %s" % (defl)
class Descend(Base):
default = "default value in descend"
def __init__(self):
super(Descend, self).__init__()
if __name__ == "__main__":
Descend.showDefaultValue()
Run Code Online (Sandbox Code Playgroud)
输出为:"基数默认值"
我想知道为什么"默认"字段没有被Descend类覆盖......有没有办法覆盖它?为什么不被覆盖?
任何提示(或解释页面的链接将不胜感激).谢谢!
防止用户角色执行操作.
在一个真实的案例中,我有这个:
public String delete() {
if(FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator"){
//.....the action to perform
}
return "Denied";
}
Run Code Online (Sandbox Code Playgroud)
我希望我可以使用@RolesAllowed()EJB 的注释,但我不使用EJB而是使用ManagedBeans.所以问题是:有没有办法同时使用多个角色?一些解决方法!示例:如果必须允许对3个角色执行操作(管理员,主持人,经理).我有义务这样做:
if (FacesContext.getCurrentInstance().getExternalContext().isUserInRole("administrator")
|| FacesContext.getCurrentInstance().getExternalContext().isUserInRole("manager")
|| .....) {
//....
}
Run Code Online (Sandbox Code Playgroud)
重现所有方法都很痛苦.像数百种方法的东西:(
浏览Brian Goetz 这个非常有趣但却有一年历史的演示文稿 - 在幻灯片链接中他提出了一个aggregateBy()假设在Stream API中的方法,该方法应该将列表(?)的元素聚合到一个映射(给定一个默认的初始值)以及操作该值的方法(对于重复键也是如此) - 请参阅演示文稿中的下一张幻灯片).
显然,Stream API中没有这样的方法.还有另一种方法可以在Java 8中做类似的事情吗?
在我保持的程序中,它完成如下:
# count the files in the archive
length = 0
command = ur'"%s" l -slt "%s"' % (u'path/to/7z.exe', srcFile)
ins, err = Popen(command, stdout=PIPE, stdin=PIPE,
startupinfo=startupinfo).communicate()
ins = StringIO.StringIO(ins)
for line in ins: length += 1
ins.close()
Run Code Online (Sandbox Code Playgroud)
错误检查怎么样?是否足以将其修改为:
proc = Popen(command, stdout=PIPE, stdin=PIPE,
startupinfo=startupinfo)
out = proc.stdout
# ... count
returncode = proc.wait()
if returncode:
raise Exception(u'Failed reading number of files from ' + srcFile)
Run Code Online (Sandbox Code Playgroud)
或者我应该实际解析Popen的输出?
编辑:对7z,rar,zip档案(7z.exe支持)感兴趣 - 但7z和zip对于初学者来说已经足够了
python ×5
android ×2
python-2.7 ×2
7zip ×1
aggregation ×1
alarmmanager ×1
argparse ×1
class-design ×1
git ×1
git-diff ×1
inheritance ×1
java ×1
java-8 ×1
java-ee ×1
jsf ×1
numpy ×1
oop ×1
popen ×1
service ×1
servlets ×1
slots ×1
string ×1
subprocess ×1
tensorflow ×1
tfrecord ×1