10. 函数

函数在计算机中为一段子程序
作用:
减少代码
方便修改
更易扩展
保持代码一致性

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. 函数在执行过程中只要遇到return语句,就会停止执行并返回结果,so 也可以理解为 return 语句代表着函数的结束
  2. 如果未在函数中指定return,那这个函数的返回值为None  
  3. return多个对象,解释器会把这多个对象组装成一个元组作为一个一个整体结果输出.
  1. def add(x,y):   
  2.        z = x+y   
  3.       return z
  4. a=add(1,2)
  5. print(a)

作用域

(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))
posted @ 2020-05-08 17:01  十名知花香  阅读(108)  评论(0编辑  收藏  举报