2017年11月21日学习总结__关于函数的定义的说明以及递归函数

来源:互联网 发布:matlab软件介绍 编辑:程序博客网 时间:2024/06/06 01:05

一  函数的作用域是有规律可循的,首先应该声明在使用,如果没有声明直接使用就会报错,需要注意的一点是,全局变量和局部变量不能相互影响:

x=6
def f():
    print(x)
    x=5
f()
这里会报错,如果全局变量可以在局部变量中使用的话,那么运行之后不会报错,但是把x = 5 进行注明后,还是报错,所以,由此可得,这里不能共通,且顺序必须是先声明在使用!
ps视频中的老师纠结了好久...所以这个基础问题必须搞清楚,防止以后搞混了!

先定义一个阶乘的方式

def num(n):    nums = 1    for i in range(1,n):        nums = nums * i    return numsprint(num(10))'''对应的说明:第一行:定义一个函数-num        先定义一个数字nums = 1(说明)乘法里面要用1,加减法里面要用0,这样对数据不会破坏        用for..in  ...的方式将n从数列range中一个个赋值到i上并且列印出来后面的备注(1,n)作用是指的将0跳过        然后用之前定义的nums等于nums*i        这样可以进行阶乘        将nums数字重新定义并且返回循环        打印出num(1-9)的阶乘函数结果为:362880'''
说明递归函数的两个特点:

1/自我调动数值,

2/必须要有一个结束的需求,或者是条件,否则将会无限循环

看例子:

#定义一个递归函数def fact(n):    if n == 1:        return 1    return n*fact(n - 1)print(fact(10))'''定义一个递归函数fact(n)这个n指的是不定向函数    注明条件如果n ==1 两个等号是相等于,不是赋值的意思    返回1    如果不等于一,那就应该自减自乘,然后进行累积'''
递归的函数优点就是非常清晰明了的解释,大家看到代码之后就会很清晰明了!
而且设计代码也很简单,但是对应的就是工作效率慢!意思就是用时间换效率....
所以使用的场合需要慎重,慎用慎用...
比如...汉诺塔..是很经典的函数....

def move(n, a, b, c):    if(n == 1):        print(a,"->",c)        return    move(n-1, a, c, b)    move(1, a, b, c)    move(n-1, b, a, c)move(3, "a", "b", "c")
很经典..可以适当的深入研究,这里就不在赘述,有需要可以自己查查....

这里用递归非常简单明了,只需要写出步骤,那么,系统自动给你计算,如果用for....in.....明年都滤不清楚...
所以这个东西优点与缺点一样清晰...

讲一讲几个特殊的遍历函数
map()filter()两个共同点,就是两个作用基本相同,都是遍历的作用,但是区别是,map()之后会进行数值的更改,干事filter()仅仅起到过滤作用,并不对源代码进行修改例子:str = ['a','b','c']def fun(s):    return s + 'leon'a = map(fun,str)print(a)print(list(a))输出效果为:<map object at 0x0000000001E8C1D0>          ['aleon', 'bleon', 'cleon']str = ['a','b','c']def fun(s):    return s + 'leon'a = filter(fun,str)print(a)print(list(a))# 输出效果为:<filter object at 0x000000000222C1D0>#           ['a', 'b', 'c']


阅读全文
0 0
原创粉丝点击