标签: named-parameters

Python命名参数是关键字?

因此,我正在使用的API的Web POST请求中预期的可选参数实际上也是python中的保留字.那么如何在方法调用中命名param:

example.webrequest(x=1,y=1,z=1,from=1)
Run Code Online (Sandbox Code Playgroud)

由于'from'是关键字,因此语法错误失败.如何以不会遇到语法错误的方式传递此信息?

python reserved-words keyword named-parameters

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

sqlite / python - 命名参数不带引号?

当在 SQLite 中使用带有命名参数的准备好的语句(特别是使用 python sqlite3 模块http://docs.python.org/library/sqlite3.html)时,是否有包括字符串值而不用引号括起来?

我有这个:

columnName = '''C1'''
cur = cur.execute('''SELECT DISTINCT(:colName) FROM T1''', {'colName': columnName})
Run Code Online (Sandbox Code Playgroud)

看来我最终得到的 SQL 是这样的:

SELECT DISTINCT('C1') FROM T1
Run Code Online (Sandbox Code Playgroud)

这当然没有多大用处,我真正想要的是:

SELECT DISTINCT(C1) FROM T1 .
Run Code Online (Sandbox Code Playgroud)

有什么方法可以提示 execute 方法以不将引号括起来的方式解释提供的参数吗?

我编写了一个小测试程序来充分探索这一点,因此它的价值在于:

import sys
import sqlite3
def getDatabaseConnection():
    DEFAULTDBPATH = ':memory:'

    conn = sqlite3.connect(DEFAULTDBPATH, detect_types=sqlite3.PARSE_DECLTYPES|sqlite3.PARSE_COLNAMES)
    conn.text_factory = str

    return conn

def initializeDBTables(conn):
    conn.execute('''
    CREATE TABLE T1(
      id INTEGER PRIMARY KEY AUTOINCREMENT,
      C1 STRING);''')   
    cur = conn.cursor()
    cur.row_factory = sqlite3.Row  # fields by name 

    for v …
Run Code Online (Sandbox Code Playgroud)

python sqlite prepared-statement named-parameters

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

如何防止函数参数以错误的顺序传递?

假设我有一个 C++ 函数,如下所示:

double myfunction(double a, double b) {
    // do something
}
Run Code Online (Sandbox Code Playgroud)

然后我这样称呼它:

double a = 1.0;
double b = 2.0;
double good_r = myfunction(a, b);
double bad_r = myfunction(b, a); // compiles fine
Run Code Online (Sandbox Code Playgroud)

我想确保a并且b永远不会以错误的顺序提供。在 C++ 中确保这一点的最佳方法是什么?

其他语言允许命名参数,如下所示:

double good_r = myfunction(a=a, b=b);
double bad_r = myfunction(a=b, b=a); // mistake immediately obvious
double bad_r = myfunction(b=b, a=a); // compiles fine
Run Code Online (Sandbox Code Playgroud)

或者也许可以使用类型部分解决问题,即

double my_type_safe_function(a_type a, b_type b) {
    // do something
}
a_type a = 1.0; …
Run Code Online (Sandbox Code Playgroud)

c++ types arguments named-parameters

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

在Java中以语义方式使用变量名

我目前正在尝试从外部系统设置一些参数。我有一个带有命名参数的请求,为了正确设置变量,我在服务调用上使用了带注释的方法参数。一个简化的例子可能是

public Response loginAttempt(@MyParam("username") String username, @MyParam("password") String password) {
    // login logic here
}
Run Code Online (Sandbox Code Playgroud)

显然,对每个参数名称进行注释既烦人又重复(尽管这样做确实有一个小优点,那就是让我可以在不同版本的API上更改名称,这很重要)。

如果我能够在自己的反思部分中简单地引用参数名称,那将非常非常方便。现在,我在其中获取参数及其注释,记下它们的顺序,对该顺序进行排列,然后运行。

我知道在Java的早期版本中,这根本无法完成。我还知道Java发布的版本比以往任何时候都快,具有比以往任何时候都更新和更现代的功能。不幸的是,具有15年信息的信噪比太高,不足以得到确切的答案。这是现代Java可以完成的事情吗?

java named-parameters

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

PHP 7+ 中的命名参数解决方案

如何在 PHP 7+ 中实现命名参数功能?

理想的语法是:

find($wildcard, relative = true, listIfEmpty = false) {
    ...
}
Run Code Online (Sandbox Code Playgroud)

但是没有这样的解决方案。在答案中,我实现了最短的解决方案,支持:

  • 重构
  • 参数和函数结果的类型提示
  • 可重用参数集
  • 类型安全参数
  • 参数的默认值
  • 每个参数的 Getter(无硬编码字符串)
  • 非常简单的 setter/getter,您只需为每个参数更改一个名称

有关更多信息和实施,请参阅答案

php parameter-passing named-parameters php-7

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

Kotlin 默认参数仅在最后起作用

我希望我的一些函数参数是可选的,所以我使用了默认参数,如下所示:

fun defaultparameter(param1: String = "", param2: String = "", param3: Int = 0)
Run Code Online (Sandbox Code Playgroud)

这项工作我可以做到这一点:

defaultparameter()
defaultparameter("titi")
defaultparameter("titi", "tata")
Run Code Online (Sandbox Code Playgroud)

我可以这样做,因为默认参数位于末尾,但是当我的参数位于中间时:defaultparameter("titi", 0) 这不起作用,它要求我提供param2.

我猜测编译器只能省略末尾的参数,但这正常吗?我知道当参数是相同类型时,编译器无法知道哪个是哪个,但这里我Int最后有一个类型,所以我认为它可以工作。

我的问题是:默认参数只在最后起作用?或者我错过了什么?有没有什么方法可以在不使用多态性和声明其他函数的情况下实现这一目标,只有两个参数:一String和一Int

named-parameters default-parameters kotlin

5
推荐指数
2
解决办法
1710
查看次数

使用Python C API命名参数?

如何使用Python C API模拟以下Python函数?

def foo(bar, baz="something or other"):
    print bar, baz
Run Code Online (Sandbox Code Playgroud)

(即,可以通过以下方式调用它:

>>> foo("hello")
hello something or other
>>> foo("hello", baz="world!")
hello world!
>>> foo("hello", "world!")
hello, world!
Run Code Online (Sandbox Code Playgroud)

)

c python named-parameters python-c-api

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

使用F#的类型中的构造函数的命名参数

请考虑以下代码:

type Test(a) =
  member o.A = a

let test = Test(a = cos 5.)
let test2 = Test(a = 5. |> cos) // ERROR
let test3 = Test(a = (5. |> cos))
Run Code Online (Sandbox Code Playgroud)

Test2行给出错误:

类型'bool'不支持任何名为'Cos'的运算符

未定义值或构造函数"a"

我理解错误信息,但我想知道它不是一个错误?

f# constructor types arguments named-parameters

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

Ruby中的默认值的可选参数

我想创建一个具有默认值的可选参数的函数

def my_function(a = nil, b=nil, c=500)

end
Run Code Online (Sandbox Code Playgroud)

并使用我想要指定的参数调用该函数

my_function(b=100)
Run Code Online (Sandbox Code Playgroud)

我如何在Ruby 1.9.2中实现这一目标?

ruby named-parameters optional-arguments

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

需要python函数中的命名参数

我创建了一个类,我想给用户(可能是我)两种不同的方法来初始化它.对于这个例子,该类被调用Box,我想用以下任一方式初始化它:

  1. 两组笛卡尔坐标,代表最小值和最大值(x,y).

  2. 一组笛卡尔坐标,表示最小值和方框尺寸

我可以通过使用命名参数来完成此操作,但是如果没有调用命名参数,我想引发错误.我的当前代码在调用pass_var没有命名参数的情况下调用伪参数.它有效,但我认为必须有更优雅或Pythonic的解决方案.

class Box(object):

    def __init__(self, pass_var=None, coordinates=None, min_points=None, dimensions=None):
        if coordinates:
            setup_box_from_coordinates()
            return
        elif min_points and dimensions:
            setup_box_from_dimensions()
            return
        raise NameError("Box Class needs to be initiated with 'coordinates='' or 'min_pts= & dimensions='"
Run Code Online (Sandbox Code Playgroud)

python named-parameters

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