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

python中函数的基础用法

作者头像
生信修炼手册
发布2020-05-12 09:22:48
5870
发布2020-05-12 09:22:48
举报
文章被收录于专栏:生信修炼手册

python中的内置函数提供了基础功能,在实际开发中,我们需要将这些基础功能进行搭配组合,来有效解决我们的问题。如何将我们自己构建的代码作为一个可复用的工具,最基本的方法就是写成函数。通过函数可以减少代码冗余,提高编码效率。在python中函数的基本定义如下

代码语言:javascript
复制
>>> def hello():
...     print("hello world!")
...
>>>
>>> a =  hello()
hello world!
>>> type(a)
<class 'NoneType'>

def关键词来声明一个函数,函数有几个构成元素,函数名称,比如这里的hello;参数列表,圆括号里的内容,上述代码较为简单,不需要传入参数,所以圆括号里为空; 返回值,可以看到,没有显示声明的情况下,返回值为None。需要注意,在python中,函数在调用前必须先声明,这一点和perl不同。

通过函数名称加参数的形式,可以调用函数。在传递参数时,有以下两种方式

1. 按照位置

示意如下

代码语言:javascript
复制
>>> def print_info(name, age):
...     return(f'Name:{name} Age:{age}')
...

# 按照位置传参
# 第一个值赋给参数name
# 第二个值赋给参数age
>>> print_info('Andy', 24)
'Name:Andy Age:24'
>>> print_info(24, 'Andy')
'Name:24 Age:Andy'

位置传参的好处是我们不用写参数名称了,比较省事,但是局限就在于,必须按照参数定义的顺序依次传入,不可乱序。

2. 按照参数名

示意如下

代码语言:javascript
复制
>>> print_info(age = 24,  name = 'Andy')
'Name:Andy Age:24'

>>>print_info(name = 'Andy',age = 24)
'Name:Andy Age:24'

通过变量名传参时,程序会按照变量名赋值给指定参数,不用担心顺序的问题。以上只是最基本的示例,关于函数的参数,还有以下几种进阶用法

1. 默认参数

在函数定义时,可以给参数赋值,这个值就是参数的默认值,写法如下

代码语言:javascript
复制
>>> def print_info(name, age = 24):
...     return(f'Name:{name} Age:{age}')

需要注意的是,拥有默认值的参数必须位于没有默认值的参数之后,如果位于之前,会报错

代码语言:javascript
复制
>>> def print_info(name = 'Andy', age):
...     return(f'Name:{name} Age:{age}')
...
  File "<stdin>", line 1
SyntaxError: non-default argument follows default argument

默认参数的好处是显而易见的,在调用时,如果你需要传入的值和默认值相同,就可以省略不用写,如果不同,再传入指定值也可以,示意如下

代码语言:javascript
复制
>>> print_info('Andy')
'Name:Andy Age:24'

>>> print_info('Andy', 25)
'Name:Andy Age:25'

2. 可变参数

print作为学习python接触的第一个函数,可以传入任意个参数,示意如下

代码语言:javascript
复制
>>> print(1,2)
1 2

>>> print(1,2,3)
1 2 3

>>> print(1,2,3,4)
1 2 3 4

实现这个方式的技巧就是可变参数,可变参数通过一个`*`星号加参数名的方式进行定义,写法如下

代码语言:javascript
复制
# 参数friends就是可变参数
#  函数内部,可变参数的值用元组来存储

>>> def print_info(name, age, *friends):
...     print(f'Name:{name} Age:{age}')
...     for people in friends:
...         print(people)
...

在调用时,可以传入任意多个值

代码语言:javascript
复制
>>> print_info('Andy', 24, 'Tom', 'Jack')
Name:Andy Age:24
Tom
Jack

>>> print_info('Andy', 24, 'Tom', 'Jack', 'Rose')
Name:Andy Age:24
Tom
Jack
Rose

注意,可变参数的名称只有函数定义时有用,在函数调用时,不可以加参数名称。

3. 关键字参数

可变参数的值为列表,而关键字参数的值为字典,通过两个`*`星号加参数名的形式进行定义,写法如下

代码语言:javascript
复制
>>> def print_info(name, age, **friends):
...     print(f'Name:{name} Age:{age}')
...     for k,v in friends.items():
...         print(f'{k}:{v}')

# 关键字参数以 key = value的形式赋值
# 注意key作为参数名称,不用加引号
>>> print_info('Andy', 24, mother = 'Rose', father ='Jack')
Name:Andy Age:24
mother:Rose
father:Jack

# 关键字参数可以无限添加
>>> print_info('Andy', 24, mother = 'Rose', father ='Jack', uncle = "Tom")
Name:Andy Age:24
mother:Rose
father:Jack
uncle:Tom

4. 命名关键字参数

关键字参数功能强大,但是太过于自由,可以传入任意的数据,而命名关键字参数是对关键字参数的限定,在函数定义时,限定好允许传入的参数名, 用`*`星号分隔,在星号的后面定义命名关键字参数,直接写允许接受的参数名称即可,写法如下

代码语言:javascript
复制
>>> def print_info(name, age, *, mother, father):
...     print(f'Name:{name} Age:{age}')
...     print(f'Mother:{mother} Father:{father}')
...
#命名关键子参数调用时必须写参数名称
>>> print_info('Andy', 24, mother = 'Rose', father = 'Jack')
Name:Andy Age:24
Mother:Rose Father:Jack

在函数中已经有一个可变参数的情况下,命名关键字参数的`*`星号可以省略

代码语言:javascript
复制
def print_info(name, age, *friends, mother, father)

上述各种形式的参数可以进行组合,但是组合时需要注意顺序,从头开始,依次为位置参数,默认参数,可变参数,命名关键字参数, 关键字参数。

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

本文分享自 生信修炼手册 微信公众号,前往查看

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

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

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