前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >每天 3 分钟,小闫带你学 Python(十九)

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

作者头像
小闫同学啊
发布2019-08-13 15:32:13
4930
发布2019-08-13 15:32:13
举报
文章被收录于专栏:小闫笔记小闫笔记

正文共:3674 字 7 图 预计阅读时间:10 分钟

每日分享

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 函数引入介绍

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

代码语言:javascript
复制
==========我的名片==========
姓名: 小闫同学   
QQ:535652072
手机号:1314xxxx225
学校地址:北京市海淀区清华大学
===========================

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

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

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

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

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

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

代码语言:javascript
复制
for i in range(1000):
    print_business_card()

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

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

1.2 函数的定义和调用

函数的基本格式如下:

代码语言:javascript
复制
def 函数名():
    执行的功能

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

那么如何调用呢?

代码语言:javascript
复制
函数名()

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

代码语言:javascript
复制
def 函数名():
    ...
    return "我是返回的内容"
    # 下方的内容不再执行
    ...

1.3 函数的文档说明

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

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

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

代码语言:javascript
复制
name = function()

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

代码语言:javascript
复制
help(function)

输出结果如下:

代码语言:javascript
复制
Help on function function in module __main__:

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

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

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

1.4 函数参数

1.4.1 定义带有参数的函数

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

代码语言:javascript
复制
def 函数名(参数名):
    使用参数进行相关操作

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

代码语言:javascript
复制
def function(name):
    print('欢迎 %s先生 莅临寒舍~' % name[0])

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

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

1.4.2 调用带有参数的函数

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

代码语言:javascript
复制
function('闫同学')

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

形参和实参的区别:

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

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

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

1.4.3 缺省参数

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

代码语言:javascript
复制
def 函数名(参数1,缺省参数=某个值):
    使用参数1和缺省参数执行特定的功能

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

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

代码语言:javascript
复制
>>> def function(name, age=20):
...     print('%s 的年龄为 %d' % (name, age))
...
>>> function('小闫同学')
小闫同学 的年龄为 20
>>> function('小闫同学', 18)
小闫同学 的年龄为 18

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

1.4.4 不定长参数

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

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

基本语法规则如下:

代码语言:javascript
复制
def functionname([formal_args,] *args, **kwargs):
   """函数_文档字符串"""
   function_suite
   return [expression]

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

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

举例说明:

代码语言:javascript
复制
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)

如上代码执行结果为:

代码语言:javascript
复制
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必须放在最后。

下方示例:

代码语言:javascript
复制
def example(a, *args, b=66, c=99, **kwargs):
    ......

2.作业

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

提示:函数传入参数

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

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

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

本文分享自 全栈技术精选 微信公众号,前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 每日分享
  • 前言
  • 学习目标
  • 1.函数
    • 1.1 函数引入介绍
      • 1.2 函数的定义和调用
        • 1.3 函数的文档说明
          • 1.4 函数参数
            • 1.4.1 定义带有参数的函数
            • 1.4.2 调用带有参数的函数
            • 1.4.3 缺省参数
            • 1.4.4 不定长参数
            • 1.4.5 注意
        • 2.作业
        领券
        问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档