Python的位置参数、默认参数、关键字参数、可变参数区别

来自linux中国网wiki
跳到导航 跳到搜索

位置参数 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

必选参数 可选参数


Python可变长参数*args **kwargs