What do double parentheses mean in a function call? e.g. func(stuff)(stuff)?

后端 未结 3 1039
悲哀的现实
悲哀的现实 2020-12-30 01:19

Original title:

"Help me understand this weird Python idiom? sys.stdout = codecs.getwriter(\'utf-8\')(sys.stdout)"

相关标签:
3条回答
  • 2020-12-30 01:24

    Calling the wrapper function with the double parentheses of python flexibility .

    Example

    1- funcWrapper

    def funcwrapper(y):
        def abc(x):
            return x * y + 1
        return abc
    
    result = funcwrapper(3)(5)
    print(result)
    

    2- funcWrapper

    def xyz(z):
        return z + 1
    
    def funcwrapper(y):
        def abc(x):
            return x * y + 1
        return abc
    
    result = funcwrapper(3)(xyz(4))
    print(result)
    
    0 讨论(0)
  • 2020-12-30 01:27

    .getwriter returns a functioncallable object; you are merely calling it in the same line.

    Example:

    def returnFunction():
        def myFunction():
            print('hello!')
        return myFunction
    

    Demo:

    >>> returnFunction()()
    hello!
    

    You could have alternatively done:

    >>> result = returnFunction()
    >>> result()
    hello!
    

    Visualization:

    evaluation step 0: returnSomeFunction()()
    evaluation step 1: |<-somefunction>-->|()
    evaluation step 2: |<----result-------->|
    
    0 讨论(0)
  • 2020-12-30 01:28

    codecs.getwriter('utf-8') returns a class with StreamWriter behaviour and whose objects can be initialized with a stream.

    >>> codecs.getwriter('utf-8')
    <class encodings.utf_8.StreamWriter at 0x1004b28f0>
    

    Thus, you are doing something similar to:

    sys.stdout = StreamWriter(sys.stdout)
    
    0 讨论(0)
提交回复
热议问题