一、函数: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可。
def fuc(i): return int(i)
二、函数的优点
1、简化代码
2、提高代码可用性
3、代码可扩展
三、函数的参数
函数在调用时,可以传入参数,分为形参和实参
形参:
形参变量只有在被调用时才分配内存单元,在调用结束后,即刻释放内存,形参只在函数内部有效。
实参:
实参可以是变量、常量、表达式、函数等,无论实参是何种类型的量,在调用时,都必须有确定 的量,以便把值传给形参,调用结束后函数则不能再使用该形参。
def add(x,y): #定义一个函数,参数有x,y,x和y就是形参 print(x+y) #输出x+y add(3,8) #调用函数 3和8就是实参
备注:形参就是函数接收的参数,实参就是实际传入的参数
函数的几种形参
位置参数:
位置参数就是按照参数的位置来传参,上面的add函数,x,y就是位置参数,位置参数必传。
位置参数也可以使用这种add(y=8,x=3)形似来调用,这种调用称为关键字传参。
默认参数:
默认参数就是定义形参的时候,给函数一个默认的值,默认参数不是必传的,如果使用默认参数,必须放在位置参数后。
def conn_mysql(user,password,port=3306): #定义函数 print(user,password,port) conn_mysql('root','123456') #默认值
conn_mysql('root','123456',port=3307) #指定默认参数的值
非固定参数:
非固定参数有两种,一种是可变参数,一种是关键字参数
可变参数:
可变参数用*来接收,可以传任意数量参数,如果位置参数、默认参数和可变参数连用,可变参数必须在位置参数和默认参数后面。可变参数也是非必传的。
def more_arg(name, sex, age=18, *args): #传入的其他参数会放在args这个元组中 print(name, sex, age, args) more_arg('Bluse', 'man', 20, 'England', 'python')
关键字参数:
关键字参数使用**来接收,同样是不固定的,关键字同样放到最后,调用时必须使用关键字传参。非必传参数
def keyw_arg(name, **kwargs): print(name,kwargs) keyw_arg('HK', sex='man' ,age=18)
五、函数的返回值
函数都有返回值,如果没有返回值,python会默认返回一个none。如果有多个返回值,将会把返回值放到元组中。
函数中的返回值使用return,函数在遇到return就立即结束。
def multi(x,y): f = x*y return c,x,y res = multi(2,9) print(res)
六、局部变量和全局变量
局部变量意思就是只在局部生效,出了这个作用域就失效;全局变量意思就是在整个程序都生效,在程序的最前面定义的都是全局变量。如果修改全局,需要加global声明,如果修改list、字典和集合的话,则不需要加global关键字。
name = 'Jack' #字符串全局变量 names = [] #list全局变量 print(name) print(names) def fuc(): global name #声明修改变量 name = 'HK' names.append(name) #修改list全局变量 return names fuc() print('修改后', name) print('修改后', names)
七、递归调用
在函数内部,可以调用其他函数。如果函数内部自己调用自己,这个函数就是递归函数。
def recur(): num = int(input('please enter a number:')) if num%2==0: #判断输入数字是不是偶数 return True #如果是偶数就退出,赶回true print('it is not a even number, please try again!') return recur() #不是偶数,继续调用,重新输入 print(recur()) #调用recur
递归调用的特点:
1、必须有一个明确的结束条件
2、每次进入更深一层递归,问题规模比上次递归应有所减少
3、递归效率不高,递归层次过多会导致栈溢出
八、高阶函数
def f_int(n): #定义一个函数,把传入的参数转换成int类型 return int(n) def calc(x,y,z): #定义一个函数,接收3个参数,分别是x,y,z。z是一个函数 print(z(x)*z(y)) #z是一个函数把x,y的值传给z,然后z函数返回的值相乘 calc('4', '5', f_int) #调用,传入x,y的值,再传入上面定义好的函数