Py学习  »  Python

python中函数的基础用法

生信修炼手册 • 3 年前 • 504 次点击  

欢迎关注”生信修炼手册”!


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

>>def hello():...     print("hello world!")...>>>>>> a =  hello()hello world!>>> type(a)<class 'NoneType'>

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

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

1.  按照位置

示意如下

>>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. 按照参数名

示意如下

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

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

1. 默认参数

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

>>> def print_info(name, age = 24):...     return(f'Name:{name} Age:{age}')

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

>>> def print_info(name = 'Andy', age):...     return(f'Name:{name} Age:{age}')...  File "", line 1SyntaxError: non-default argument follows default argument

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

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


2. 可变参数

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

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

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

# 参数friends就是可变参数#  函数内部,可变参数的值用元组来存储
>>> def print_info(name, age, *friends):...     print(f'Name:{name} Age:{age}')...     for people in friends:...         print(people)...

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

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

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


3. 关键字参数

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

>>> 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:24mother:Rosefather:Jack
# 关键字参数可以无限添加>>> print_info('Andy'24, mother = 'Rose', father ='Jack', uncle = "Tom")Name:Andy Age:24mother:Rosefather:Jackuncle:Tom

4. 命名关键字参数

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

>>> 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:24Mother:Rose Father:Jack

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

def print_info(name, age, *friends, mother, father)

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


·end·

—如果喜欢,快分享给你的朋友们吧—



原创不易,欢迎收藏,点赞,转发!生信知识浩瀚如海,在生信学习的道路上,让我们一起并肩作战!
本公众号深耕耘生信领域多年,具有丰富的数据分析经验,致力于提供真正有价值的数据分析服务,擅长个性化分析,欢迎有需要的老师和同学前来咨询。
  更多精彩



  写在最后


转发本文至朋友圈,后台私信截图即可加入生信交流群,和小伙伴一起学习交流。


扫描下方二维码,关注我们,解锁更多精彩内容!


一个只分享干货的

生信公众号


Python社区是高质量的Python/Django开发社区
本文地址:http://www.python88.com/topic/62749
 
504 次点击