函数
函数一词来源于数学,但编程中的「函数」概念,与数学中的函数是有很大不同的,具体区别,我们后面会讲,编程中的函数在英文中也有很多不同的叫法。在BASIC中叫做subroutine(子过程或子程序),在Pascal中叫做procedure(过程)和function,在C中只有function,在Java里面叫做method。
定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
特性:
- 减少重复代码
- 使程序变的可扩展
- 使程序变得易维护
基础语法:
1 def fun(): #定义名字 2 print('Hello world') 3 fun() #调用 4 >>>Hello world
1 def int(x,y): #形参(x,y) 2 print(x,y) 3 int(1,2) 4 >>>1 2 #实参(1,2),与形参一一对应 5 6 #形参:变量只有在被调用时才分配内存单元,在调用结束时,即刻释放所分配的内存单元。因此,形参只在函数内部有效。函数调用结束返回主调用函数后则不能再使用该形参变量 7 8 #实参:可以是常量、变量、表达式、函数等,无论实参是何种类型的量,在进行函数调用时,它们都必须有确定的值,以便把这些值传送给形参。因此应预先用赋值,输入等办法使参数获得确定值 9 10 #默认参数: 11 def int(x,y=2) #y这时候就是一个默认参数,如果你不指定那么它就用默认的 12 print(x,y) 13 int(1) 14 >>>1 2 15 16 int(1,10) 17 >>>1 10 #指定了就用你指定的 18 19 20 #关键参数: 21 正常情况下,给函数传参数要按顺序,不想按顺序就可以用关键参数,只需指定参数名即可,但记住一个要求就是,关键参数必须放在位置参数之后。 22 def int(x,name='Daniel',y=2): 23 print(x,y,name) 24 int(1,name='faker') 25 >>>1 2 faker 26 27 28 #非固定参数: 29 def int(*args): #*代表功能,后面就是变量名,也是你的形参名,可以有n个形参,在不确定形参的情况下使用,变成一个tuple,只能接受位置参数 30 print(args) 31 int('faker',1,2,'qwe') 32 >>>('faker', 1, 2, 'qwe') 33 34 def int(**args): #把关键字参数转换成字典的方式 35 print(args) 36 print(args['name'],args['age']) #取值与字典方式一样 37 int(name='Daniel',age=18) 38 >>>{'name': 'Daniel', 'age': 18} 39 >>>Daniel 18
局部变量:
1 name = 'Dnaiel' #这是一个全局变量,就是一级 2 3 def change_name(): 4 name = 'Strak' #这是一个局部变量只能在这个函数里用,不会影响到全局 5 print(name) 6 change_name() 7 >>>Stark 8 print(name) 9 >>>Daniel10 11 #如果想要在函数里修改全局变量请看下文 12 name = 'Daniel' 13 def change_name(): 14 global name #global>全局的意思 15 name = 'Strak' 16 print(name,) 17 change_name() 18 >>>Stark 19 print (name) 20 >>>Stark
递归:
在函数内部,可以调用其他函数。如果一个函数在内部调用自身本身,这个函数就是递归函数。
1 def fun(x): 2 print(x) 3 if int(x/2) == 0: 4 return x 5 return fun(int(x/2)) 6 fun(100) 7 >>>100 8 50 9 25 10 12 11 6 12 3 13 1
函数式编程介绍:
函数是Python内建支持的一种封装,我们通过把大段代码拆成函数,通过一层一层的函数调用,就可以把复杂任务分解成简单的任务,这种分解可以称之为面向过程的程序设计。函数就是面向过程的程序设计的基本单元。
函数式编程中的函数这个术语不是指计算机中的函数(实际上是Subroutine),而是指数学中的函数,即自变量的映射。也就是说一个函数的值仅决定于函数参数的值,不依赖其他状态。比如sqrt(x)函数计算x的平方根,只要x不变,不论什么时候调用,调用几次,值都是不变的。
Python对函数式编程提供部分支持。由于Python允许使用变量,因此,Python不是纯函数式编程语言。
高阶函数:
变量可以指向函数,函数的参数能接收变量,那么一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。
把一个函数名当做实参传给另外一个函数,返回值中包含函数名。
1 def add(x,y,f): 2 return f(x) + f(y) 3 4 5 res = add(3,-6,abs) 6 print(res)
内置参数:
内置参数详解 https://docs.python.org/3/library/functions.html?highlight=built#ascii