您的位置:首页 > 编程语言 > Python开发

Python函数(函数定义、函数调用)使用详解

2019-04-30 00:00 483 查看

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

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

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

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

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

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

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



图 1 函数调用示意图

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

  1. 函数需要几个关键的需要动态变化的数据,这些数据应该被定义成函数的参数。
  2. 函数需要传出几个重要的数据(就是调用该函数的人希望得到的数据),这些数据应该被定义成返回值。
  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 专题页面 https://www.linuxidc.com/topicnews.aspx?tid=17

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

本文永久更新链接地址https://www.linuxidc.com/Linux/2019-04/158380.htm

内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息