Python的位置参数、默认参数、关键字参数、可变参数区别
docker>Evan2018年3月26日 (一) 02:41的版本 (→other)
位置参数 positional argument
调用函数时根据函数定义的参数位置来传递参数。 #直接运行 #!/usr/bin/env python # coding=utf-8 def print_hello(name, sex): sex_dict = {1: u'先生', 2: u'女士'} print 'hello %s %s, welcome to python world!' %(name, sex_dict.get(sex, u'先生')) # 两个参数的顺序必须一一对应,且少一个参数都不可以 # print_hello('evan', 1) #在脚本里面执行 如果这个function写在脚本里面执行呢 其实是什么都没有输出的,必定要使用return哦 哈哈 #!/usr/bin/python #-*- coding:utf-8 -*- def printhe(name,sex): sex_dict = {1:u'先生',2:u'女士'} #return print 'hello %s %s, welcome to python world!' %(name,sex_dict.get(sex,u'先生')) mylove= 'hello'+' '+name + '' + sex_dict.get(sex,u'先生')+','+'welcome to python world!' return mylove print printhe('evan',1)
关键字参数keyword argument
用于函数调用,通过“键-值”形式加以指定。可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求。 # 以下是用关键字参数正确调用函数的实例 # print_hello('tanggu', sex=1) # print_hello(name='tanggu', sex=1) # print_hello(sex=1, name='tanggu') # 以下是错误的调用方式 # print_hello(1, name='tanggu') # print_hello(name='tanggu', 1) # print_hello(sex=1, 'tanggu') 通过上面的代码,我们可以发现:有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序的 当最后一个形参以**name形式出现时,它接收一个字典(见映射类型 — 字典),该字典包含了所有未出现在形式参数列表中的关键字参数。它还可能与*name形式的参数(在下一小节中所述)组合使用,*name接收一个包含所有没有出现在形式参数列表中的位置参数元组。(*name必须出现在**name之前。)例如,如果我们定义这样的函数:
默认参数
用于定义函数,为参数提供默认值,调用函数时可传可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用) # 正确的默认参数定义方式--> 位置参数在前,默认参数在后 def print_hello(name, sex=1): .... # 错误的定义方式 def print_hello(sex=1, name): .... # 调用时不传sex的值,则使用默认值1 # print_hello('tanggu') # 调用时传入sex的值,并指定为2 # print_hello('tanggu', 2)
区别
关键字参数keyword argument 用于函数调用
默认参数 用于定义函数
other
必选参数 可选参数