码迷,mamicode.com
首页 > 编程语言 > 详细

Python学习--方法的参数分类

时间:2018-02-02 23:16:37      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:实参   alc   方法   函数调用   from   war   不可变   sha   shanghai   

python中定义方法的参数主要有四种:

1、普通参数:

    普通参数非常普遍。

def f1(name, age):
    print(my name is %s, i am %s years old % (name, age))

    name和age就是两个普通的参数。在调用方法f1时,一定按照定义时的顺序依次传入name和age两个实参。

 f1(Andy, 21)

2、默认参数:

    默认参数是指在定义方法是给某个形式参数一个默认的值。

   

def f2(name, age, home=Shanghai):
    print(my name is %s, i am %s years old, i come from %s % (name, age, home))

    在调用该方法时,如果不传递实参,则该参数的实参是定义方法时指定的值,如果调用时传递了实参,则这个参数的值就是传递的值。

f2(an, 21)
>>>my name is an, i am 21 years old, i come from Shanghai
f2(‘an‘, 21, ‘Jiangxi‘)
>>>my name is an, i am 21 years old, i come from Jiangxi

      在定义这种方法时一定要把带有默认值的参数放在参数列表的最后。

3. 指定参数

    指定参数方法的定义和普通方法无异,在传递实参时不必非得按照定义的参数顺序传递,但是要指定传递的实参是给哪个形参的,其形式如下:

f1(age=21, name=an)
>>>my name is an, i am 21 years old

4. 可变参数

    可变参数的意义是传递的实参个数是没有个数限制的,0个到n个参数都可以。它的形式是:   

def calc(*args):
s = 0
for i in args:
s +=i
print(s)

    所以我们在调用的时候就可以传入0个或多个实参了,这些参数在函数调用的时候被组装为一个tuple。

calc(1, 2, 3)  

 如果事先拿到的数据就是一个list或者tuple怎么办呢?我们可以在list或者tuple的的实参前面加上*号把它们转化为可变参数:

num = (3,4,5)
calc(*num)
num2 = [4,5,7]
calc(*num2)

5. 关键字参数:

   关键字参数的参数前面有两个*号,可以传递0个或多个参数进去,这些参数在函数调用时被组装成一个dict。

   示例中我们可以只传递必须的函数name和age,打印出的kwargs是一个空的dict。

def student(name, age, **kwargs):
    print(name:,name,age:,age, other:, kwargs)


student(小米, 15)
>>>name: 小米 age: 15 other: {}

   传递多个关键字参数

 

student(小米, 15, city=Beijing, grade=3)


name: 小米 age: 15 other: {city: Beijing, grade: 3}

   如果事先有一个dict的话,我们可以类似与可变参数的传值方式传递实参:

kw = {city: Beijing, grade: 3}
student(‘小米‘, 15, **kw)

6.组合参数

   组合参数是以上5种形式的不同组合,定义的顺序是:必选参数,默认参数,可变参数和关键字参数。

小结:

在使用默认参数时,参数一定要用不可变对象,使用可变参数会出现错误。

*args传入的是一个tuple。

**kw 传入的是一个dict。

 

 

 

    

   

 

Python学习--方法的参数分类

标签:实参   alc   方法   函数调用   from   war   不可变   sha   shanghai   

原文地址:https://www.cnblogs.com/anmaozhang/p/8406305.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!