前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >python函数的参数

python函数的参数

作者头像
py3study
发布2020-01-06 15:17:35
8610
发布2020-01-06 15:17:35
举报
文章被收录于专栏:python3python3

书写一个函数

def  power(x):

    return x * x

对于power(x)函数,参数x就是一个位置参数,当我们调用power(x)函数时,必须传入有且仅有一个参数x

power(5)

power()也是内置函数,用法power(x,n)n为指数,即多少个x相乘

默认参数

在定义函数时可以给定一个默认参数

def  enroll(name,gender,age=6,city='beijing')

    print('name:',name)

    print('age:',age)

当调用函数enroll时,如果不传入age值,将使用默认值6

可变参数

python中,还可以定义可变参数

方式一,讲传入的参数写入一个列表,作为一个参数

方式二

def  calc(*numbers):

    sum = 0

    for n in numbers:

        sum=sum + n * n

    return sum

定义可变参数和定义一个list或tuple参数相比,仅仅在参数前面加了一个*号,在函数内部,参数numbers接受到的是一个tuple,因此函数代码完全不变,但是调用函数时,可传入任意个参数,包括0个参数

calc(1,2)=5

calc()=0

如果要传入的参数是一个list或tuple,调用写法

nums=[1,2,3]

calc(nums[0],nums[1],nums[2])=14

当然上面的写法可行,但是太繁琐,所以python允许你在list或tuple前面加一个*号,把list或tuple元素变成可变参数传入

nums=[1,2,3]

calc(*nums)=14

*nums表示把nums这个list所有元素作为可变参数传进去,这种写法相当有用,而且很常见

关键字参数

可变参数允许你传入0个或任意个参数,这些可变参数在函数调用时自动组装为一个tuple.而关键字参数允许你传入0个或任意个包含参数名的参数,这些关键字参数在函数内部自动组装为一个dict,请看示例

def   person(name,age,**kw)

    print('name:',name,'age:',age,'other:',kw)

函数person()除了必选参数name和age外,还接受关键字kw,在调用函数时,可以只传入必选参数

person('jack',30)

也可以传入任意个数的关键字参数

person('jack',30,city='beijing')=name:jack   age:30  other: {'city':‘beijing'}

person('jack',30,city='beijing',job='engineer')=name:jack   age:30  other: {'city':‘beijing','job':'engineer'}

字典dict形式传入

ext={'city':‘beijing','job':'engineer'}

person('jack',30,**ext)=name:jack   age:30  other: {'city':‘beijing','job':'engineer'}

代码语言:javascript
复制
命名关键字参数、

对于关键参数,函数的调用者可以传入任意不受限制的关键字参数,至于传入哪些,就需要在函数内部通过kw检查

仍以person()函数讲解,我们检查是否有city和job

代码语言:javascript
复制
(age**kw):
    kw:
        kw:
        (nameagekw)
代码语言:javascript
复制
person('jack',24,city='beijing',addr='chongqing',zipcode=123456)

限制关键字只接收city和job,写法如下(特殊分割符*)

代码语言:javascript
复制
(nameage*cityjob):
    (nameagecity job)
person1(==)

非关键字报错

blob.png
blob.png

如果函数定义中有了一个可变参数,后面跟着的命名关键字参数就不再需要一个特殊分隔符*了

代码语言:javascript
复制
(nameage*argscityjob):
    (nameageargscity job)

命名关键字参数必须传入参数名,这和位置参数不同。如果没有传入参数名,调用讲报错

blob.png
blob.png

正确方式

blob.png
blob.png

参数组合

在python定义函数,可以用必选参数,默认参数,可变参数,关键字参数和命名关键字参数,这5中参数都可以组合使用,但是请注意,参数定义顺序必须是必选参数,默认参数,可变参数,命名关键字参数和关键字参数。

代码语言:javascript
复制
(abc=*args**kw):
    (abcargskw)

(abc=*d**kw):
    (abcdkw)

但是在调用时,python解释器自动按照参数位置和参数名把对应参数传入

blob.png
blob.png

最神奇的是通过tuple和dict,也可以调用上述函数

blob.png
blob.png

所以,对于任意参数,都可以通过类func(*args,**kw)的形式调用它,无论它的参数是如何定义的

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2019-09-21 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档