0

以下是相关代码段:

class MainPage(webapp2.RequestHandler):
    def write_form(self,text=""):
        self.response.out.write(form%{"text":escape_html(text)}) #form is a html form

    def get(self):
        self.write_form()

    def post(self):
        user_input = self.request.get('text') #from a html form
        encode = user_input.encode('rot13')
        self.write_form(encode)

定义 write_form 时,我们将 text 的默认值设置为空字符串,我理解这一点。

我感到困惑的是最后一行self.write_form(encode)我们没有明确说明我们现在将变量文本设置为编码(或我们想要传递的任何内容......)。

这是否意味着由于我们只有一个变量(不包括自我),所以我在 python 中传递的任何内容都会假定它是我为“文本”传递的内容?

提前致谢

更新

使用 jamylak 的答案,我在简化版本中为自己尝试了它(python 2.7,因为我不使用 3)来得到我的答案。对于像我这样的 n00bs,这可能会使答案更加清晰:

def example(result="42"):
    print result

example()
>>>42

example(87)
>>>87

example("hello")
>>>"hello"
4

2 回答 2

1

是的,self当您调用实例的方法时隐式传递,并且不需要总是用它们的名称指定默认参数(如果以正确的顺序传递)。附带说明一下,python 3 允许您使用星号 ( *) 来确保您通过它们的名称传递它们:

>>> def foo(*, text=''):
        pass

>>> foo('aa')
Traceback (most recent call last):
  File "<pyshell#10>", line 1, in <module>
    foo('aa')
TypeError: foo() takes 0 positional arguments but 1 was given
>>> 
>>> foo(text='aaa')
于 2013-04-19T14:21:53.867 回答
0

您的第一个参数是self由 python 自动传递给该函数的。第二个参数rot13传递给text. 如果你传递第三个参数,你会得到一个错误。

于 2013-04-19T14:22:05.227 回答