廖雪峰python3.5教程学习笔记(未完)
print()会依次打印每个字符串,遇到逗号“,”会输出一个空格 print(300)
input()输入,括号中写提示input()返回的数据类型是str,str不能直接和整数比较,必须先把str转换成整数
\具有转义字符的作用
//表示整除
ASCII编码范围较小没办法表示中文 Unicode编码较全 UTF-8是简化了Unicode编码,可以满足常用
len()函数计算的是str的字符数
由于Python源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为UTF-8编码。当Python解释器读取源代码时,为了让它按UTF-8编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
格式化:用%来隔开
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
list是一种有序的集合,可以随时添加和删除其中的元素。;列表a.append('Adam')
a.insert(1, 'Jack')在列表a的1位置插入‘Jack’,a.pop()删除最后一个元素,a.pop(1)删除1号元素(从0开始计数)
list里面的元素的数据类型也可以不同
list元素也可以是另一个list
元组一旦初始化就不能修改,但是如果元组的元素是一个列表,这个list中元素是可以修改的
for x in ...循环就是把每个元素代入变量x,然后执行缩进块的语句
list(range(5)) [0, 1, 2, 3, 4]
字典d.get('Thomas', -1),检查有没有‘Thomas’这个key是否存在,如果不存在则写入‘Thomas’:-1这个字典,如果存在返回
None(实际什么都不显示)
d.pop('Bob')删除字典d中Bob这个key和值,需要牢记的第一条就是dict的key必须是不可变对象,否则会引起混乱,一般别修改value
集合 s = set([1, 1, 2, 2, 3, 3])要创建一个set,需要提供一个list作为输入集合,s.add(4)给集合加元素4,s.remove(4)删除4
字符串是不可不对象,list是可变对象,a.sort()可对a进行排序,a.replace('a', 'A')用‘A’代替‘a’
函数名其实就是指向一个函数对象的引用,完全可以把函数名赋给一个变量,相当于给这个函数起了一个“别名”:
>>> a = abs # 变量a指向abs函数
>>> a(-1) # 所以也可以通过a调用abs函数 1
如果你已经把my_abs()的函数定义保存为abstest.py文件了,那么,可以在该文件的当前目录下启动Python解释器,用from abstest import my_abs来导入my_abs()函数,注意abstest是文件名(不含.py扩展名):
如果想定义一个什么事也不做的空函数,可以用pass语句:
def nop():
pass
数据类型检查可以用内置函数isinstance()
if not isinstance(x, (int, float)):
raise TypeError('bad operand type') 如果x不是int或float则回复错误信息
函数返回多个值return nx, ny,实际上它是把结果放入一个元组中
def person(name, age, **kw):
print('name:', name, 'age:', age, 'other:', kw)
结果person('Bob', 35, city='Beijing')
name: Bob age: 35 other: {'city': 'Beijing'}
def person(name, age, *args, city, job):
print(name, age, args, city, job)
列表生成式 list(range(1, 11)) [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
[x * x for x in range(1, 11)] [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
[m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
d = {'x': 'A', 'y': 'B', 'z': 'C' }
>>> for k, v in d.items():
... print(k, '=', v)
...
y = B
x = A
z = C
把一个list中所有的字符串变成小写:
>>> L = ['Hello', 'World', 'IBM', 'Apple']
>>> [s.lower() for s in L]
['hello', 'world', 'ibm', 'apple']
使用内建的isinstance函数可以判断一个变量是不是字符串:
>>> x = 'abc'
>>> y = 123
>>> isinstance(x, str)
True
在Python中,这种一边循环一边计算的机制,称为生成器:generator
要创建一个generator,有很多种方法。第一种方法很简单,只要把一个列表生成式的[]改成(),就创建了一个generator:
>>> L = [x * x for x in range(10)]
>>> L
[0, 1, 4, 9, 16, 25, 36, 49, 64, 81]
>>> g = (x * x for x in range(10))
>>> g
<generator object <genexpr> at 0x1022ef630>
创建L和g的区别仅在于最外层的[]和(),L是一个list,而g是一个generator。
生成器的特点是每用一次计算一个值,而不是一次把所有值全部所出来
next()函数获得generator的下一个返回值:
>>> next(g)
0
>>> next(g)
1
>>> next(g)
4
>>> next(g)
9
如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator:
函数和generator仅一步之遥。要把fib函数变成generator,只需要把print(b)改为yield b就可以了
generator,在执行过程中,遇到yield就中断,下次又继续执行
对于函数改成的generator来说,遇到return语句或者执行到函数体最后一行语句,就是结束generator的指令,for循环随之结束,只可用一遍
变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
可以直接作用于for循环的数据类型有几种:一类是集合数据类型,如list、tuple、dict、set、str等
一类是generator,包括生成器和带yield的generator function。
这些可以直接作用于for循环的对象统称为可迭代对象:Iterable
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator
生成器都是Iterator对象,但list、dict、str虽然是Iterable,却不是Iterator
Python内建了map()和reduce()函数
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]
map函数有两个参数,第一个参数是函数式,第二个参数是自变量的列表
reduce函数也有两个参数,第一个是有两个自变量的函数表达式,第二个也是自变量列表,与map函数区别是reduce函数是将计算的结果作为一个自变量计算的
>>> from functools import reduce
>>> def fn(x, y):
... return x * 10 + y
...
>>> reduce(fn, [1, 3, 5, 7, 9])
和map()类似,filter()也接收一个函数和一个序列。和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素。
例如,在一个list中,删掉偶数,只保留奇数,可以这么写:
def is_odd(n):
return n % 2 == 1
list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10, 15]))
Python内置的sorted()函数就可以对list进行排序:
>>> sorted([36, 5, -12, 9, -21])
[-21, -12, 5, 9, 36]
此外,sorted()函数也是一个高阶函数,它还可以接收一个key函数来实现自定义的排序,例如按绝对值大小排序:
>>> sorted([36, 5, -12, 9, -21], key=abs)
[5, 9, -12, -21, 36]
13579
divmod(num1, num2) 返回一个元组,这个元组包含两个值,第一个是 num1 和 num2 相整除得到的值,第二个是 num1 和 num2 求余得到的值