Raye's Journey

python文档阅读笔记1

python 官方文档阅读

python可视化编程网站

循环

循环的问题

list类型是可变序列

words = ['cat', 'window', 'defenestrate']
for w in words[:]:
    if len(w) > 6:
        words.insert(0, w)
print(words)

如果将上述代码的循环语句改为:
for w in words:
那么这个循环就变成了死循环
原因是words这个list会被修改

同样的可以看这个:

basket = ['apple', 'orange', 'pear', 'orange', 'banana']
for f in sorted(basket):
    print(f)

print(basket)

在经过sorted函数之后,basket已经被修改了

可以看这个:

同样的list还有这样一个问题:

代码如下:

def f(a, L=[]):
    L.append(a)
    return L

print(f(1))
print(f(2))
print(f(3))

修改成这样就行:

def f(a, L = None):
    if L is None:
        L = []
    L.append(a)
    return L

循环的tricks

dict循环

knights = {'gallahad':'the pure', 'robin':'the brave'}
for key, value in knights.items():
    print(key, value)

list循环

for index, value in enumerate(['tac', 'tic', 'toe']):
    print("index = {}, value = {}".format(index, value))

两个list循环

questions = ['name', 'quest', 'favorite color']
answers = ['lancelot', 'the holy grail', 'blue']

for q,a in zip(questions, answers):
    print("what is your {}? It is {}".format(q, a))

逆向循环

# 逆向循环序列时,先正向,再调用reverse()函数
for i in reversed(range(1, 10, 2)):
    print(i)

指定顺序循环,用sorted函数

参数的传递

之前还一直没明白python中**param这种传递形式的用法
这个栗子就很棒啦

def cheeseshop(kind, *arguments, **keywords):
    print("-- Do you have any", kind, "?")
    print("-- I'm sorry, we're all out of", kind)
    for arg in arguments:
        print(arg)
    print("-" * 40)
    for kw in keywords:
        print(kw, ":", keywords[kw])
cheeseshop("Limburger", "It's very runny, sir.",
           "It's really very, VERY runny, sir.",shopkeeper="Michael Palin",
           client="John Cleese",
           sketch="Cheese Shop Sketch")

结果如下:

-- Do you have any Limburger ?
-- I'm sorry, we're all out of Limburger
It's very runny, sir.
It's really very, VERY runny, sir.
----------------------------------------
shopkeeper : Michael Palin
sketch : Cheese Shop Sketch
client : John Cleese

第一个kind参数就是第一个字符串,之后arguments相当于一个接收了一个list,keywords接收了一个dict

解包参数列表

比如这个栗子:

args = [3,6]
list(range(*args))

输出的结果就是
[3,4,5]

也就是说我们可以通过*运算符来对一个list进行解包并将其作为参数传递

匿名函数lambda

pairs = [(1, 'one'), (2, 'two'), (3, 'three'), (4, 'four')]
pairs.sort(key=lambda  pair:pair[1])

sort方法有两个参数,一个是指定待排序的关键字,一个是reversed,其中key用一个匿名函数进行指定,有一点函数式编程的味道


>  cd ..