添加两个或更多元组的值以产生每个"列"总数的最pythonic方法是什么?
例如:
>>> a = (10, 20)
>>> b = (40, 50)
>>> c = (1, 3)
>>> ???
(51, 73)
Run Code Online (Sandbox Code Playgroud)
到目前为止,我考虑过以下几点:
def sumtuples(*tuples):
return (sum(v1 for v1,_ in tuples), sum(v2 for _,v2 in tuples))
>>> print sumtuples(a, b, c)
(51, 73)
Run Code Online (Sandbox Code Playgroud)
我相信这远非理想 - 如何改进?
我试图了解如何实现类型推断.特别是,我不太清楚"统一"的繁重发挥在何处/为何发挥作用.
我将举一个"伪C#"的例子来帮助澄清:
天真的方式是这样的:
假设您将程序"解析"到表达式树中,以便可以使用以下命令执行:
interface IEnvironment
{
object lookup(string name);
}
interface IExpression
{
// Evaluate this program in this environment
object Evaluate(IEnvironment e);
}
Run Code Online (Sandbox Code Playgroud)
因此,"乘法"之类的东西可以用以下方式实现:
class Multiply : IExpression
{
IExpression lhs;
IExpression rhs;
// etc.
public object Evaluate(IEnvironment e)
{
// assume for the moment C# has polymorphic multiplication
return lhs.Evaluate(e) * rhs.Evaluate(e);
}
}
Run Code Online (Sandbox Code Playgroud)
然后要"实现"类型推断,你可以做类似的事情:
interface ITypeEnvironment
{
Type getType(string name);
}
interface IExpression
{
//as before
object Evaluate(IEnvironment e);
// infer type
Type inferType(ITypeEnvironment typeEnvironment);
} …Run Code Online (Sandbox Code Playgroud) 在处理大型应用程序时,大多数开发人员如何处理ASP.NET MVC中的Typed Views?我们正在考虑将特定于View的模型放在Models文件夹中,然后将所有域对象放入一个单独的项目中.这样我们的控制器可以轻松地将域对象添加到类型化视图,而域对象不需要知道视图布局本身.
例如,如果我们有一个Employee对象:
然后我们的员工视图可能会使用ViewEmployeeModel对象:
这是一种明智的做法吗?有没有更好的方法来完成同样的事情?这似乎有点奇怪,因为我基本上有两个模型(一个用于视图,一个用于业务对象),但是它不比使用无类型视图更好吗?
好的,所以这让我整天疯狂.
为什么会这样:
class Foo:
def __init__(self, bla = {}):
self.task_defs = bla
def __str__(self):
return ''.join(str(self.task_defs))
a = Foo()
b = Foo()
a.task_defs['BAR'] = 1
print 'B is ==> %s' % str(b)
print 'A is ==> %s' % str(a)
Run Code Online (Sandbox Code Playgroud)
给我输出:
B is ==> {'BAR': 1}
A is ==> {'BAR': 1}
Run Code Online (Sandbox Code Playgroud)
我知道它与python通过引用传递所有内容有关.
但为什么会这样呢?这实际上让我一整天都疯了,基本上让我把我的东西拆开了.难道python不应该足够聪明来处理这样的事情吗?
我有一组字符串.我想选择包含另一个字符串的所有字符串.但我希望将第一项作为搜索开头的项目,然后按字母顺序排列其他项目.但是以下代码不起作用:
items = items
.Where(a => a.Contains(contained))
.OrderBy(a => a)
;
var startsWith = items.Where(a => a.StartsWith(contained));
items = startsWith.Union(items.Except(startsWith));
Run Code Online (Sandbox Code Playgroud)
我该怎么办?
我正在尝试使用powershell来访问远程注册表,如下所示:
$reg = [Microsoft.Win32.RegistryKey]::OpenRemoteBaseKey("LocalMachine", $server)
$key = $reg.OpenSubkey($subkeyPath)
Run Code Online (Sandbox Code Playgroud)
根据我无法确定的某些因素,我得到了
使用"1"参数调用"OpenSubKey"的异常:"不允许请求的注册表访问."
要么
System.UnauthorizedAccessException:尝试执行未经授权的操作.Microsoft.Win32.RegistryKey.Win32ErrorStatic(Int32 errorCode,String str)at Microsoft.Win32.RegistryKey.OpenRemoteBaseKey(RegistryHive hKey,String machineName)
很明显,这是因为我正在运行powershell脚本的用户没有相应的凭据来访问远程注册表.我希望能够提供一组用于远程注册表访问的凭据,但我无法找到任何方法来执行此操作.我也不清楚确切地指定哪些用户可以远程访问注册表.
我正在尝试用我的c#代码写入事件查看器,但我得到了很棒的"对象引用没有设置为对象的实例"消息.我很感激这些代码的一些帮助,无论是它的错误还是更好的方法.这是我写入事件日志的内容:
private void WriteToEventLog(string message)
{
string cs = "QualityDocHandler";
EventLog elog = new EventLog();
if (!EventLog.SourceExists(cs))
{
EventLog.CreateEventSource(cs, cs);
}
elog.Source = cs;
elog.EnableRaisingEvents = true;
elog.WriteEntry(message);
}
Run Code Online (Sandbox Code Playgroud)
这就是我试图称之为的地方:
private readonly Random _rng = new Random();
private const string _chars = "ABCDEFGHIJKLMNOPQRSTUVWXYZ";
private string RandomString(int size)
{
try
{
char[] buffer = new char[size];
for (int i = 0; i < size; i++)
{
buffer[i] = _chars[_rng.Next(_chars.Length)];
}
return new string(buffer);
}
catch (Exception e)
{
WriteToEventLog(e.ToString());
return null; …Run Code Online (Sandbox Code Playgroud) 我有以下继承:
internal abstract class TeraRow{}
internal class xRow : TeraRow {} // xRow is a child of TeraRow
public IEnumerable<TeraRow> Compare(MappedTables which, DateTime selectionStart
, DateTime selectionEnd, string pwd)
{
IEnumerable<xRow> result=CompareX();
return (IEnumerable<TeraRow>)result; //Invalid Cast Exception?
}
Run Code Online (Sandbox Code Playgroud)
无法转换'System.Collections.Generic.List 1[xRow]' to type 'System.Collections.Generic.IEnumerable1 [TeraRow] 类型的对象
另外,为什么我需要施放它?
我有一些这样的C++代码,我正在使用GDB:
void foo(int num) { ... }
void main() {
Baz baz;
foo (baz.get());
}
Run Code Online (Sandbox Code Playgroud)
当我进去时main(),我想介入foo(),但我想要跳过去 baz.get().
在GDB文档说,"如果有一个函数行号信息的步骤命令只进入功能",所以我会很高兴,如果我能删除行号信息,baz.get()从我的可执行文件.但理想情况下,我可以告诉GDB"永远不会进入Baz类的任何功能".
有谁知道如何做到这一点?
在Python(和其他)中,您可以通过在函数中使用'yield'运算符来递增地处理大量数据.在PHP中以类似的方式做什么?
例如,假设在Python中,如果我想读取一个可能非常大的文件,我可以一次一行地处理每一行(这个例子是设计的,因为它与'for file in file_obj基本相同) "):
def file_lines(fname):
f = open(fname)
for line in f:
yield line
f.close()
for line in file_lines('somefile'):
#process the line
Run Code Online (Sandbox Code Playgroud)
我现在正在做的(在PHP中)是我正在使用私有实例变量来跟踪状态,并且每次调用函数时都会相应地执行操作,但似乎必须有更好的方法.
.net ×3
c# ×3
python ×3
architecture ×1
asp.net-mvc ×1
c#-3.0 ×1
casting ×1
event-log ×1
gdb ×1
generics ×1
ienumerable ×1
linq ×1
permissions ×1
php ×1
powershell ×1
registry ×1
scheme ×1
tuples ×1
unification ×1