1. 程式人生 > >python 引數收集

python 引數收集

瞭解python的引數收集蠻久了,但一直不理解很多第三方庫原始碼中的使用,今天在讀flask原始碼的時候突然明白了。比如:
    def run(self, host='localhost', port=5000, **options):
        from werkzeug.serving import run_simple
        if 'debug' in options:
            self.debug = options.pop('debug')
        options.setdefault('use_reloader', self.debug)
options.setdefault('use_debugger', self.debug) return run_simple(host, port, self, **options)

在上面這段函式中,將**options收進來後最後又把 **options傳給了另外一個函式。其實 **options作為形參是把關鍵字引數打包成一個字典, 而作為實參傳給另外一個函式時是把字典裡的鍵值對又拆成了一個個關鍵字引數。例如:

def f(**context):
	return context.pop('a'),context.pop('b')

def render_template
(template_name, **context): print('template_name: {}'.format(template_name)) print('arguments: ', *(f(**context))) # 執行示例: >>> render_template('index', a=2, b=3) template_name: index arguments: 2 3