您的位置:首页 > 编程语言 > Python开发

我的python学习手册1

2017-05-16 09:54 162 查看
写这篇博客原因是前天的面试,一道很简单的算法题,我却做的很复杂,归其原因就是自己虽然把廖老师的python课程简单过了一遍,但很多东西也是看了就忘了,所以通过写这篇博客,用几天时间再过一遍。


一、python基础

1.1 数据类型和变量 int float str bool

1.2 字符串和编码

ord() 显示字符的十进制形式

chr()   把编码转化为对应的字符串

encode(‘utf-8’)  指定编码

decode()  把bytes变为str


1.3 列表list
>>> L = ['Apple', 123, True]


append()

insert()

pop()

1.4 元组
>>> classmates = ('Michael', 'Bob', 'Tracy')
不可修改

1.5 条件和循环 for while

if <条件判断1>:
<执行1>
elif <条件判断2>:
<执行2>
else:
<执行3>


1.6 字典dict和set

1)字典{key-value}

直接通过key就可以放入值

get(key) 获取value值

pop() 删除

2)set() set和dict类似,也是一组key的集合,但不存储value。由于key不能重复,所以,在set中,没有重复的key。

二、函数

2.1 默认参数 (defaul arg),与默认值相同时可以不用说明

可变参数(*arg),传入的参数个数是可变的
*nums表示把nums这个list的所有元素作为可变参数传进去。这种写法相当有用,而且很常见


2.2 递归和尾递归

递归

def recursion(x):
if x == 0:
return 0
else:
return x+recursion(x - 1)

print(recursion(3))


尾递归

def recursion(x , total=1):
if x == 1:
return total
else :
return recursion(x-1,total + x)

print(recursion(100))


区别在哪儿?

普通递归每计算一步,都需要生成一个新的recursion(x-1),并不知道它的值是多少,所以会占用一个新的栈,但尾递归是把变化的参数传递给递归函数的变量了,比如从recursion(5)->recursion(4),这一步仍然调用的是递归函数本身,故不用占用新的栈内存。

-are you ok? do you understand? -yeah!

三、高级特性

3.1切片

3.2迭代

java中迭代是通过下标,但python中只要是可迭代对象都能迭代,比如dict。

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True


3.3迭代生成式

[x * x for x in range(1, 11) if x % 2 == 0]


3.4生成器

受到内存限制,列表容量肯定是有限的。故可以不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator

3.5 迭代器 Iterator

Iterator的计算是惰性的,只有在需要返回下一个数据时它才会计算。

四、函数式编程

允许把函数本身作为参数传入另一个函数,还允许返回一个函数.

4.1 高阶函数

一个函数就可以接收另一个函数作为参数,这种函数就称之为高阶函数。

4.2 map/reduce

map()

map()函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回

>>> def f(x):
...     return x * x
>>> r = map(f, [1, 2, 3, 4, 5, 6, 7, 8, 9])
>>> list(r) #返回的结果也是迭代器
[1, 4, 9, 16, 25, 36, 49, 64, 81]


reduce()

再看reduce的用法。reduce把一个函数作用在一个序列[x1, x2, x3, …]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:

reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)


lambda函数

def char2num(s):
return {'0': 0, '1': 1, '2': 2, '3': 3, '4': 4, '5': 5, '6': 6, '7': 7, '8': 8, '9': 9}[s]

def str2int(s):
return reduce(lambda x, y: x * 10 + y, map(char2num, s))


4.3 filter() 筛选函数

filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。filter()函数返回的是一个Iterator。

4.4 sorted() 排序函数

sorted(iterable, key=None, reverse=False)


4.5 返回函数

内部函数sum可以引用外部函数lazy_sum的参数和局部变量,当lazy_sum返回函数sum时,相关参数和变量都保存在返回的函数中,这种称为“闭包(Closure)”的程序结构拥有极大的威力。

4.6 匿名函数

lambda args: 表达式

print(list(map(lambda x,y:x+y,[1,2,4],[1,2,7])))


4.7 装饰器

4.8 偏函数
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: