我有一个方法,我希望能够接受单个字符串(路径,但不一定是运行代码的机器上存在的路径)或字符串列表/元组.
鉴于字符串充当字符列表,我如何判断该方法收到了哪种类型?
我希望能够接受单个条目的标准字符串或unicode字符串,以及多个列表或元组,所以isinstance似乎不是答案,除非我错过了一个聪明的技巧(比如服用)共同祖先类的优势?).
Python版本是2.5
我有一个"调度图"定义如下:
private Dictionary<string, Func<DynamicEntity, DynamicEntity, IEnumerable<DynamicEntity>, string>> _messageProcessing;
Run Code Online (Sandbox Code Playgroud)
这允许我根据DynamicEntity实例的名称轻松地分派到不同的方法.
为了避免被更多地维护代码的每个人所厌恶,有没有办法在Func中命名参数以给出哪些DynamicEntity是哪个?
我正在使用受歧视的联合构建表达式树.以下代码:
type IntExpression =
| TrueIsOne of BoolExpression
type BoolExpression =
| LessThan of IntExpression * IntExpression
| And of BoolExpression * BoolExpression
| Or of BoolExpression * BoolExpression
| Bool of bool
Run Code Online (Sandbox Code Playgroud)
抛出错误,因为未定义BoolExpression.交换定义只会导致反向(IntExpression未定义),如您所料.
有没有解决的办法?
我有这样一张桌子:
Field1 | Field2 | Field3
1 | 1 | 22
1 | 2 | 10
2 | 5 | 40
2 | 2 | 55
Run Code Online (Sandbox Code Playgroud)
我想按Field1分组,然后使用最小的Field2从行的其余部分获取值,例如:
Field1 | Field2 | Field3
1 | 1 | 22
2 | 2 | 55
Run Code Online (Sandbox Code Playgroud)
请注意,这与选择每行的最小值不同,这将给出:
Field1 | Field2 | Field3
1 | 1 | 10
2 | 2 | 40
Run Code Online (Sandbox Code Playgroud)
哪些与我的数据将是一个毫无意义的结果.
有人有一个通用(即多数据库)解决方案吗?我敢肯定它一定是个问题!
我真的可以使用在sqlite和ms-access中工作的解决方案,而sql server将是一个奖励.
我们的代码库中的几个方法使用'MaybeObject',可以在结果可能已知时传递给函数,或者可能依赖于尚未执行的外部Web服务调用.例如,下面的属性可以具有指定的已知值,或者如果未指定并在异步调用完成后调用它将返回异步调用的结果.
private string _internalString;
public string stringProp
{
get
{
if (!string.IsNullOrEmpty(_internalString))
return _internalString;
return resultOfAsyncCallFromSomewhereElse;
}
set { _internalString = value; }
}
Run Code Online (Sandbox Code Playgroud)
显然,尝试在异步调用完成之前引用该属性会导致空引用异常,因此我们还有一个标志来检查该值是否可用.
问题是,在下面的代码中会创建lambda尝试和评估stringProp
(可能还没有填充),或者是否会推迟评估直到调用结果Action(在检查异步操作完成后)?
public Action ExampleMethod(MaybeObject maybe)
{
return () => doSomethingWithString(maybe.stringProp);
}
Run Code Online (Sandbox Code Playgroud) 为什么以下代码不起作用?
open System
open System.Runtime.InteropServices
open System.ComponentModel
[<DllImport("kernel32")>]
extern int AddDllDirectory(string NewDirectory)
[<EntryPoint>]
let main argv =
let result = AddDllDirectory("c:\\")
if result = 0 then
printfn "%A" <| Win32Exception(Marshal.GetLastWin32Error())
// Prints: "System.ComponentModel.Win32Exception (0x80004005): The parameter is incorrect"
System.Console.ReadLine() |> ignore
0 // return an integer exit code
Run Code Online (Sandbox Code Playgroud) [编辑2:以下答案中的更多信息和调试...]
我正在编写一个python脚本,将MS Access数据库导出为一系列文本文件,以便进行更有意义的版本控制(我知道 - 为什么Access?为什么我不使用现有的解决方案?让我们说限制不是技术性质).
我已经通过comtypes库使用ADO和ADOX成功导出了数据库的全部内容和结构,但是我在重新导入数据时遇到了问题.
我将每个表的内容导出到一个文本文件中,每行都有一个列表,如下所示:
[-9, u'No reply']
[1, u'My home is as clean and comfortable as I want']
[2, u'My home could be more clean or comfortable than it is']
[3, u'My home is not at all clean or comfortable']
Run Code Online (Sandbox Code Playgroud)
以下函数导入所述文件:
import os
import sys
import datetime
import comtypes.client as client
from ADOconsts import *
from access_consts import *
class Db:
def create_table_contents(self, verbosity = 0):
conn = client.CreateObject("ADODB.Connection")
rs = client.CreateObject("ADODB.Recordset")
conn.ConnectionString = self.new_con_string
conn.Open()
for …
Run Code Online (Sandbox Code Playgroud) 我正在尝试使用Python comtypes库在excel电子表格中创建一个QueryTable,但是得到一个相当无意义的错误......
在vba中(在工作簿中的模块中),以下代码可以正常工作:
Sub CreateQuery()
Dim con As ADODB.Connection
Dim rs As ADODB.Recordset
Dim ws As Worksheet
Dim qt As QueryTable
Set ws = ActiveWorkbook.Sheets(1)
Set con = New ADODB.Connection
con.Open ("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\Path\to\Db.mdb;")
Set rs = New ADODB.Recordset
rs.Open "Select * from [tbl Base Data];", con
Set qt = ws.QueryTables.Add(rs, ws.Range("A1"))
qt.Refresh
End Sub
Run Code Online (Sandbox Code Playgroud)
但是以下Python代码:
import sys
import comtypes.client as client
def create_querytable():
constring = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=C:\\Path\\to\\Db.mdb"
conn = client.CreateObject("ADODB.Connection", dynamic = True)
rs = client.CreateObject("ADODB.Recordset", dynamic = True)
SQL …
Run Code Online (Sandbox Code Playgroud) 我知道使用globals(),locals()和getattr通过字符串来反馈Python中的内容(如本问题所示),但除非我遗漏了一些明显的东西,否则我似乎无法使用它来调用类型.
例如:
In [12]: locals()['int']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
e:\downloads_to_access\<ipython console> in <module>()
KeyError: 'int'
In [13]: globals()['int']
---------------------------------------------------------------------------
KeyError Traceback (most recent call last)
e:\downloads_to_access\<ipython console> in <module>()
KeyError: 'int'
getattr(???, 'int')...
Run Code Online (Sandbox Code Playgroud)
这样做的最佳方法是什么?
我已经使用SpecFlow编写了几个长期运行的端到端集成测试,但是由于Nunit超时而导致它们失败.
将[Timeout(x)]属性添加到TestFixture可以解决问题,但每次更新功能时都会被覆盖.
如何以SpecFlow尊重的方式删除或延长超时?
在尝试让类型提供程序生成更多惯用代码时,我开始考虑从提供程序返回curried函数.
这段代码片段:
let lambdaTest () =
let inner =
<@ fun myInt ->
fun int2 -> sprintf "A string! %d %d" myInt int2 @>
let innerType = inner.GetType()
ProvidedProperty(
"lambda",
innerType.GenericTypeArguments.[0],
IsStatic = true,
GetterCode = fun _ -> inner.Raw)
Run Code Online (Sandbox Code Playgroud)
int -> int -> string
如果我事先知道所需的签名,似乎可以提供; 但理想情况下我想动态构建嵌套的lambda函数,如下所示:
let rec inline curry<'a> format (func: Quotations.Expr<'a>) : Quotations.Expr<'a> =
match format with
| FString f ->
curry<string -> 'a> f <@ fun (s : str) -> %func @>
| FInt f -> …
Run Code Online (Sandbox Code Playgroud) 我正在为一个大型Ruby(+其他东西)代码库构建一个基于摇动的构建系统,但我正在努力处理期望将文件列表传递给"构建"的Ruby命令.
拿Rubocop(一种linting工具).我可以看到三个选项:
前两个规则很容易构建,但我的问题是我无法弄清楚如何将最后一个案例表示为一个动摇规则.有人可以帮忙吗?
所以; 这段代码编译得很好(虽然我不建议运行它...):
let rec firstFunc () =
secondFunc ()
and secondFunc () =
firstFunc ()
Run Code Online (Sandbox Code Playgroud)
但!此代码不会:
let rec firstFunc () =
secondFunc ()
[<CompiledName "SecondFunc">]
and secondFunc () =
firstFunc ()
Run Code Online (Sandbox Code Playgroud)
有办法解决这个限制吗?