Python入门笔记

基本类型

  • 数字
    • 1.23
  • 字符
    • ‘hello’
    • “world”
    • 多行 ‘’’xxx yyyy’’’
  • 输出字符模板
    • ‘hello %s’ % ‘world’
  • 布尔
    • False | True
  • 空值
    • None
  • 变量
    • a = 1
  • List(可变)
    • [1,2,3]
  • tuple(不可变)
    • (1,2,3)
  • dict
    • {“age”: 123}
  • set
    • set([1,2,3])

函数

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
# 基本函数
def sum(a, b):
return a+b

# 复杂参数
def f1(a, b, c=0, *args, **kw):
print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw)

f1(1, 2, 3, 'a', 'b', x=99)
# a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}

def sum(*num):
count = 0
for n in num:
count+=n
return count

# 递归
def fact(n):
if n==1:
return 1
return n * fact(n - 1)

数组操作

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
# index 0 - 3
[:3]

# 最后一个元素
[-1]

# 倒数切片
[-2:]

# 每两个取一个
[:10:2]

# 复制一个
[:]

#字符串也可以切
str = 'hello'
str[:3] # hel

迭代

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# 列表
for v in range(5):
# ...

# 可以拿到index
for i,v enumerate(range(5))

# 对象
o = {'a': 1, 'b': 2}
for k in o:
# 输出key

for v in o.values():
# 输出value

for k,v in o.items():
# 输出key, value

列表生成式

1
2
3
4
5
6
7
8
# 生成一个乘方数组
[x * x for x in range(5)]

# 条件生成数组
[x * x for x in range(5) if x % 2 == 0]

# 两层生成
[i+j for i in range(5) for j in range(5)]

生成器

将上述[]改成()就变成不断生成数字的生成器:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
# 从列表生成式生成
g = (x * x for x in range(5))
for i in g:
print i

# 从函数生成
def fib(max):
n, a, b = 0, 0, 1
while n < max:
yield b
a, b = b, a + b
n = n + 1
return 'done'

for i in fib(5):
print i

迭代器

所有 iterable 都可以被 for 进行迭代:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#  判断是否可迭代
>>> from collections import Iterable
>>> isinstance([], Iterable)
True
>>> isinstance({}, Iterable)
True
>>> isinstance('abc', Iterable)
True
>>> isinstance((x for x in range(10)), Iterable)
True
>>> isinstance(100, Iterable)
False

# 判断是否迭代器
>>> from collections import Iterator
>>> isinstance((x for x in range(10)), Iterator)
True
>>> isinstance([], Iterator)
False
>>> isinstance({}, Iterator)
False
>>> isinstance('abc', Iterator)
False

iterableiterator 区别在于,后者是一个不可预知的迭代器,只能通过不断调用next()来获取下一个数据

高阶函数&函数式编程

1
2
3
4
5
6
7
8
# map reduce
def add(a, b):
return a + b

def pow2(a):
return a**2

list(map(pow, [1,2,3,4]))

集合

1
2
3
4
5
6
7
8
X = set("spam")
Y = {'h', 'a', 'm'}
# X,Y -> ({'s', 'p', 'a', 'm'}, {'m', 'a', 'h'})
# X&Y -> {'m', 'a'}
# X|Y -> {'m', 'h', 's', 'p', 'a'}
# X-Y -> {'s', 'p'}
# { x**2 for x in range(4)} -> {0, 1, 4, 9}