函数是 Python 程序的重要组成单位,一个 Python 程序可以由很多个函数组成。前面我们己经用过大量函数,如 len()、max() 等,使用函数是真正开始编程的第一步。

比如在程序中定义了一段代码,这段代码用于实现一个特定的功能。问题来了,如果下次需要实现同样的功能,难道要把前面定义的代码复制一次?如果这样做实在太傻了,这意味着每次当程序需要实现该功能时,都要将前面定义的代码复制一次。

正确的做法是,将实现特定功能的代码定义成一个函数,每次当程序需要实现该功能时,只要执行(调用)该函数即可。

通俗来讲,所谓函数,就是指为一段实现特定功能的代码“取”一个名字,以后即可通过该名字来执行(调用)该函数。

通常,函数可以接收零个或多个参数,也可以返回零个或多个值。从函数使用者的角度来看,函数就像一个“黑匣子”,程序将零个或多个参数传入这个“黑匣子”,该“黑匣子”经过一番计算即可返回零个或多个值。

对于“黑匣子”的内部细节(就是函数的内部实现细节),函数的使用者并不需要关心。就像前面在调用 len()、max()、min() 等函数时,我们只负责传入参数、接收返回值,至于函数内部的实现细节,我们并不关心。

如图 1 所示为函数调用示意图:

图 1 函数调用示意图

从函数定义者(实现函数的人)的角度来看,其至少需要想清楚以下 3 点:

函数需要几个关键的需要动态变化的数据,这些数据应该被定义成函数的参数。

函数需要传出几个重要的数据(就是调用该函数的人希望得到的数据),这些数据应该被定义成返回值。

函数的内部实现过程。

不难看出,定义函数比调用函数要难得多,而本节正是教你如何定义函数的。不过不用担心,对于实现过程复杂的函数,定义本身就很费力,有时候实现不出来也完全正常。

函数定义和调用

在使用函数之前必须先定义函数,定义函数的语法格式如下:

def 函数名(形参列表):

//由零条到多条可执行语句组成的函数

[return [返回值]]

Python 声明函数必须使用 def 关键字,对函数语法格式的详细说明如下:

函数名:从语法角度来看,函数名只要是一个合法的标识符即可;从程序的可读性角度来看,函数名应该由一个或多个有意义的单词连缀而成,每个单词的字母全部小写,单词与单词之间使用下画线分隔。

形参列表:用于定义该函数可以接收的参数。形参列表由多个形参名组成,多个形参名之间以英文逗号(,)隔开。一旦在定义函数时指定了形参列表,调用该函数时就必须传入到应的参数值,也就是说,谁调用函数谁负责为形参赋值。

在函数体中多条可执行语句之间有严格的执行顺序,排在函数体前面的语句总是先执行,排在函数体后面的语句总是后执行。

下面程序定义了两个函数,井在程序中调用它们:

# 定义一个函数,声明2个形参

def my_max(x, y) :

# 定义一个变量z,该变量等于x、y中较大的值

z = x if x > y else y

# 返回变量z的值

return z

# 定义一个函数,声明一个形参

def say_hi(name) :

print("===正在执行say_hi()函数===")

return name + ",您好!"

a = 6

b = 9

# 调用my_max()函数,将函数返回值赋值给result变量

result = my_max(a , b) # ①

print("result:", result)

# 调用say_hi()函数,直接输出函数的返回值

print(say_hi("Linux公社 www.linuxidc.com")) # ②

result: 9

===正在执行say_hi()函数===

Linux公社 www.linuxidc.com,您好!

[Finished in 0.1s]

2.定义函数的三种类型

(1)有参函数:参数是函数体代码用来接收外部传入数据的。

inp_name='linuxidc.com'

inp_paws=123

def interactive():

name=input('请输入你的用户名:')

paws=input('请输入你的密码:')

return name,paws

def auth(name,paws):

if inp_name == name and inp_paws == paws:

print('登录成功')

res=interactive()

x=res[0]

y=res[1]

print(x)

print(y)

执行代码:

linuxidc@linuxidc:~/linuxidc.com$ python3 www.linuxidc.com.py

输出以下:

请输入你的用户名:linuxidc.com

请输入你的密码:123

linuxidc.com

123

(2)无参函数:当函数代码体逻辑不需要函数的调用者参入值的情况下,定义时无参,意味着调用者用时也无需传入数据。

def line(x,y):

if x > y:

print(x)

else:

print(y)

line(10,90)

***以上输出:

90

(3)空函数:函数体为pass.

def auth():

"""

这是一个认证功能

:return:

"""

pass

def put():

"""

上传功能

:return:

"""

pass

def get():

"""

下在功能

:return:

"""

pass

def ls():

"""

list contents

:return:

"""

pass

三、调用函数

定义:函数的使用必须先定义收调用的原则。

2.调用函数:

调用函数必须先定义,再调用。

函数名加()就是在调用函数

# print(print_sym)

# print_sym('#',30)

# print_msg('hello linuxidc')

# print_sym('#',30)

注意:没事先定义而直接调用,就相当于引用了一个存在的变量名。

(1)定义阶段:在定义阶段,不执行函数体代码(只检测语法)

(2)调用阶段:根据函数找到函数的内存地址,然后执行函数体代码

# 定义阶段:

def lol():

print('你好www.linuxidc.com')

blo()

def blo():

print('Linux公社')

#调用阶段

lol()

以上输出:

你好www.linuxidc.com

Linux公社

四、返回值

定义:当函数体代码运行结束后,需要有一个返回的结果给调用者。

返回值有三种形式:

1.没有reture,返回None

def ppp():

pass

ren=ppp()

print(ren)

***以上输出

None

2.retur后跟一个值。

def ppp():

return 9

ren=ppp()

print(ren)

***以上输出

9

3.ruture可以以逗号分隔,返回多个值,会返回一个元组给调用者。

def ppp():

return 1,5,6,9,[5,6,9,],{9:6}

ren=ppp()

print(ren)

***以上输出

(1, 5, 6, 9, [5, 6, 9], {9: 6})

注意:

1.retur返回的值,没有类型限制。

2.函数内可以写多个return,但执行一次,函数会立刻结束,并把return后的值作为本次调用的返回值。

def ppp():

print('你好linuxidc.com')

return 1

print('你好www.linuxidc.com')

return 2

print('linuxidc')

return 3

ren=ppp()

print(ren)

***以上输出

你好linuxidc.com

1

[Finished in 0.0s]

python函数定义的语法形式_Python函数(函数定义、函数调用)使用详解相关推荐

  1. python函数定义的语法形式_Python 函数(一) 基本语法

    ​Python 函数 python中可以将某些具备一定功能的代码写成一个函数,函数可以在一定程度上减少代码的冗余,节约书写代码的时间. Python中定义好的函数是可以通过函数名称调取并重复使用的模块 ...

  2. python中定义元组的符号_python中得元组和字符串详解,有这么一篇文章就够了

    本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理 以下文章来源于腾讯云 作者:咸鱼学Python ( 想要学习Python?Pyth ...

  3. python标准类型内建模块_Python内建模块struct实例详解

    本文研究的主要是Python内建模块struct的相关内容,具体如下. Python中变量的类型只有列表.元祖.字典.集合等高级抽象类型,并没有像c中定义了位.字节.整型等底层初级类型.因为Pytho ...

  4. python中for循环的代码_Python for循环及基础用法详解

    Python 中的循环语句有 2 种,分别是 while 循环和 for 循环,前面章节已经对 while 做了详细的讲解,本节给大家介绍 for 循环,它常用于遍历字符串.列表.元组.字典.集合等序 ...

  5. python元组元素的提取比_Python 元组数据类型(tuple)详解 [访问元组元素][修改元组元素][删除元组][学习 Python 必备基础知识][看此一篇就够了]...

    您的"关注"和"点赞",是信任,是认可,是支持,是动力...... 如意见相佐,可留言. 本人必将竭尽全力试图做到准确和全面,终其一生进行修改补充更新. 1 元 ...

  6. python爬虫多线程是什么意思_python爬虫中多线程的使用详解

    queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...

  7. python常用的装饰器库_Python中的各种装饰器详解

    Python装饰器,分两部分,一是装饰器本身的定义,一是被装饰器对象的定义. 一.函数式装饰器:装饰器本身是一个函数. 1.装饰函数:被装饰对象是一个函数 [1]装饰器无参数: a.被装饰对象无参数: ...

  8. python简单计算器综合实验报告_Python实现的简单计算器功能详解

    本文实例讲述了Python实现的简单计算器功能.分享给大家供大家参考,具体如下: 使用python编写一款简易的计算器 计算器效果图 首先搭建计算器的面板: 计算器面板结构 建造一个继承于wx.Fra ...

  9. python脚本运行时网络异常_Python中异常重试的解决方案详解

    前言 大家在做数据抓取的时候,经常遇到由于网络问题导致的程序保存,先前只是记录了错误内容,并对错误内容进行后期处理. 原先的流程: def crawl_page(url): pass def log_ ...

最新文章

  1. java calendar与date_Java中date和calendar的用法
  2. 简单介绍python process模块
  3. Dreamwerver8下定义表单实现第一个登陆页面
  4. Groovy里使用Runnable实现多线程
  5. 通过安装和配置AD域解决Windows Server 2016的IIS无法加载SMB文件卷文件的问题
  6. hive0.12安装
  7. 小米手机第三方卡刷软件_小米5刷recovery教程及第三方recovery下载
  8. 机械臂视觉抓取仿真,vrep与matlab联合仿真示例
  9. 实现销售合同结存条件
  10. Markdown编辑器如何配置图片大小
  11. Android基础学习(十五)—— 序列化与反序列化(包括 JSON、GSON))
  12. 华为和荣耀学编程计算机推荐,2020~2021笔记本电脑推荐(华为篇)
  13. 做一个精致的电子工程师
  14. 0基础学习大数据你需要了解的学习路线和方向
  15. 可汗学院计算机课程都有哪些,要录制可汗学院教学视频你需要哪些硬件和软件?...
  16. 手机端抓包http/https-Fiddler的设置
  17. php与java的des加密解密
  18. .NET平台系列22:.NET Core/.NET5/.NET6 对比 .NET Framework
  19. android测试实现方法总结
  20. iSMS2droid0.12.8 完美将iphone短信转移至安卓

热门文章

  1. oracle 存过传变量,Oracle 存储过程—为数传递变量
  2. msp430g2553+pcf8574+dht11+lcd1602
  3. c语言入门for循环的嵌套
  4. Java SE Day02
  5. 做跨境电商前:新人必须要了解的注意事项,这三点很重要
  6. python动图转换成字符画动图_基于Python实现图画转换字符画
  7. c语言 char类型(二维数组篇)
  8. Halcon 鼠标涂抹交互--均值处理
  9. 两大最新SCI期刊智能查询和投稿系统
  10. java字符字节数组_【JAVA基础】字符数组与字节数组的区别