我的python学习手册1

本文详细介绍了Python的基础知识,包括数据类型、字符串、列表、元组、字典和集合,以及函数的使用,如默认参数、递归和尾递归。进一步探讨了Python的高级特性,如切片、迭代、生成器、迭代器、高阶函数、map/reduce、filter、sorted、返回函数、匿名函数和装饰器。内容深入浅出,适合Python初学者和进阶者学习。
摘要由CSDN通过智能技术生成
写这篇博客原因是前天的面试,一道很简单的算法题,我却做的很复杂,归其原因就是自己虽然把廖老师的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 偏函数

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值