每天 3 分钟,小闫带你学 Python(十九)

简介: 每天 3 分钟,小闫带你学 Python(十九)

每日分享

Nothing can dim the light which shines from within.

从内心发出的光,没什么能使它黯淡。

小闫语录:

心若向阳,处处阳光,加油,阳光少年。


前言

昨天的文章『每天 3 分钟,小闫带你学 Python(十八)』讲解了 Python 中的一些公共方法:

1.运算符 +/*/in/not in

2.Python 内置函数: len/max/min/del

3.多维列表/元组的访问

今天继续讲解新知识 ~

学习目标

1.了解什么是函数,为什么使用函数。

2.熟悉函数如何定义与调用。

3.了解如何添加函数的文档说明。

4.了解函数的参数以及返回值。

1.函数

1.1 函数引入介绍

今天开始进入全新的章节 -- 函数。先举一个小栗子,如果要写一段代码打印自己的名片:

  1. ==========我的名片==========
  2. 姓名:小闫同学  
  3. QQ:535652072
  4. 手机号:1314xxxx225
  5. 学校地址:北京市海淀区清华大学
  6. ===========================

那么我们需要像下面这样写很多输出语句:

print('==========我的名片==========')
print('姓名: 小闫同学')
print('QQ:535652072')
print('手机号:1314xxxx225')
print('学校地址:北京市海淀区清华大学')
print('===========================')

目前未发现问题,但现在有一个需求:多次打印此名片。怎么办?你可能会说:这个好办,复制粘贴。如果需要打印 1000 次呢?累死你!函数就可以完美的解决此问题。

def print_business_card():
    print('==========我的名片==========')
    print('姓名: 小闫同学')
    print('QQ:535652072')
    print('手机号:1314xxxx225')
    print('学校地址:北京市海淀区清华大学')
    print('===========================')

先不要考虑如何写函数,只需要了解它就是函数,下面会继续讲到。

我们打印 1000 次可以进行如下操作:

for i in range(1000):
    print_business_card()

两行代码解决了你复制粘贴 1000 次的问题。

函数便是相关功能的封装,可以提高代码的复用性

1.2 函数的定义和调用

函数的基本格式如下:

  1. def函数名():
  2.    执行的功能

注意函数内部代码(执行的功能)需要缩进,保证其在函数内部。

那么如何调用呢?

  1. 函数名()

注意函数名后要加小括号进行调用。每次调用,函数内部的代码都会从上往下依次执行,直到执行完毕或者遇到 return(如果函数有返回值, return可以返回单词后方的内容, return 下方的代码不再执行)。

def 函数名():
    ...
    return "我是返回的内容"
    # 下方的内容不再执行
    ...

1.3 函数的文档说明

函数的文档说明在函数名下方,执行代码上方位置,是一个字符串。它的作用便是让人们更好的了解此函数的功能。使用 help() 函数查看函数时,会返回文档说明。先来看文档说明的形式:

def function():
    """
    我是说明文档,此函数为示例内容
    :return: 返回自定义变量 name
    """
    name = 'EthanYan'
    return 'EthanYan'

上方便是一个简单的函数,有说明文档,也有返回值。调用函数时我们需要使用变量进行接收返回值:

  1. name = function()

如果查看说明文档,可以使用函数 help (此函数是内置函数,不需要导入任何模块,直接使用即可):

  1. help(function)

输出结果如下:

Help on function function in module __main__:
function()
    我是说明文档,此函数为示例内容
    :return: 返回自定义变量 name

:return: 代表返回值说明,可有可无,视情况而定。

Tip:在 PyCharm 中,有个快捷操作,即在函数内部第一行(缩进后)输入三引号,然后在三引号中间按回车键即可快速生成说明文档格式。如下图:

1.4 函数参数

1.4.1 定义带有参数的函数

带有参数的函数即定义函数时,在函数后面的小括号中传入参数名称,此参数(变量)可以在函数内部进行使用。

  1. def函数名(参数名):
  2.    使用参数进行相关操作

之前定义的函数只能输出相同的结果,比较死板。现在有一个需求:封装一个函数,实现输出欢迎语句的功能。姓名需要在调用的时候才能确定,该如何设计?可以使用带有参数的函数,如下:

def function(name):
    print('欢迎 %s先生 莅临寒舍~' % name[0])

函数括号内的变量称为 形参 。在函数内部可以使用传入的参数(变量),进行特定的操作。

带有参数的函数具有灵活性、通用性。可以大大提高开发效率,减少重复代码。

1.4.2 调用带有参数的函数

调用函数 function 时,可以通过下面的方式:

  1. function('闫同学')

括号内传入要填的参数即可。在调用时我们传入的参数称为 实参

形参和实参的区别:

形参是定义函数时传入的参数,因为此参数不确定内容,只是一个形式,所以叫做形参

实参是调用函数时传入的参数,因为传入的参数内容确定,是实际数据,所以叫做实参

注意:定义的函数有几个形参,我们调用函数时,就需要传入几个实参。

1.4.3 缺省参数

缺省参数就是有可能在调用函数时缺少的参数。形式如下:

  1. def函数名(参数1,缺省参数=某个值):
  2.    使用参数1和缺省参数执行特定的功能

根据缺省参数的形式 缺省参数=某个值 可以明显猜出其实缺省参数就是设置了默认值的参数(形参)

比如一个函数中需要传入年龄和姓名,根据实际情况,大部分人员都是 20 岁,为了减少输入,可以将其设置为缺省参数(即设置默认值)。

>>> def function(name, age=20):
...     print('%s 的年龄为 %d' % (name, age))
...
>>> function('小闫同学')
小闫同学 的年龄为 20
>>> function('小闫同学', 18)
小闫同学 的年龄为 18

上述代码可以得知,设置缺省参数后,如果不传入缺省参数的值,那么使用默认值;如果传入缺省参数的值,则会使用传入的值。

1.4.4 不定长参数

顾名思义,不定长参数指不确定传入参数的个数

有时可能需要一个函数能处理比当初声明时更多的参数, 这些参数叫做不定长参数,声明时不会命名。

基本语法规则如下:

def functionname([formal_args,] *args, **kwargs):
   """函数_文档字符串"""
   function_suite
   return [expression]

1.加了星号( *)的变量 args 会存放所有未命名的变量参数,args 为元组

2.而加 ** 的变量 kwargs 会存放命名参数,即形如 key=value 的参数, kwargs 为字典。

举例说明:

def function(a, *args, **kwargs):
    """可变参数演示示例"""
    print("a =%d" % a)
    print("args:", end=' ')
    print(args)
    print("kwargs:")
    for key, value in kwargs.items():
        print("key=%s" % key)
        print("value=%s" % value)
function(1,2,3,4,name='Ethan',age=19)

如上代码执行结果为:

a =1
args: (2, 3, 4)
kwargs:
key=name
value=Ethan
key=age
value=19

调用函数时,传入 n 个参数,这些参数会根据形参(定义函数时括号内的参数)进行分配。第一个参数给了已经命名的形参 a,后面的参数分配给了不定长参数。未命名的实参组成一个元组赋值给 args,而命名的键值对形式参数则赋值给 kwargs

此处结合示例多思考一下。

规则:调用函数时传入的实参按顺序优先分配给命名形参,其余未命名参数组成元组分配给 args,键值对则分配给 kwargs

1.4.5 注意

1.缺省参数必须放在 *args 后面。

2.如果有 **kwargs 的话, **kwargs必须放在最后。

下方示例:

  1. def example(a,*args, b=66, c=99,**kwargs):
  2.    ......

2.作业

1.自定义函数,执行打印名片的功能(要求可以根据传入的名字和公司等信息自动生成指定格式的名片)。

提示:函数传入参数

2.给自定义的函数添加文档说明。

3.发散思维,利用代码练习缺省参数和不定长参数,将疑惑的地方多进行尝试,直至理解。

相关文章
|
数据处理 Python
每天 3 分钟,小闫带你学 Python(二十一)
每天 3 分钟,小闫带你学 Python(二十一)
|
网络架构 索引 Python
每天 3 分钟,小闫带你学 Python(十二)
每天 3 分钟,小闫带你学 Python(十二)
|
索引 Python
每天 3 分钟,小闫带你学 Python(十一)
每天 3 分钟,小闫带你学 Python(十一)
|
存储 iOS开发 Python
每天 3 分钟,小闫带你学 Python(二十二)
每天 3 分钟,小闫带你学 Python(二十二)
|
索引 Python
​每天 3 分钟,小闫带你学 Python(十七)
​每天 3 分钟,小闫带你学 Python(十七)
|
存储 索引 Python
每天 3 分钟,小闫带你学 Python(九)
每天 3 分钟,小闫带你学 Python(九)
每天 3 分钟,小闫带你学 Python(二十六)
每天 3 分钟,小闫带你学 Python(二十六)
|
程序员 Python
每天 3 分钟,小闫带你学 Python(二十五)
每天 3 分钟,小闫带你学 Python(二十五)
|
Unix Linux iOS开发
每天 3 分钟,小闫带你学 Python(二十四)
每天 3 分钟,小闫带你学 Python(二十四)
每天 3 分钟,小闫带你学 Python(二十三)
每天 3 分钟,小闫带你学 Python(二十三)