小编Sol*_*lma的帖子

Python自动复制初始化器参数

Python类有一个名为init的初始化方法.初始化程序通常会接受多个复制到同名属性的参数.

def __init__(self, a, b, c, d):
    self.a = a
    self.b = b
    self.c = c
    self.d = d
Run Code Online (Sandbox Code Playgroud)

这是很多工作,对我来说感觉"unpythonic".有没有办法自动化这个过程?

我想也许沿着这些方面的东西(下面的伪代码)可以工作:

for x in __init__.argument_names:
    exec('self.' + x + ' = ' + x)
Run Code Online (Sandbox Code Playgroud)

我知道用这种方式调用exec不是好习惯.但也许Python开发团队已经创建了一种安全且等效的自动执行此任务的方法.

有什么建议?

FS

python

6
推荐指数
1
解决办法
139
查看次数

没有分号的方括号是什么意思?

我在F# Design PatternsGene Belitski 的书中找到了下面的代码.我一直在阅读有关F#的内容,但我还没有在该书或其他地方找到这种语法的解释.我理解关键字yield及其作用,我知道yield和printfn语句的返回值都是unit类型.我不明白的是方括号.这些语句不像分号创建那样用分号分隔.这必须是一个特殊的语法,但我找不到它的引用.有人可以帮忙吗?

let eagerList = [
    printfn "Evaluating eagerList"
    yield "I"
    yield "am"
    yield "an"
    yield "eager"
    yield "list" ]
Run Code Online (Sandbox Code Playgroud)

f#

6
推荐指数
2
解决办法
180
查看次数

处理包不兼容的最佳方法是什么?

安装包XPlot.Plotly (v. 1.4.2)使用Nuget失败的消息,有不兼容的最新版本(v. 10.0.3)Newtonsoft.Json,这是我以前安装.该消息还表明version 9.0.1 of Newtonsoft.Json可行.所以我卸载了最新版本Newtonsoft.Json,已安装version 9.0.1,然后才能安装XPlot.Plotly.

这是处理这种不兼容性的正确方法吗?

我最终能否使用这两种软件包的最新版本?

compatibility f# version nuget

6
推荐指数
0
解决办法
83
查看次数

为什么有些软件包可以在Pip中升级,而不能在Conda中升级?

我在Windows 10下安装了Anaconda。一切正常。我也跑了

conda upgrade --all
Run Code Online (Sandbox Code Playgroud)

在命令提示符下。

但是,我注意到在命令提示符下键入此命令时:

pip list -o
Run Code Online (Sandbox Code Playgroud)

我得到(除其他事项外)

astroid (1.4.7) - Latest: 1.4.8 [wheel]
Run Code Online (Sandbox Code Playgroud)

这意味着程序包astroid可以在pip下升级。但是,当我转到Anaconda Navigator并查看可升级软件包的列表时,却没有看到astroid。(我无法找到查看在Conda下可升级的软件包的命令行方式)。

有人可以解释为什么astroid在Pip下而不是Conda下可升级吗?

python pip conda

5
推荐指数
1
解决办法
456
查看次数

如何访问FSharp.Data.JsonExtensions?

抱歉,这个问题还不清楚。我对F#4.0中的软件包感到困惑,这是我能做的最好的事情。

该书Expert F# 4.0由Don赛姆,亚当Granicz和安东尼奥奇斯泰尼诺包含的代码用于处理JSON数据。代码以

open FSharp.Data
open FSharp.Data.JsonExtensions
Run Code Online (Sandbox Code Playgroud)

我已经FSharp.Data在Visual Studio中安装了。不过,“ JsonExtensions”一词在其下仍显示红色花键,其余代码无法编译。

Add References在Solution Explorer中我没有找到一个包FSharp.Data.JsonExtensions。我也看了下NuGet,没有发现包裹FSharp.Data.JsonExtensions。有文档 表明它是一个模块。但是,使用Visual Studio中不出现下点(只有一个条目:)JsonExtensions
FSharp.Data.Unit Systems

如何使该模块中的代码可用,以便我可以运行书中的代码?

f# f#-data

5
推荐指数
1
解决办法
258
查看次数

如何摆脱 Intellisense 弹出窗口?

我正在使用Visual Studio 2017. 它有很好的弹出窗口,显示有关类型和对象的信息。但有时信息会占据屏幕的很大一部分(例如,对于Deedle Frame)。在这些情况下想按一些键并摆脱弹出窗口。我试过了Esc。它在很短的时间内工作,然后信息弹出窗口重新出现。

有没有让信息弹出窗口消失的键?

或者,是否可以停止显示此类弹出窗口并使用组合键调用它们?

(我试图去Tools/Options/Text Editor/All Languages/更改一些设置(Auto list membersParameter information),但没有用。同样,Tools/Options/Text Editor/F#/General具有相同的设置,但更改它们无济于事。)

intellisense f# visual-studio

5
推荐指数
0
解决办法
1290
查看次数

如何识别 JET.JL 标记的问题?

我最近开始使用 JET.jl。在大多数情况下这是有帮助的。然而,有时我就是无法弄清楚为什么我的代码有问题。下面是一个例子。该功能foo非常基本并且运行良好。尽管如此,JET.jl\xe2\x80\x99s 宏仍@report_call报告错误。我不知道那是什么。使用宏调用提供的信息来识别问题的最佳方法是什么?

\n
using DataFrames, JET\ndf = DataFrame(:A => [1.0, 2.0, 3.0, 4.0])\n# 4\xc3\x971 DataFrame\n# Row \xe2\x94\x82 A       \n#     \xe2\x94\x82 Float64\n# \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n#  1 \xe2\x94\x82     1.0\n#  2 \xe2\x94\x82     2.0\n#  3 \xe2\x94\x82     3.0\n#  4 \xe2\x94\x82     4.0\n\nfunction foo(df::DataFrame)::DataFrame\n    v = 1:nrow(df)\n    df[!, :B] = v\n\n    return df\nend\n# foo (generic function with 1 method)\n\nfoo(df)\n# 4\xc3\x972 DataFrame\n# Row \xe2\x94\x82 A        B     \n#     \xe2\x94\x82 Float64  Int64\n# \xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\xbc\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\xe2\x94\x80\n#   1 \xe2\x94\x82     1.0      1\n#   2 \xe2\x94\x82     2.0      2\n#   3 \xe2\x94\x82     3.0      3\n#   4 \xe2\x94\x82 …
Run Code Online (Sandbox Code Playgroud)

dataframe julia diagnostic-tools

5
推荐指数
1
解决办法
85
查看次数

为什么我不能把这个字符串变成Literal?

我需要将字符串转换为Literal,以便将其作为参数传递给CsvProvider.但我无法做到.下面的代码运行没有问题:

open System.IO
open FSharp.Data
open FSharp.Data.JsonExtensions

let charSwitch (a: char) b x =
    if x = a then
        b
    else
        x

let jsonDataPath = Path.Combine(__SOURCE_DIRECTORY__, @"data\fractal.json")
let jsonData = JsonValue.Load(jsonDataPath)

/// Path with traded assets
let trp = ((jsonData?paths?tradedAssets).AsString() |> Core.String.map (charSwitch '\\' '/')).ToString()
printfn "trp is a standard string: %s" trp
// trp is a standard string: H:/Dropbox/Excel/Data/Fractal/Traded.csv
Run Code Online (Sandbox Code Playgroud)

但是,添加以下两行时

[<Literal>]
let tradedPath = trp
Run Code Online (Sandbox Code Playgroud)

最后我得到了消息This is not a valid constant expression or custom attribute value.

我甚至试图复制trp,但这没有帮助. …

f# constant-expression

4
推荐指数
2
解决办法
284
查看次数

在F#4.1中是否有类似于tryFind的新结果类型?

F#语言包含Discriminated Union类型option<'T>.几个模块包含有用的函数,XYZ.tryFind其返回值是类型的对象option<'T>.(实施例:List.tryFind,Map.tryFind,Array.tryFind).F# 4.1添加了Result<'S,'T>类似option<'T>但提供更多信息的类型.是否有类似于tryFindResult<'S,'T>类型的功能?

下面的代码是尝试创建这样的功能.

let resultFind (ef: 'K -> 'T) (tryfind: 'K -> 'M -> 'T option) (m: 'M) (k: 'K) =
    let y = tryfind k m
    match y with
    | Some i -> Result.Ok i
    | None -> Result.Error (ef k)

let fields = [("Email", "jdoe@xyz.com"); ("Name", "John Doe")]
let myMap = fields |> Map.ofList
let …
Run Code Online (Sandbox Code Playgroud)

f# optional f#-4.1

4
推荐指数
1
解决办法
267
查看次数

如何从字符串中获取可区分的联合案例?

我有一个可区分的联合,我想根据字符串(从 JSON 文件中读取)选择一个案例。这很容易做到:

type MyDU = A | B
let str = "B"
let myDU : MyDU =
    match str with
    | "A" -> MyDU.A
    | "B" -> MyDU.B
    | _ -> failwith "whatever"
// val myDU : MyDU = B
Run Code Online (Sandbox Code Playgroud)

但是,有时会有很多情况,需要大量打字。

Microsoft.FSharp.Reflection库允许我获取一个UnionCaseInfo 对象:

open Microsoft.FSharp.Reflection
let myDUInfo : UnionCaseInfo =
    FSharpType.GetUnionCases(typeof<MyDU>)
    |> Array.find (fun x -> x.Name = str)
// val myDUInfo : UnionCaseInfo = MyDU.B
Run Code Online (Sandbox Code Playgroud)

我想转换myDUInfo成一个联合案例,以获得与上面依赖的代码相同的结果match,但不必键入与所有案例对应的字符串。

这可能吗?

reflection f# discriminated-union

4
推荐指数
1
解决办法
578
查看次数