函数在计算机中为一段子程序
作用:
减少代码
方便修改
更易扩展
保持代码一致性
def log_w(log_num):
with open (‘log.txt‘,‘a‘) as a :
a.write(‘exec function----%s \n‘ %log_num)
pass
for a in range(10) :
log_w(a)
# exec function----0
# exec function----1
# exec function----2
# exec function----3
# exec function----4
# exec function----5
# exec function----6
# exec function----7
# exec function----8
# exec function----9
import time
time_format=‘%Y-%m-%d %X‘
time_current=time.strftime(time_format)
#print(time_current)
def write_log(n,s) :
with open(‘log.txt‘,‘a‘) as f :
if n==1 :
mark = ‘start‘
# f.write(‘%s Action %s is start \n‘ %(time_current,s))
else :
mark =‘end‘
f.write(‘%s Action %s is %s \n‘ %(time_current,s,mark))
# def write_log_end(s) :
# with open(‘log.txt‘,‘a‘) as f :
# f.write(‘%s Action %s is end \n‘ %(time_current,s))
def action(n,s):
write_log(n,s)
# write_log_end(1)
action(1,1)
action(2,1)
2020-05-08 13:11:43 Action 1 is start
2020-05-08 13:11:43 Action 1 is end
2020-05-08 13:11:43 Action 1 is start
2020-05-08 13:11:43 Action 1 is end
关键字参数和函数调用关系紧密,函数调用使用关键字参数来确定传入的参数值。使用关键字参数允许函数调用时参数的顺序与声明时不一致,因为 Python 解释器能够用参数名匹配参数值。
def
f(name,age):
print
(
‘I am %s,I am %d‘
%
(name,age))
# f(16,‘alvin‘) #报错
f(age
=
16
,name
=
‘alvin‘
)
缺省参数(默认参数): 调用函数时,缺省参数的值如果没有传入,则被认为是默认值。下例会打印默认的age,如果age没有被传入: 123456789 def print_info(name,age,sex=‘male‘):
print(‘Name:%s‘%name)
print(‘age:%s‘%age)
print(‘Sex:%s‘%sex)
return
print_info(‘alex‘,18)
print_info(‘铁锤‘,40,‘female‘)
参数顺序,关键参数,默认参数,*args(不定长参数),**kwargs(字典式不定长参数)
要想获取函数的执行结果,就可以用return语句把结果返回
注意:
作用域
(1)变量查找顺序:LEGB,作用域局部>外层作用域>当前模块中的全局>python内置作用域;
(2)只有模块、类、及函数才能引入新作用域;
(3)对于一个变量,内部作用域先声明就会覆盖外部变量,不声明直接使用,就会使用外部作用域的变量;
(4)内部作用域要修改外部作用域变量的值时,全局变量要使用global关键字,嵌套作用域变量要使用nonlocal关键字。nonlocal是python3新增的关键字,有了这个 关键字,就能完美的实现闭包了。
递归函数
递归函数的优点: 是定义简单,逻辑清晰。理论上,所有的递归函数都可以写成循环的方式,但循环的逻辑不如递归清晰。
递归特性:
1. 必须有一个明确的结束条件
2. 每次进入更深一层递归时,问题规模相比上次递归都应有所减少
3. 递归效率不高,递归层次过多会导致栈溢出(在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返 回,栈就会减一层栈帧。由于栈的大小不是无限的,所以,递归调用的次数过多,会导致栈溢出。)
def fibo_new(n): # n可以为零,数列有[0]
if n <= 1:
return n
return (fibo_new(n - 1) + fibo_new(n - 2))
for i in range(20):
print(fibo_new(i))
原文:https://www.cnblogs.com/zpzhou/p/12849517.html