Python参数类型

Python参数类型

位置参数

调用函数时根据函数定义的参数位置来传递参数

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('tanggu', 1)
关键字参数

用于函数调用,通过“键-值”形式加以指定,可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求

有位置参数时,位置参数必须在关键字参数前面,但关键字参数之间不存在先后顺序

# 以下是用关键字参数正确调用函数的实例
print_hello('tanggu', sex=1)
print_hello(1, name='tanggu')
print_hello(name='tanggu', sex=1)
print_hello(sex=1, name='tanggu')

# 以下是错误的调用方式
print_hello(name='tanggu', 1)
print_hello(sex=1, 'tanggu')
默认参数

用于定义函数,为参数提供默认值,调用函数时可传可不传该参数

注:所有位置参数必须出现在默认参数前,包括函数定义和调用

默认参数必须指向不变对象

# 正确的默认参数定义方式--> 位置参数在前,默认参数在后
def print_hello(name, sex=1):
    ....

# 错误的定义方式
def print_hello(sex=1, name):
    ....

# 调用时不传sex的值,则使用默认值1
print_hello('tanggu')

# 调用时传入sex的值,并指定为2
print_hello('tanggu', 2)
可变参数

定义函数时,不确定调用时会传递几个参数(也可不传参),此时使用包裹(packing)位置函数或包裹关键字参数

  1. 包裹位置传递

    def func(*args):
        ....
    
    
    func()
    func(a)
    func(a, b, c)
    

    所有传进的参数都会被args变量收集,会根据传进参数的位置合并为一个元组(tuple),args是元组类型

  2. 包裹关键字传递

    def func(**kargs):
        ....
    
    func(a=1)
    func(a=1, b=2, c=3)
    
解包裹参数

*和**,也可以在函数调用时使用,称为解包裹(unpacking)

传递元组时,让元组的每一个元素对应一个位置参数(list也可以传递)

def print_hello(name, sex):
    print name, sex

args = ('tanggu', '男')
print_hello(*args)
# tanggu 男

在传递词典字典时,让词典的每个键值对作为一个关键字参数传递给函数

def print_hello(kargs):
    print kargs

kargs = {'name': 'tanggu', 'sex', u'男'}
print_hello(**kargs)
# {'name': 'tanggu', 'sex', u'男'}

几种参数混合使用时,基本原则是:

先位置参数,默认参数,包裹位置,包裹关键字(定义和调用都应遵循)

def func(name, age, sex=1, *args, **kargs):
    print name, age, sex, args, kargs


func('tanggu', 25, 2, 'music', 'sport', class=2)
# tanggu 25 1 ('music', 'sport') {'class'=2}

args和kwargs这个可以自己定义,关键在于*和**

*args表示任意多个无名参数,是一个tuple

**kwargs表示任意多个关键字参数,是一个dict

同时使用时,必须要使*args在**kwargs之前

*args的本质就是将标准调用剩下的值集中转变为元组

用**kwargs创建字典

def kw_dict(**kwargs):
	return kwargs

print kw_dict(a=1,b=2,c=3) == {'a':1, 'b':2, 'c':3}

混合使用

def foo(x,*args,a=4,**kwargs):  #使用默认参数时,注意默认参数的位置要在args之后kwargs之前
    print(x)
    print(a)
    print(args)
    print(kwargs)

foo(1,5,6,7,8,y=2,z=3)  #调用函数,不修改默认参数
1   #x的值
4   #a的值
(5, 6, 7, 8)   #*args的值
{'y': 2, 'z': 3}    ##kwargs的值
def foo(x,a=4,*args,**kwargs):  ##注意:当需要修改默认参数时,要调整默认参数的位置,要放在args之前即可,但不可放在开头。
    print(x)
    print(a)
    print(args)
    print(kwargs)

foo(1,9,5,6,7,8,y=2,z=3)    #调用函数,修改默认参数a为9
1   #x的值
9   #被修改后a的值
(5, 6, 7, 8)    #args的值
{'y': 2, 'z': 3}    #kwargs的值
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值