函数与函数式编程
一.编程模式分为三种:
1.面向对象编程:类----->关键字class
2.面向过程编程:过程----->关键字def,没有return
3.函数式编程:函数----->关键字def,有return返回值(注:函数式编程与我们学习的函数完全不是一回事)
面向过程编程是没有返回值的函数式编程,在python中过程可以看做函数,只是python默认过程没有返回值。
面向过程编程就是把一段段零散的代码通过def定义成一块块代码,需要调用的时候就拿出来使用。
函数式编程就是一种抽象程度很高的编程范式,纯粹的函数式编程语言编写的函数没有变量,因此任意一个函数,只要输入是确定的,输出就是确定的
python对函数式编程提供部分支持,由于python允许使用变量,所以python不是纯粹的函数式编程语言。
1 #!/user/bin/env python 2 #-*-coding:utf-8 -*- 3 #Author: qinjiaxi 4 #函数 5 def func1(): 6 """testing1""" 7 print('in the func1') 8 return 0 9 #过程 10 def func2(): 11 """testing2""" 12 print('in the func2') 13 x = func1()#调用函数 14 y = func2()#调用过程 15 print('func1 return: {}'.format(x))#函数有返回值返回定义函数时的0 16 print('func2 return: {}'.format(y))#过程没有返回值返回None
二.为什么要使用函数
1.避免代码重复(避免代码的重复,把代码封装到函数中,调用时只调用函数)
2.保持一致性(调用函数时)
3.可扩展容易扩展(修改函数时,其他调用函数的地方都跟着变动)
三.函数的返回值
1.返回值个数=0,返回None
2.返回值个数=1,返回object(本身)
3.返回值个数>1,返回tuple(元组)
四.函数为什么要有返回值
返回整个函数的运行结果,根据返回结果进行后面的操作
五.函数的参数
1 #!/usr/bin/env python 2 # -*- coding:utf-8 -*- 3 # Author:qinjiaxi 4 5 #位置参数和关键字参数 6 def test(x,y): 7 print(x,y) 8 test(1,2)#1,2是位置参数,按照位置来传递函数参数,与形参一一对应 9 test(y = 1, x = 2)#此时y和x是关键字参数,将形参赋值与形参顺序无关 10 "其中x,y是形参,1、2是实参" 11 "位置参数和关键字参数共同使用的时候:必须位置参数放在前面,否则报错" 12 13 #默认参数 14 def test1(x, y =2): 15 print(x,y) 16 test1(1) 17 "默认参数:在定义函数的时候给形参赋值" 18 "默认参数的特点:调用函数的时候,默认参数非必须传递,如果传递就修改之前的赋值" 19 "默认参数的用途:1.提前固定值,默认安装值 2.连接数据库时使用默认参数可以固定端口号" 20 21 #参数组(也叫收集参数) 22 #传递多个参数 23 def test2(*args): 24 print(args) 25 test2(1,2,3,4,5)#接受多个实参,将参数传进去得到一个元组 26 test2(*[1,2,3,4,5])# args = tuple([1,2,3,4,5]) 27 28 def test3(x, *args): 29 print(x) 30 print(args) 31 test3(1,2,3,4,5)#将1传给1,其他的以元组的形式传递给args 32 33 #传递多个字典参数 34 def test4(**kwargs): 35 print(kwargs) 36 test4(name = 'qinlang', age = 3)#接收关键字参数变成字典 37 test4(**{'name': 'qinlang', 'age': '3'})#kwargs = dict({'name':'qinlang', 'age':'3'}) 38 "功能:把N个关键字参数,转换为字典的方式" 39 40 def test5(name,**kwargs): 41 print(name) 42 print(kwargs) 43 test5('秦朗', x = 111 ,y =222, age = 8)#先接受位置参数,然后把关键字参数变成字典 44 45 def test6(name, age = 3, **kwargs): 46 print(name) 47 print(age) 48 print(kwargs) 49 test6('秦朗',hobby = 'play',age = 3.5)#先接受位置参数,然后接受默认参数,最后将关键字参数变成字典 50 51 "总结:*args接受的是位置参数,如果调用函数的时候不传递则返回一个空元组" 52 " *kwargs接受的是关键字参数,如果调用函数的时候不传递则返回一个空字典" 53 " 默认参数在调用的时候可以写可以不写,如果写的话有两种方式一是在固定位置写值、二是以关键字参数传递" 54 " 最后强调,位置参数一定得放在关键字参数的后面"