python学习手册中的一些易忘的点(第4部分)
1.python函数高聚合低耦合
1)对于输入使用参数并且对于输出使用return
2)只有在真正必要的情况下使用全局变量
3)不要改变可变类型的参数,除非调用者希望这样做
4)每个函数都应该有一个单一的、统一的目标
5)每一个函数应该相对较小
6)避免直接改变在另一个文件中的变量
2.递归处理任意结构
>>> a=[3,[2,[2,3,4],2],1,[1,5,[1,3,3]]]
>>> def sumtree(L):
... tot=0
... for x in L:
... if not isinstance(x,list):
... tot+=x
... else:
... tot+=sumtree(x)
... return tot
...
>>> sumtree(a)
30
>>>
3.lamdba,map,filter,reduce用法
>>> map((lambda x: x+3),[1,2,3,4,5,6])
[4, 5, 6, 7, 8, 9]
>>> map((lambda x,y: x+y),[1,2,3,4,5,6],[2,3,4,5,6,7])
[3, 5, 7, 9, 11, 13]
>>>
>>> filter((lambda x: x%2==0),[1,2,3,4,5,6])
[2, 4, 6]
>>> reduce((lambda x,y: x+y),[1,2,3,4,5,6])
21
>>> reduce((lambda x,y: x*y),[1,2,3,4,5,6])
720
>>>
4.任意参数
1)收集参数
>>> def f1(*args):
... print type(args)
... print args
...
>>> f1(1,2,3,4)
<type 'tuple'>
(1, 2, 3, 4)
>>> def f1(**args):
... print type(args)
... print args
...
>>> f1(a=1,b=2)
<type 'dict'>
{'a': 1, 'b': 2}
>>>
2)解包参数
>>> def f(a,b,c,d):
... print a,b,c,d
...
>>> f(*(1,2,3,4))
1 2 3 4
>>>
————————————————
>>> def f(a,b,c,d):print a,b,c,d
...
>>> f('1',*(1,2,3))
1 1 2 3
>>> f('1',b=2,**{'c':1,'d':2})
1 2 1 2
————————————————
>>> def f(a,*args,**dics):print a,args,dics
...
>>> f('1',*('a','b','c'),b=2,**{'1':1,'2':2})
1 ('a', 'b', 'c') {'1': 1, '2': 2, 'b': 2}
>>>
5.迭代/解析
双层迭代
for i in map(iter,('12345','abcde')):print list(i)
...
['1', '2', '3', '4', '5']
['a', 'b', 'c', 'd', 'e']
>>>
————————————————
字典、集合解析
>>> {x:x**2 for x in range(10)}
{0: 0, 1: 1, 2: 4, 3: 9, 4: 16, 5: 25, 6: 36, 7: 49, 8: 64, 9: 81}
>>> {x**2 for x in range(10)}
set([0, 1, 4, 81, 64, 9, 16, 49, 25, 36])
>>>
>>> [x for x in range(10) if x%2==0]
[0, 2, 4, 6, 8]
>>> {x:y for x in range(5) if x%2==0 for y in range(5) if y%2==1}
{0: 3, 2: 3, 4: 3}
>>>
————————————————
函数生成器(构造可迭代)
>>> def gensquares(N):
... for i in range(N):
... yield i**2
...
>>> for i in gensquares(5):print i
...
0
1
4
9
16
>>> d=gensquares(5)
>>> type(d)
<type 'generator'>
>>> [i for i in d]
[0, 1, 4, 9, 16]
>>>
>>> d=gensquares(6)
>>> next(d)
0
>>> next(d)
1
>>>
————————————————
嵌套迭代
>>> def myzip(*args):
... iters=map(iter,args)
... while iters:
... res = [next(i) for i in iters]
... yield tuple(res)
...
>>> myzip('1234')
<generator object myzip at 0x7fe17db37c30>
>>> list(myzip('1234'))
[('1',), ('2',), ('3',), ('4',)]
>>> myzip('12345','abcde')
<generator object myzip at 0x7fe17db37c30>
>>> list(myzip('12345','abcde'))
[('1', 'a'), ('2', 'b'), ('3', 'c'), ('4', 'd'), ('5', 'e')]
>>>
————————————————
>>> g=((x,x*x,x**3) for x in range(10))
>>> next(g)
(0, 0, 0)
>>> next(g)
(1, 1, 1)
>>> next(g)
(2, 4, 8)
python学习手册中的一些易忘的点(第4部分)的更多相关文章
- python学习手册中的一些易忘的点(前三部分)
1.ubuntu下让python脚本可直接运行: test.py文件(后缀可省)#!/usr/bin/pythonprint('wwwww') sudo chmod +x ./test.py (sud ...
- 读书分享全网学习资源大合集,推荐Python学习手册等三本书「01」
0.前言 在此之前,我已经为准备学习python的小白同学们准备了轻量级但超无敌的python开发利器之visio studio code使用入门系列.详见 1.PYTHON开发利器之VS Code之 ...
- Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘
Python学习手册(第4版) - 专业程序员的养成完整版PDF免费下载_百度云盘 提取码:g7v1 作者简介 作为全球Python培训界的领军人物,<Python学习手册:第4版>作者M ...
- Python学习手册(第4版)PDF高清完整版免费下载|百度云盘
Python学习手册(第4版)PDF高清完整版免费下载|百度云盘 提取码:z6il 内容简介 Google和YouTube由于Python的高可适应性.易于维护以及适合于快速开发而采用它.如果你想要编 ...
- [python学习手册-笔记]003.数值类型
003.数值类型 ❝ 本系列文章是我个人学习<python学习手册(第五版)>的学习笔记,其中大部分内容为该书的总结和个人理解,小部分内容为相关知识点的扩展. 非商业用途转载请注明作者和出 ...
- 《Python学习手册》读书笔记
之前为了编写一个svm分词的程序而简单学了下Python,觉得Python很好用,想深入并系统学习一下,了解一些机制,因此开始阅读<Python学习手册(第三版)>.如果只是想快速入门,我 ...
- 《Python学习手册》读书笔记【转载】
转载:http://www.cnblogs.com/wuyuegb2312/archive/2013/02/26/2910908.html 之前为了编写一个svm分词的程序而简单学了下Python,觉 ...
- 《Python学习手册》(二)
<Python学习手册>(二) --类型和运算 数字 十六进制 八进制 二进制 0x 0o 0b hex() oct() bin() >>>int('10',2) 2 & ...
- 参考学习《Python学习手册(第4版)》高清中文PDF+高清英文PDF+源代码
看到第38章了,整体感觉解释详细,例子丰富:关于Python语言本身的讲解全面详尽而又循序渐进不断重复,同时详述语言现象背后的机制和原理:除语言本身,还包含编程实践和设计以及高级主题.边看边写代码.不 ...
随机推荐
- 简述ARP请求过程(同一子网和不同子网)
1. 同一子网 主机A在准备构造链路层以太网帧头时,首先根据目的IP去查找ARP表,如果找到对应项,则直接得到目的MAC地址,如果没有查到才执行上面所说的ARP广播请求.这样做是为了最大限度地减少广播 ...
- 关于 IOC和spring基本配置详解
Spring 中的两个概念 IOC控制反转(也叫依赖注入DI): AOP面向切面编程: 控制反转:当某个java对象需要(依赖)另一个java对象是,不是直接创建依赖对象,而是由实现IOC的容器来创建 ...
- 极光推送android sdk集成步骤
推送,用极光,大家都说好,哈哈. 进入正题: 1.确认android studio的 Project 根目录的主 gradle 中配置了jcenter支持.(基本上现在都已经支持了,循例说一下) , ...
- Names and Identifiers
JLS:https://docs.oracle.com/javase/specs/jls/se7/html/jls-6.html#jls-6.2 Not all identifiers in a pr ...
- nginx 超时问题: upstream timed out (110: Connection timed out) while reading response header from upstream
目录 错误内容 错误原因 错误解决办法 错误内容 我们可以在error.log 里面可以看到 错误内容:upstream timed out (110: Connection timed out) w ...
- NodeJS调用jar包
我们在实际的生产.开发实践中,其实要和许多第三方服务商进行打交道,这其中包括使用他们提供的批量与联机服务,但与别的互联网企业不大相同的是,银行作为传统企业,其一贯重视安全性,许多在互联网企业看似理所当 ...
- NFS文件共享服务搭建
一.概述 NFS工作流程 1.由程序在NFS客户端发起存取文件的请求,客户端本地的RPC(rpcbind)服务会通过网络向NFS服务端的RPC的111端口发出文件存取功能的请求. 2.NFS服务端的R ...
- SFTP服务器搭建
Sftp搭建文档 1. 查看openssh的版本 # ssh -V Openssh版本必须大于4.8p1. 2. 创建用户并设置登录密码 #groupadd sftp #useradd –d / ...
- ruby执行周期性任务
1.前言 无论是用ruby做系统管理,还是用rails做web开发,都可能遇到周期性任务,它们按照一定时间周期(1小时,2天......)持续地触发.在ruby中,我认为一次性任务使用sid ...
- angularjs 依赖注入原理与实现
在用angular依赖注入时,感觉很好用,他的出现是 为了“削减计算机程序的耦合问题” ,我怀着敬畏与好奇的心情,轻轻的走进了angular源码,看看他到底是怎么实现的,我也想写个这么牛逼的功能.于是 ...