全国咨询/投诉热线:400-618-4000

Python函数详细教程,顶你看2天的视频课!

更新时间:2020年01月13日16时25分 来源:传智播客 浏览次数:

本文目录

1、什么是函数?
2、如何定义函数?
3、如何调用函数?
4、函数参数传递
5、函数默认参数
6、不定长参数
7、函数的返回值
8、函数的四种类型



传智播客



在实际开发中,如果有若干段代码的执行逻辑完全相同,那么可以考虑将这些代码抽取成一个函数,这样不仅可以提高代码的重用性,而且条理会更加清晰,可靠性更高。
函数是指组织好的,可重复使用的,用来实现单一或相关联功能的代码段,它能够提高应用的模块化和代码的重复利用率。
Python提供了很多内建函数,如print()。除此之外,我们还可以自己创建函数,也就是自定义函数。接下来,看一段代码:
print("*")
print("**")
print("****")
上述代码中,使用多个print()函数输出了一个三角形。如果需要在一个程序的不同位置输出这个图形,那么每次都使用print()函数输出的做法是不可取的。为了提高编写的效率以及代码的重用性,我们可以把具有独立功能的代码块组织成一个小模块,这就是函数。


在Python中,你可以定义一个自己想要功能的函数,自定义函数的语法格式如下所示
def 函数名(参数列表):

         “函数_文档字符串”

         函数体

return 表达式

基于上述格式,下面对函数定义的规则进行说明:
(1)函数代码块以def开头,后面紧跟的是函数名和圆括号()。
(2)函数名的命名规则跟变量的命名规则是一样的,即只能是字母、数字和下划线的任何组合,但是不能以数字开头,并且不能跟关键字重名。
(3)函数的参数必须放在圆括号中。
(4)函数的第1行语句可以选择性地使用文档字符串来存放函数说明。
(5)函数内容以冒号起始,并且缩进。
(6) return表达式结束函数,选择性地返回一个值给调用方。不带表达式的retu相当于返回None。

定义了函数之后,就相当于有了一段具有特定功能的代码,要想让这些代码能够执行,需要调用函数。调用函数的方式很简单,通过“函数名()”即可完成调用。
# 定义一个函数,能够完成打印信息功能
def print_info():
    print("-"*20)
    print("人生苦短,我用python!")
    print("-"*20)
# 调用函数
print_info()
在介绍函数的参数之前,我们先来解决一个问题。现在要求定义一个函数,这个函数用于计
算两个数的和,并把计算的结果打印出来。把上述要求转换为代码,示例代码如下:
def add():
    c = 11 + 22
    print(c)
以上函数的功能是计算11和22的和。此时,无论调用这个函数多少次,得到的结果永远都是一样的,而且只能计算固定的两个数字的和,使得这个函数的局限性很大。
为了能让定义的函数更加通用,即计算任意两个数字的和,可以在定义函数的时候添加两个参数,让两个参数来接收传递给函数的值。接下来,通过一个案例来演示函数是如何传递参数的。
def add(a, b):
    c = a + b
    print(c)

上面案例中,定义了能接收两个参数的函数。其中,a为第一个参数,用于接收函数传递的第1个数值;b为第二个参数,接收的是函数的第2个数值。这时,如果想调用add函数,则需要给函数的参数传递两个数值,如下所示为完整代码:
def add(a, b):
    c = a + b
    print(c)
# 调用带有参数的函数时,需要在小括号中传递数据。
add(35, 25)

上面代码运行结果为:
50
需要注意的是,如果函数定义了多个参数,那么在调用函数的时候,传输的数据要和定义的参数一一对应。上面的案例中a=35,b=25,c=50。

定义函数时,可以给函数的参数设置默认值,这个参数就被称为默认参数。当调用参数的时候,由于猫人参数在定义时已经被赋值,所以可以直接忽略,而其它参数是必须要传入值的。
如果默认参数没有传入值,则直接使用默认的值;如果默认参数传入了值,则使用传入的新值替代。
下面我们通过一个案例来介绍。
def print_info(name, age=35):
    # 打印任何传入的字符串
    print("Name:", name)
    print("age:", age)
# 调用print_info(name="miki")
print_info(name="miki")
print_info(name="miki", age=9)
运行结果为:
Name: miki
age: 35
Name: miki
age: 9

在上面案例,第1~4行代码定义了带有两个参数的print_info函数。其中,name参数没有设置默认值,age作为默认参数已经设置了默认值。在第6行调用print_into函数时,由于只传入了name参数的值,所以程序会使用age参数的默认值;在第7行调用print_info函数时,同时传入了name和age两个参数的值,所以程序会使用传给age参数的新值。
需要注意的是,带有默认值的参数一定要位于参数列表的最后面,否则程序会报错。例如,给 print_info函数添加一个参数sex,放在参数列表的最后面,则报错信息如下图所示:

python报错


通常在定义一个函数时,若希望函数能够处理的参数个数比当初定义的参数个数多,此时可以在函数中使用不定长参数。其基本的语法格式如下:
def 函数名([forml_args,] *args, **kwargs):
    "函数_文档字符串"
    函数体
return 表达式

在上述格式中,函数共有3个参数。其中,formal_args为形参(也就是前面所用的参数,如(a,b),*args和** kwargs为不定长参数。当调用函数的时候,函数传入的参数个数会优先匹配formal_args参数的个数。如果传入的参数个数和formal_args参数的个数相同,不定长参数会返回空的元组或字典;如果传入参数的个数比formal_args参数的个数多,可以分为如下两种情况:
(1)如果传入的参数没有指定名称,那么*args会以元组的形式存放这些多余的参数
(2)如果传入的参数指定了名称,如m=1,那么* kwargs会以字典的形式存放这些被命名的参数,如{m:1}。
为了大家更好地理解,先通过一个简单的案例进行演示,具体如下所示。
def test(a, b, *args):
    print(a)
    print(b)
    print(args)
test(11, 12)


运行结果如下:
11
12
()
在上面案例中,第1~4行代码定义了带有多个参数的test函数。其中,args为不定长参数。当在第5行中调用test函数时,由于只传入11和122这两个数,所以这两个数会从左向右依次匹配test函数定义时的参数a和b,此时,args参数没有接收到数据,所以为一个空元组。
如果在调用test函数时,传入多个参数(这里指的是大于2个参数)情况又是什么样的呢?
下面看一段实例代码:
def test(a, b, *args):
    print(a)
    print(b)
    print(args)
test(11, 12, 13, 14, 15, 16, 17, 18)
运行结果如下:
11
12
(13, 14, 15, 16, 17, 18)
如果在参数列表的末尾使用* kwargs参数,示例代码如下
def test(a, b, *args, **kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)
test(11, 12, 13, 14, 15, 16, 17, 18)
运行结果:
11
12
(13, 14, 15, 16, 17, 18)
{}
从两次运行的结果可以看出,如果在调用test函数时传入多个数值,那么这些数值会从左向
右依次匹配函数test定义时的参数。如果跟formal_args参数的个数匹配完,还有多余的参数,则这些多余的参数会组成一个元组,和不定长参数args进行匹配。此时,kwargs参数没有接受到数据,所以为一个空字典。
在调用函数时,什么情况下传入的数据会匹配参数kwargs呢?看下面案例:
def test(a, b, *args, **kwargs):
    print(a)
    print(b)
    print(args)
    print(kwargs)
test(11, 12, 13, 14, 15, 16, 17, 18, m=22, n=33)
运行结果为:
11
12
(13, 14, 15, 16, 17, 18)
{'m': 22, 'n': 33}
从上述运行结果可以看出,如果参数是以键值对的形式传入的,则使用** kwargs参数来接收。

所谓“返回值”,就是程序中的函数完成一件事情后,最后给调用者的结果。比如,定义一
个函数来获取室内的温度,一旦调用这个函数,函数就会把拿到的温度值返回给调用者,这个温暖值就是函数的返回值。在Python中,函数的返回值是使用 return语句来完成的。接下来,看一段示例代码。
def add(a, b):
    c = a + b
    return c

或者
def add(a, b):
    return a + b
上面的代码中,函数add中包含了return语句,意味着这有个函数的返回值,其返回值就是a和b相加的结果。


根据有没有参数和返回值,函数大概可以分为以下四种类型:
(1)函数无参数,无返回值。
(2)函数无参数,有返回值。
(3)函数有参数,无返回值。
(4)函数有采参数,有返回值。
下面我们分别介绍。

1)无参数、无返回值的参数
无参数、无返回值的函数,既不能接受参数,也没有返回值。
接下来,我们通过打印提示的函数来演示这类函数的使用。
def print_menu():
    print("-"*20)
    print("   xx涮锅 点菜系统")
    print("    1. 羊肉涮锅")
    print("    2. 牛肉涮锅")
    print("    3. 猪肉涮锅")
    print("-" * 20)
print_menu()

运行结果为:
无参数无返回值python函数


2)无参数、有返回值的函数
此类函数不能接收参数,但是可以返回某个数据,一般情况下,采集数据时会用此类函数。接下来,我们通过一个示例来演示,如下所示:
# 获取温度

def get_temperature():

    # 这里是温度获取的一些处理过程
    # 为了简单起见,先模拟返回一个数据
    return 24
temperture = get_temperature()
print('当前的温度为:', temperture)

运行结果为:
当前的温度为: 24
3)有参数、无返回值的函数
在实际开发中,有参数、无返回值的函数用的极少,这是因为函数作为功能模块,既然传入了参数,绝大多数情况是希望使用返回值的。这里,大家对有参数、无返回值的函数有所了解即可,实例代码如下:
def test(number_one, number_two):
    result = number_one + number_two
    print('计算结果为: %d'%result)
4)有参数、有返回值得函数
此类函数不能接收参数,但是可以返回某个数据,一般情况下,采集数据时会用此类函数。
接下来,我们通过一个示例来演示。
# 计算1~number的累积和
def calculate(nuber):
    result = 0
    i = 1
    while i <= nuber:
        result = result +i;
        i +=1
    return result
result = calculate(100)
print('1~100的累积和为:', result)
运行结果为: 
1~100的累积和为: 5050





猜你喜欢:

javaee

python

web

ui

cloud

test

c

netmarket

pm

Linux

movies

robot

uids

北京校区

    14天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    15天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    8天免费试学

    基础班入门课程限时免费

    申请试学名额

    20天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    0天免费试学

    基础班入门课程限时免费

    申请试学名额

    12天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    5天免费试学

    基础班入门课程限时免费

    申请试学名额

    10天免费试学

    基础班入门课程限时免费

    申请试学名额