Python 学习笔记 - 3


一、函数:16-20章

1、语法

def times(x,y):
    return x*y

2、多态:昨天内容,Python是动态变量,所以天生支持多态,这点也是要注意的。一个专门处理数字的函数,传入了字符串,函数仍然会执行,还不会报错。

3、变量的作用域: 

global  -- 上级变量 nonlocal -- 嵌套def 的变量 

变量搜索 LEGB法则:本地作用域(L),上层结构中def或lambda的本地作用域(E),全局作用域(G),内置作用域(B)

4、参数:

列表、字典之类可变变量作为参数,在函数内是能直接修改的,所以要尽量避免可变参数的修改。

参数匹配模式:P483 -- 可以对传入的参数进行一定的限定和说明 

注意: *和**的用法;

5、原则:

对于输入使用参数并且对于输出使用return

只有在真正必要的情况下使用全局变量

不要改变可变类型的参数,除非调用者希望这样做

每一个函数都应该有一个单一的、统一的目标

每一个函数应该相对较小

避免直接改变在另一个模块文件中的变量

6、函数是对象:函数是一个对象,所以它可以用来赋值、插入数据结构等等,这带来很大的灵活性。比如把预制的函数和参数都放到一个字典里,然后...

7、lambda:似乎没有什么比较特殊的地方

8、map、filter 和 reduce :都是处理序列的工具,配合 lambda 使用威力巨大 ......

9、列表解析:[(x+y) for x in range(5) if x%2 == 0 for y in range(5) if y%2 ==1] 解析明显比lambda好看,比循环好用。------ 

10、生成器函数:不返回值,而是使用 yield 挂起。普通的函数 return 后,函数就被释放了。带有 yield 的函数则实现了迭代器(昨天学过,可以通过 _next_迭代)处理时间序列的时候这种函数非常有用,因为它保留了函数状态。不用在上层放置状态变量,而且不用反复的实例化。

11、生成器函数的 send :和 next 差不多,但是它发送一个值给 yield 并返回。P539 讲述了迭代器和列表解析,很精彩。

>>> def timesfour(S):
	for c in S:
		yield c*4

		
>>> G = timesfour('span')
>>> next(G)
'ssss'
>>> next(G)
'pppp'
>>> list(G)
['aaaa', 'nnnn']
>>> [x*4 for x in 'span']
['ssss', 'pppp', 'aaaa', 'nnnn']
>>> 

上面的代码很清楚,先定义了一个函数 timesfour(S) ,这个函数把传入的字符串中的每个字符 打印4次输出。

生成器是单次的:两次next(G)以后,list(G)就从 ‘aaaa’开始了;

最下面采用了列表解析,也许,在Python底层,列表解析就是用生成器实现的。


函数部分内容不是很多,但是要思考的东西比较多。一上午也只看了这么多了,下午开始看模块。




  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值