社区所有版块导航
Python
python开源   Django   Python   DjangoApp   pycharm  
DATA
docker   Elasticsearch  
aigc
aigc   chatgpt  
WEB开发
linux   MongoDB   Redis   DATABASE   NGINX   其他Web框架   web工具   zookeeper   tornado   NoSql   Bootstrap   js   peewee   Git   bottle   IE   MQ   Jquery  
机器学习
机器学习算法  
Python88.com
反馈   公告   社区推广  
产品
短视频  
印度
印度  
Py学习  »  Python

python中函数的基础用法

生信修炼手册 • 5 年前 • 630 次点击  

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


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
 
630 次点击