当前位置: 首页 > 面试题库 >

有没有办法知道参数的值是默认值还是用户指定的值?

岑俊弼
2023-03-14
问题内容

我正在寻找类似Lisp的arg-supplied -p变量的东西,以帮助区分默认值和用户指定的相同值。

例:

def foo(a=10):
    pass

我想在foo中知道它是否像这样被调用:

foo()

或像这样:

foo(10)

甚至像这样:

foo(a=10)

后2个对我来说已经足够了。我不需要知道那个细节。我稍微检查了一下inspect模块,但是getargspec对于所有3个调用都返回完全相同的结果。


问题答案:

除了检查源代码外,无法区分这三个函数调用-它们的 含义 完全相同。如果需要区分它们,请使用其他默认值,例如None

def foo(a=None):
    if a is None:
        a = 10
        # no value for a provided


 类似资料:
  • 问题内容: 假设我有一个PHP函数foo: 有什么办法只能指定第二个可选参数? 例: 问题答案: PHP本身不支持命名参数作为函数。但是,有一些方法可以解决此问题: 使用数组作为该函数的唯一参数。然后,您可以从数组中提取值。这允许在数组中使用命名参数。 如果要根据上下文允许可选数量的参数,则可以使用func_num_args和func_get_args而不是在函数定义中指定有效参数。然后,根据参数

  • 我正在我的webapp中使用HikariCP。我想知道是否有办法知道池提供的连接(getConnection()…)是新的还是回收的?为什么?因为就在“getConnection()”之后,我做了一些“alter session”。如果它是一个可回收的连接,我不想再做一次,因为工作已经完成了。

  • 我试图理解下面的代码片段 当使用指针类型示例int*调用时,默认参数是如何工作的? 当obj1.test()被调用时,编译器将生成什么。我得到一个编译器错误当我尝试

  • 问题内容: 我在执行应用程序时遇到以下错误: java.sql.SQLException:未为参数1指定值 这是什么意思? 我在岛上的清单: 我在托管bean中获得的用户组列表: 我的JSF页面: 我的数据表能够显示数据库中的组列表。但是,当我在数据表中选择单个行时,应用程序需要一些时间才能与数据库建立连接以显示所选结果。 另外,奇怪的是,该应用程序能够比其他应用程序更快地显示某些选定的结果。与我

  • 所以我有一个这样的avro记录(称之为v1): 我想添加一个区分大小写的字段,默认值为false(称为v2)。我的第一种方法是: 根据模式演变,这是向后和向前兼容的,因为具有新模式的读取器读取用旧写入器模式编码的记录将能够填充此字段默认值和具有旧模式的读取器将能够读取用新写入器模式编码的记录,因为它只会忽略新添加的字段。 添加此字段的另一种方法是添加默认值为null的

  • 我正在为一个自定义应用程序编写一个指导图,我们需要在我的组织内的不同环境中使用该应用程序。这个应用程序在Kubernetes中有一些部分(这就是为什么我要编写Helm图表),在K8S之外有一些部分,更具体地说,是我用Terraform编写的AWS中的各种资源。

  • 这是我的用户。JAVA 这是我的地址。JAVA 但是当我试图持久化对象时,我得到了这个异常 错误不会来,如果我删除"NOTNULL"约束从FORIGN_KEY"USER_ID",但我需要使它作为一个NOTNULL列我应该怎么做。 这是我的注册方法 这是我的SQL脚本

  • 问题内容: 能否解释一下为什么Spring为下面所示的bean配置创建两个对象,因为默认情况下spring的默认作用域是singleton? Spring配置在这里: 问题答案: Spring的默认范围是单例。仅仅是你对成为单身人士的含义的想法与Spring如何定义单身人士不匹配。 如果你告诉Spring制作两个具有不同ID和相同类的独立bean,那么你将获得两个独立bean,每个bean具有单例