【问题标题】:Give a function an operation in python (JES)在python(JES)中给一个函数一个操作
【发布时间】:2014-12-20 17:34:28
【问题描述】:

为什么不能在 python 中给出一个函数,一个操作?我知道为函数提供参数意味着将参数转换为实际参数。 这是一个例子:

def function(beta + 'aei') # beta = 'randomstring'
   print beta

我不会愚蠢,但我有这个疑问需要澄清.. :)

【问题讨论】:

  • 你打算做什么?

标签: python function parameter-passing jython


【解决方案1】:

这是不可能的,因为词法分析器does not make an allowance for it

funcdef        ::=  [decorators] "def" funcname "(" [parameter_list] ")" ["->" expression] ":" suite
decorators     ::=  decorator+
decorator      ::=  "@" dotted_name ["(" [parameter_list [","]] ")"] NEWLINE
dotted_name    ::=  identifier ("." identifier)*
parameter_list ::=  (defparameter ",")*
                    | "*" [parameter] ("," defparameter)* ["," "**" parameter]
                    | "**" parameter
                    | defparameter [","] )
parameter      ::=  identifier [":" expression]
defparameter   ::=  parameter ["=" expression]
funcname       ::=  identifier

请注意,defparameter 是您正在查看的内容;它只需要一个parameter 和一个可选的默认赋值表达式。然后parameter 令牌只会接受identifier

此外,即使你要表达这样的东西(这是更接近,但仍然是无效的语法):

def function(beta=beta + 'aei'):
    print beta

beta 在您实际输入方法之前是未定义的。

【讨论】:

    【解决方案2】:

    你可以对函数内部的参数进行任何操作。

    def function(beta):
        print beta + 'aei'
    

    你也可以修改函数内部的参数:

    def function(beta):
        beta = beta + 'aei'
        print beta
    

    【讨论】:

    • 我同意你在这里写的东西。我只是问在做'def function(beta +'aei')'时是否有错误的原因
    • “原因”是什么意思?当你定义一个函数时,你指定参数的名字,可能还有默认值。需要对值执行的任何操作都需要在函数内部或调用它的代码中发生。
    • 好的,'def function(beta='string')' beta 定义为全局变量还是局部变量?正如白金天青所说
    • 函数参数实际上是函数的局部变量,不管它是否有默认值。
    【解决方案3】:

    为什么不直接在函数语句中实现操作呢?

    def function(beta) # beta = 'randomstring'
       print beta + 'aei'
    

    如果您想要beta 参数的默认值,您也可以这样做:

    def function(beta='randomstring')
       print beta + 'aei'
    

    【讨论】:

    • 做这个'def function(beta='randomstring')'意味着把beta作为一个全局变量?我的问题是为什么我不能做 ' def function(beta+'aei') 。 python中的可变或不可变对象是否有问题或..我不知道!
    • 不,beta 在这种情况下不是全局的。语法的问题只是语言的词法分析器不允许它。这就像期望英语允许具有多个独立子句的句子(没有正确的连接符):是的,您可以以这种方式将单词串在一起,但这不是正确的英语。同样的事情:函数后面是参数名称列表,而不是语句。
    猜你喜欢
    • 2019-07-25
    • 1970-01-01
    • 2019-07-13
    • 1970-01-01
    • 2014-05-10
    • 2012-08-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多