Python函数

1.函数的定义

python内置了很多函数,可以直接调用,多数情况下,还需要自定义函数,自定义函数的主体,换行的缩进表示代码属于该函数.定义的函数只有被调用的时候才会执行.函数只有有返回值的情况下才可以打印

语法定义:

def 函数名():
......
......
其中,函数名可以由数字,字母,下划线组合而成,但不能以数字开头,冒号以下的代码是函数的主体,换行的缩进表示代码属于该函数

实例代码:

1 def add():
2     a = 1
3     b = a+3
4     print(b)
5 add()
6 #运行结果:
7 4

代码说明:

1 自定义一个名叫add的函数

2 在add函数中定义变量a,并将a赋值为1

3 在add函数中定义变量b,并将b赋值为a+3的运算结果

4 打印b的值

5 调用执行add()函数

7 运行结果,为4

注意:如果没有第5行的调用,那么add()函数就不会执行了

 

2.函数的参数

自定义函数的时候还可以加上参数,参数可以是一个,也可以是多个,参数放在()里面,加上的参数只是一个形式参数,而非真正的参数.

实例代码1:

1 def add(a,b):
2     c = a+b
3     print(c)
4 add(1,2)
5 #运行结果:
6 3

代码说明:

1 定义一个add函数,并创建形式参数a,b

2 将a+b的结果赋值给变量c

3 打印c的值

4 调用执行add(a,b)函数,并给形式参数给传递实参1,给形式参数b传递实参2

6 运行结果,为3

注意:对于add(a,b)函数来说,函数内的a,b只是形式参数,a,b可以表示任何数据,而c就是a和b任意数据的和,等式c=a+b,只是建立了c与a,b的关系

实例代码2:

 1 def add(a = 1,b = 2):
 2     c = a +b
 3     print(c)
 4 add()
 5 add(2,3)
 6 add()
 7 #运行结果:
 8 3
 9 5
10 3

代码说明:

1.定义函数,有形式参数a,b 并给a赋默认值1,给b赋默认值2

2.定义变量c,赋值a+b的运算结果

3.打印c

4.调用函数,不传实参

5.调用函数,传实参,a传实际参数2,b传实际参数3

6.调用函数,不传实参.caution:虽然第5行在调用函数时改变了a和 b的值,但对于函数本身默认值是不会变的,调用时改变的值只是对调用时生效,并不会影响函数本身的默认值

8.4的运行结果

9.5的运行结果

10.3的运行结果

注意:在定义具有形参的函数时,也可以给形式参数赋值,产生一个默认值,当调用函数时,分为两种情况:当调用函数不加实际参数时,就以定义函数时默认值作为实际值;当调用函数加上实际值,那么新的实参就会代替原来的默认值.

使用关键字参数允许函数调用时参数的顺序与声明时不一致,Python解释器能够用参数名匹配参数值.如:

def printinfo(name,age):

        ..................

printinfo(age=50,name='猪太肥')

传参时会通过参数名匹配参数值,不会出现name=50,age="猪太肥"的情况.

3.函数的返回值 

 之前定义的函数只是用来执行某些操作,并没有将最后执行的结果保存.上面的例子是将c的值打印了出来,并未将c的值保存和返回,导致c的值只能在函数内使用

实例代码1:

1 def add(a = 1,b = 2):
2     c = a + b
3 print(add())
4 print(add(2,3))
5 #运行结果:
6 None
7 None

注意:python语言中,没有返回值时不会报错,会返回一个None

 

如何返回和保存c的值呢? 只需要在函数中加return + 返回值

实例代码:

1 def add(a = 1,b = 2):
2     c = a + b
3     return c
4 print(add())
5 print(add(2,3))
6 #运行结果
7 3
8 5

代码说明:

3.在执行完add函数时返回c的值

4.将调用执行add()的结果打印出来.由于add函数有了返回值,所以打印出来就是c的值

 有时候函数需要返回的值不止一个,同样可以用return来返回,区别于单个返回值,多个返回值需要用逗号隔开,数据以元组的形式返回,同样也可以把返回值按照顺序赋值给多个变量

实例代码:

 1 def add(a = 1,b = 2):
 2     c = a + b
 3     return a,b,c
 4 print(add())
 5 print(add(2,3))
 6 x,y,z = add(3,5)
 7 print(x,y,z)
 8 #运行结果:
 9 (1, 2, 3)
10 (2, 3, 5)
11 3 5 8

代码说明:

3.在执行完add函数后,返回a,b,c的值

4.调用add函数,不传实参,并打印执行结果,由于返回了3个值,所以返回的是3个元素的元组

5.调用add函数,传递实参,并打印执行结果,由于返回了3个值,所以返回的是3个元素的元组

6.调用add函数,不传实参,并将执行结果分别赋值给x,y,z

7.打印x,y,z的值

实例代码体会下有无返回值的区别:]

 

def changeme(mylist):
    mylist.append(6);
    print('list = ',mylist)
list = [1,2,3,4,5]
print(changeme(list))
print(list) 运行结果: list
= [1, 2, 3, 4, 5, 6]#执行调用函数时,被调用函数内的打印 None#被调用函数没有返回值,所以打印不出东西来
def changeme(mylist): mylist.append(6); print('list = ',mylist) return mylist #被调用函数有返回值 list = [1,2.3,4,5] print(changeme(list))
print(list) 运行结果: list
= [1, 2, 3, 4, 5, 6] [1, 2, 3, 4, 5, 6] #被调函数有返回值,可以打印出东西来
[1, 2, 3,  4, 5, 6] #列表的可变性,在执行调用函数时,列表以发生变化

4.函数的嵌套

除了 自定义和执行函数外,还可以在函数中相互嵌套调用,即在某个函数的代码中调用其他函数,这就是函数的嵌套.

实例代码:

 

 1 def a1(a,b):
 2     return a+b
 3 def a2(c):
 4     return c
 5 def a3(x,y,z):
 6     result = a1(x,y)-a2(z)
 7     return result
 8 print(a3(1,2,3))
 9 #运行结果:
10 0

 

 

 

代码说明:

1.自定义a1()函数,并创建形式参数a和b

2.函数a1返回a+b的结果

3.自定义a2()函数,并创建形式参数c

4.函数a2返回c的结果

5.自定义a3()函数,并创建形式参数x,y,z

6.将函数a1的运行结果减去函数a2的运行结果,并把结果赋值给result.

7,函数a3()执行完结果,返回运算结果result的值

8.打印a(1,2,3)的执行结果.

任意函数都能调用任意函数,没有上下级等级关系.但这不利于代码的可读性.为了让代码更清晰,利于对代码进行修改,设立一个主函数,并在这个函数下定义它需要调用的子函数,这样主次关系就会更加明确,而且子函数不会被其他函数调用,避免了代码调用混乱的结果.

实例代码:

 

 

 1 def a(x,y,z):
 2     def a1(a,b):
 3         return a+b
 4     def a2(c):
 5         return c
 6     result = a1(x,y)-a2(z)
 7     return result
 8 print(a(1,2,3))
 9 #运行结果:
10 0

 

1 def a1(a,b):
2     c = a+b
3     def a2(x):
4         x=x*x
5         return x
6     return a2(c)
7 print(a1(1,2))
8 #运行结果:
9 9

 

posted @ 2019-02-16 13:14  Avicii_2018  阅读(250)  评论(0编辑  收藏  举报