鱼C论坛

 找回密码
 立即注册
查看: 1360|回复: 0

[技术交流] 《零基础入门学习Python》17-21课

[复制链接]
发表于 2018-1-24 22:20:33 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
Lesson 17用return返回函数值时,return()直接放返回的内容
Lesson 18函数文档是函数下面的第一行注释。用‘  ’包括
可以用函数.__doc__调用,也可以用help(函数)调用。用help时,格式会美观
默认参数实在函数定义是,写入括号的。
在参数前面加*号,表示收集参数(即没有制定个数的参数)
收集参数本质上是个打包的元组,所以用,隔开
如果有收集参数,则其他参数最好设默认值,否则所有参数有可能都会给去收集参数,并报错,因为其他参数没有赋值。其他参数也可以用关键值设置
Lesson 19局部变量只在其所在的函数域中有效。当函数执行时,所有的局部变量都放在一个栈中。函数执行完后,该栈被清理。所以其他语句根本不能访问里面的局部变量
与其相对,有全局变量。作用域时整个语句/模块。在函数中可以访问全局变量,但若要修改,可能出现问题。因为在函数内试图修改时,Python会直接创建一个新的局部变量,名字和外部的全局变量而已。与外部的全局变量互不影响。(全局变量不储存在栈中)
Lesson 20Global,如果在函数里需要修改全局变量,在函数里添加  Global xxx语句,然后再修改。就可以。这种操作方式不推荐
e.g
>>> count=5
>>> def changeCount():
global count
count=100
print("Count in the function",count)
return count
运行后,全局变量变成了100。如果没有global  count,函数内部会创建一个count的局部变量。函数内部运算不改变外部count全局函数。
闭包:函数可以嵌套。如果内部函数只引用其外部函数内的变量。这个函数就是闭包。外部函数的变量对于内部函数就类似全局变量和函数内变量的关系。一般不能在内部函数内对其改变。P3.3以后,定义了nonlocal关键字。可以进行修改了。类似使用global来改变本地函数。
下列例子比较:
怎样访问内部funIn函数?
<1>def funOut():
    def funIn():
        print('宾果!你成功访问到我啦!')
    return funIn()
回答:
funOut()
<2>def funOut():
    def funIn():
        print('宾果!你成功访问到我啦!')
    return funIn
回答:
funOut()()
感觉类似代数。此例中funOut()=>funIn.   要访问funIn()就再加一个()
Lesson 21匿名函数
lambda x: x if x/2=0 else None
冒号前面时原函数参数,冒号后面是原函数的返回值
要使用Lambda函数,只需要把它赋值给变量。 A=lambda x: x if x/2=0 else None
A(5)就可以调用这个函数了。用完后,内存直接回收。  参数可以多个,用逗号隔开。
    比如g=Lambda x,y:x+y
    g(3,4)
Filter 和map功能强大,比较实用
Filter可以和lambda合作把符合规则的内容变成元组
map可以把他们变成列表
Filter过滤器,把任何非true的项目过滤
show=filter(odd,temp),讲座例子中,odd是函数,引用时不用加()
map是映射。将函数的序列作为每一个运算的参数进行加工
list(map(lambdax:x*2,range(10)))-即把range(10)中的数据一一代入function
>>> list(map(lambda x,  y : [x, y], [1, 3, 5, 7, 9], [2, 4, 6, 8, 10]))
    [[1, 2], [3, 4], [5, 6], [7, 8], [9, 10]]
    map()后面可以接受多个序列作为参数
列表推导式:
[I for I in range(1,100) if not (i%3)]
Lesson 22递归
设置递归层数
import sys
sys.setrecursionlimit(10000)
递归本质就是调用自己,但参数少1只到回到起点。
因为写的时候是,逻辑是从最大的参数(比如n)向起点(比如1)递归和一般思考的逻辑方向相反。举例如下
Def factorial(n)
result =n
if n==1:
return 1
else
return n*factorial(n-1)
如果=5则计算5*4*3*2*1
从5*f(4)=>5*4*f(3)……>5*4*3*2*f(1). 而f(1)直接就是1,完成整个计算
从上到下是执行过程。从下到上是返回值的过程。
factorial(5)=5*factorial(4)
factorial(4)=4*factorial(3)
factorial(3)=3*factorial(2)
factorial(2)=2*factorial(1)
factorial(1)=1 (第一条if语句)
递归不断调用自己,创建栈,是非常消耗资源的。
如果递归忘了底层的返回(菜鸟易犯的错误),则会不停调用知道内存满或达到递归层数限制

本帖被以下淘专辑推荐:

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-20 17:54

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表