前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谈一谈|如何利用函数的各种参数

谈一谈|如何利用函数的各种参数

作者头像
算法与编程之美
发布2020-07-14 16:05:58
3730
发布2020-07-14 16:05:58
举报

问题描述

Python的函数定义非常简单,但灵活度却非常大。除了正常定义的必选参数外,还可以使用默认参数、可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以简化调用者的代码。

解决方案

定义函数的时候,把参数的名字和位置确定下来,函数的接口定义就完成了。对于函数的调用者来说,只需要知道如何传递正确的参数,以及函数将返回什么样的值就够了,函数内部的复杂逻辑被封装起来,调用者无需了解。

使用方法

位置参数:

可以先写一个计算平方的函数

代码语言:javascript
复制
def count(x):

   return x**2

对于count(x)函数,参数x就是一个位置参数,当调用count函数时,必须传入有且只有一个参数x:

代码语言:javascript
复制

Print(count(5))

但当需要计算x的多次方时就需要再加一个参数

代码语言:javascript
复制

def count(x,n):

s=1

while n>o:

    n=n-1

    s=s*x

return s

修改后的count(x, n)函数有两个参数:x和n,这两个参数都是位置参数,调用函数时,传入的两个值按照位置顺序依次赋给参数x和n。例如计算5的10次方。

代码语言:javascript
复制

Print(count(5,10))

默认参数:

由于经常计算x的平方,所以,完全还可以把第二个参数n设为默认值。

代码语言:javascript
复制

def count(x,n=2):

s=1

while n>0:

    n=n-1

    s=s*x

return s

print(count(5))

这样,当调用count(5)时,相当于调用count(5,2),而对于n>2的其他情况,就必须明确地传入n,比如count(5,3)。但必选参数在前,默认参数在后,且默认参数必须指向不定变量。

可变参数:

顾名思义,可变参数就是传入的参数个数是可变的,可以是1个、2个到任意个,还可以是0个。要定义出这个函数,必须确定输入的参数。由于参数个数不确定,首先想到可以把a,b,c……作为一个list或tuple传进来,这样,函数可以定义如下:

代码语言:javascript
复制

def calc(n):

sum=0

for i in n:

    sum=sum+n*n

return sum

但是调用时,需要先组装出一个list或tuple:

关键字参数:

关键字参数允许你传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict。

代码语言:javascript
复制

def person(name, age, **kw):     

print(‘name:’,name,‘age:’,age,’other:’kw)

函数person除了必选参数name和age外,还接受关键字参数kw。在调用该函数时,可以只传入必选参数,也可以传入任意个关键字参数:

代码语言:javascript
复制

>>> person('Bob', 35, city='Beijing')

name: Bob age: 35 other: {'city': 'Beijing'}

>>> person('Adam', 45, gender='M', job='Engineer')

name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'}

和关键字参数**kw不同,命名关键字参数需要一个特殊分隔符*,*后面的参数被视为命名关键字参数。

代码语言:javascript
复制
def person(name,age *,city,job):

    print(name.age,city,job)

结语

在Python中定义函数,可以用必选参数、默认参数、可变参数、关键字参数和命名关键字参数,这5种参数都可以组合使用。但是请注意,参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。虽然可以组合多达5种参数,但不要同时使用太多的组合,否则函数接口的可理解性很差。

END

主 编 | 王文星

责 编 | 李 靖

where2go 团队

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-07-09,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 算法与编程之美 微信公众号,前往查看

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

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

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