标签:递归函数 abs 函数式 一个 有一个 ... 必须 计算机 格式
【函数】
函数在计算机中解释为ubroutine(子进程或子过程)
函数定义: 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可
语法定义:
不带参数:
def sayhi(): #函数名 print("hello , world!") sayhi() #调用函数
带参数:
#下面这段代码 a,b = 5,8 c = a**b print(c) #改成用函数写 def calc(x,y): res = x**y return res #返回函数执行结果 c = calc(a,b) #结果赋值给c变量 print(c)
函数特性:
1减少重复代码
2提高代码可扩展性
3使程序变的易维护
参数
必须参数
必须以参数定义的顺序传入函数,调用的时候也必须按顺序全部调用
def f(name,age): print(‘I am %s,I am %d‘%(name,age)) f(‘ShengXin‘,18) f(‘alvin‘,16)
关键字参数
所谓的关键字参数,类似于字典的键值对,通过关键字调用函数,就相当于通过键找值。
def f(name,age): print(‘I am %s,I am %d‘%(name,age)) # f(16,‘alvin‘) #报错 f(age=16,name=‘alvin‘)
默认参数
在关键字参数的基础上,某些参数给默认值,不修改的话,显示默认值,不修改无需再调用,会自动显示
def print_info(name,age,sex=‘male‘): #默认参数放在最后 print(‘Name:%s‘%name) print(‘age:%s‘%age) print(‘Sex:%s‘%sex) return print_info(‘Shengxin‘,18) #sex不给值,显示默认值 print_info(‘铁锤‘,40,‘female‘) #修改sex的值,显示修改后的值
不定长参数
在用户输入参数不确定个数的情况下,使用不定长参数,分类如下:
*kwargs
多传入的参数以元组的形式保存
def stu_register(name,age,*args): # *args 会把多传入的参数变成一个元组形式 print(name,age,args) stu_register("ShengXin",22) #输出 #ShengXin 22 () #后面这个()就是args,只是因为没传值,所以为空 stu_register("Jack",32,"CN","Python") #输出 # Jack 32 (‘CN‘, ‘Python‘)
**kwargs
多传入的参数以字典形式保存
def stu_register(name,age,*args,**kwargs): # *kwargs 会把多传入的参数变成一个dict形式 print(name,age,args,kwargs) stu_register("Shengxin",22) #输出 #Alex 22 () {}#后面这个{}就是kwargs,只是因为没传值,所以为空 stu_register("Jack",32,"CN","Python",sex="Male",province="ShanDong") #输出 # Jack 32 (‘CN‘, ‘Python‘) {‘province‘: ‘ShanDong‘, ‘sex‘: ‘Male‘}
局部变量
在函数中重新定义函数外的同名函数,函数值在函数内部生效,作用域为函数,所定义的变量是局部变量
name = "Shengxin" #全局变量 def change_name(name): print("before change:",name) name = "changed name" #局部变量 print("after change", name) change_name(name) print("在外面看看name改了么?",name)
返回值
return
在函数中,return会结束本层执行,并返回结果
函数的默认返回值为:none
递归
在函数中调用函数本身
def calc(n): print(n) if int(n/2) ==0: return n return calc(int(n/2)) calc(10)
特性:
必须有一个明确的结束条件
每次进入下一层递归时,计算规模应该减少
递归函数执行效率低,过多的递归会导致栈溢出
匿名函数
在python中使用lambda来创建匿名函数
格式:
lambda arg1,arg2... : <expression>
#算一个数的平方
def calc(n): return n**n print(calc(10)) #换成匿名函数 calc = lambda n:n**n print(calc(10))
作用:
匿名函数主要是和其它函数搭配使用
res = map(lambda x:x**2,[1,5,7,4,8]) for i in res: print(i)
函数式编程
高阶函数
函数名可以作为参数输入
函数名可以作为返回值
def add(x,y,f): return f(x) + f(y) res = add(3,-6,abs) print(res)
内置函数
python内置的函数
作用域
python中的作用域分4种情况:
x = int(2.9) # int built-in g_count = 0 # global def outer(): o_count = 1 # enclosing def inner(): i_count = 2 # local print(o_count) # print(i_count) 找不到 inner() outer() # print(o_count) #找不到
标签:递归函数 abs 函数式 一个 有一个 ... 必须 计算机 格式
原文地址:http://www.cnblogs.com/SHENGXIN/p/7496978.html