在循环中,我试图将两个节点的两个value()s的比较推迟到以后的时间.
class Node():
def __init__(self, v):
self.v = v
def value(self):
return self.v
nodes = [Node(0), Node(1), Node(2), Node(3), Node(4), Node(2)]
results = []
for i in [0, 1, 2]:
j = i + 3
results.append(lambda: nodes[i].value() == nodes[j].value())
for result in results:
print result
Run Code Online (Sandbox Code Playgroud)
结果都是True(因为我,j == 2,5对于所有lambda).我怎样才能推迟执行lambda直到实际调用它,但是使用正确的变量绑定?lambda中的表达式并不一定都是相等的...还有一堆其他更复杂的表达式.
谢谢你的帮助!
请考虑以下代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Xml;
using System.Xml.Linq;
namespace ConsoleApplication1
{
class Program
{
static void Main(string[] args)
{
XmlDocument xmlDoc = new XmlDocument();
xmlDoc.LoadXml(@"<Parts>
<Part name=""DisappearsOk"" disabled=""true""></Part>
<Part name=""KeepMe"" disabled=""false""></Part>
<Part name=""KeepMe2"" ></Part>
<Part name=""ShouldBeGone"" disabled=""true""></Part>
</Parts>");
XmlNode root = xmlDoc.DocumentElement;
List<XmlNode> disabledNodes = new List<XmlNode>();
try
{
foreach (XmlNode node in root.ChildNodes.Cast<XmlNode>()
.Where(child => child.Attributes["disabled"] != null &&
Convert.ToBoolean(child.Attributes["disabled"].Value)))
{
Console.WriteLine("Removing:");
Console.WriteLine(XDocument.Parse(node.OuterXml).ToString());
root.RemoveChild(node);
}
}
catch (Exception Ex)
{
Console.WriteLine("Exception, as expected");
}
Console.WriteLine();
Console.WriteLine(XDocument.Parse(root.OuterXml).ToString()); …Run Code Online (Sandbox Code Playgroud) 我有一个HTML注入到已加载的DOM的问题,其中在下载脚本文件后加载内联javascript.据我所知,这不应该是异步的,并且内联脚本应该在脚本文件之后执行.如果域名与调用页面相同,则此方法有效,但使用CDN甚至子域也可以执行相同的操作.我是否应该做些什么来改变我如何称呼这些?我发誓这是有效的,因为我有一个多星期的CDN,但也许我从未发现过这个问题.
安慰
Loading Inline Script
VM1400:3 Uncaught TypeError: Cannot read property 'init' of undefined(anonymous function)
app.members.event.js?v=204&_=1453644424985:5 Loading Script File
app.members.event.js?v=204&_=1453644424985:71 Finished Script File
Run Code Online (Sandbox Code Playgroud)
使用Javascript
<script type="text/javascript" src="https://test.azureedge.net/Areas/Directors/scripts/app.members.event.js?v=204"></script>
<script type="text/javascript">
console.log('Loading Inline Script');
app.viewModel.members.event.init();
console.log('Finished Inline Script');
Run Code Online (Sandbox Code Playgroud) 假设我有一个IQueryable<T>表达式,我想封装它的定义,存储它并重用它,或者稍后将它嵌入到更大的查询中.例如:
IQueryable<Foo> myQuery =
from foo in blah.Foos
where foo.Bar == bar
select foo;
Run Code Online (Sandbox Code Playgroud)
现在我相信我可以保持myQuery对象并像我描述的那样使用它.但有些事情我不确定:
如何最好地参数化?最初我在一个方法中定义了这个,然后IQueryable<T>作为方法的结果返回.这样我就可以定义blah和bar作为方法参数,我猜它IQueryable<T>每次都会创建一个新的.这是封装逻辑的最佳方法IQueryable<T>吗?还有其他方法吗?
如果我的查询解析为标量而不是IQueryable? 例如,如果我希望此查询完全如所示,但附加.Any()只是让我知道是否有任何匹配的结果?如果我添加,(...).Any()则结果bool立即执行,对吧?有没有使用这些方式Queryable运营(Any,SindleOrDefault,等),但不立即执行?LINQ-to-SQL如何处理这个问题?
编辑:第2部分更多的是试图了解IQueryable<T>.Where(Expression<Func<T, bool>>)vs. 之间的限制差异IQueryable<T>.Any(Expression<Func<T, bool>>).在创建要延迟执行的大型查询时,似乎后者并不灵活.的Where()可以追加,然后在其它构建体可以稍后所附,然后最终执行.由于Any()返回标量值,因此它可以在构建其余查询之前立即执行.
是什么区别defer.execute(),并threads.deferToThread()在扭曲?两者都使用相同的参数 - 一个函数,以及用它调用它的参数 - 并返回一个deferred,它将通过调用函数的结果触发.
该threads版本明确声明它将在一个线程中运行.但是,如果defer版本没有,那么调用它有什么意义呢?在reactor中运行的代码永远不会阻塞,因此它调用的任何函数都不能阻塞.那时,您可以做defer.succeed(f(*args, **kwargs))而不是defer.execute(f, args, kwargs)使用相同的结果.
由于使用$.Deferred我已经遇到过这种情况几次:我有一个值列表,每个值都以某种方式产生一个Deferred Object,并且我想在解析所有Deferred对象后执行回调.
一个更具体的例子是这样的:
var urls = [ 'foo.com', 'bar.com', 'baz.com', 'qux.com' ],
defers = [], defer;
for( var i = 0, j = urls.length; i < j; i++ ){
defer = $.ajax({
url: 'http://' + urls[ i ]
});
defers.push(defer);
}
$.when.apply(window, defers).done(function(){
// Do Something
});
Run Code Online (Sandbox Code Playgroud)
有没有比我的例子中的代码更优雅的解决方案?
当我在Dapper中执行查询并且只想要检索一个记录块时,我可以使用.Skip().Take(),还是需要在SQL中使用select top n*?
例如,给定一个包含10,000条记录的表,我只想要前200条,因为我的列表页面每页只显示200条.我跑这个吗?
conn.Query<Widget>("select * from Widgets").Skip((page - 1) * size).Take(size);
Run Code Online (Sandbox Code Playgroud)
或这个:
conn.Query<Widget>("select top 200 * from Widgets");
Run Code Online (Sandbox Code Playgroud)
Dapper的.Query<T>方法是否延期?
给定一个返回MVC视图的非常基本的LINQ,延迟执行在什么时候开始执行?
在控制器中:
public ActionResult Index()
{
var model = _fooService.GetAll();
return View(model);
}
Run Code Online (Sandbox Code Playgroud)
在模型中:
@foreach (var item in Model) {
<tr>
<td>@item.Bar</td>
</tr>
}
Run Code Online (Sandbox Code Playgroud)
当我们调用时,查询不会被执行_fooService.GetAll(),但是会延迟到稍后的某个时间点 - 但是它执行的确切位置是什么?
return View(model);控制器中的语句(看起来不像)?@foreach (var item in Model)视图中的线?@item.Bar看到视图中的线?return View(model);和正在呈现的视图?应该efQuery.ToList().Count和efQuery.Count()产生相同的价值?
怎么可能efQuery.ToList().Count并且efQuery.Count()不产生相同的价值?
//GetQuery() returns a default IDbSet which is used in EntityFramework
using (var ds = _provider.DataSource())
{
//return GetQuery(ds, filters).Count(); //returns 0???
return GetQuery(ds, filters).ToList().Count; //returns 605 which is correct based on filters
}
Run Code Online (Sandbox Code Playgroud)
我有一个正常的Django网站运行.此外,还有另一个扭曲的过程,它使用Django的ORM监听Jabber存在通知并更新Django DB.
到目前为止,它只是调用相应的Django模型(在正确设置了设置环境之后).但是,这会阻止Twisted应用程序,这不是我想要的.
由于我不熟悉,我不知道,使用延迟以非阻塞方式访问Django DB(通过其ORM)的最佳方法是什么.
如果解析在线消息,我想在Django DB中保存具有jid_str的用户在线/离线(使用Django模型UserProfile).我用这个功能做到了:
Run Code Online (Sandbox Code Playgroud)def django_useravailable(jid_str, user_available): try: userhost = jid.JID(jid_str).userhost() user = UserProfile.objects.get(im_jabber_name=userhost) user.im_jabber_online = user_available user.save() return jid_str, user_available except Exception, e: print e raise jid_str, user_available,e
目前,我用以下方式调用它:
d = threads.deferToThread(django_useravailable, from_attr, user_available)
d.addCallback(self.success)
d.addErrback(self.failure)
Run Code Online (Sandbox Code Playgroud) c# ×4
linq ×3
python ×3
twisted ×2
asp.net-mvc ×1
asynchronous ×1
cdn ×1
count ×1
dapper ×1
django ×1
dom ×1
exception ×1
ienumerable ×1
iqueryable ×1
javascript ×1
jquery ×1
lambda ×1
orm ×1