廖老师教程写的还是不错的,看了一下午,基本可以写脚本了。
-
Hello World
- 不用写分号
-
输入输出
- print输出,多个字符串用逗号隔开,中间会填补空格,相当于
print(join(args))
-
name = input()
, 等待键盘输入,结果存到name中。
- print输出,多个字符串用逗号隔开,中间会填补空格,相当于
-
数据类型:
- 字符串
- 单引号和双引号括起来的都是字符串,字符串中还有单双引号的用
\
转义(这件事儿IDE应该会帮我们干好)。 - 换行
\n
,要打印\
本身,要用\
来转义,即\\
。忽略转义打印字面值r''(并不是很好使) - 多行,
'''...'''
,什么日了狗的写法,辣鸡。 - 编码:
str.encode(charset)
, 解码:bytes.decode(charset)
- 格式化:
print('%2d-%02d' % (3, 1))
- 单引号和双引号括起来的都是字符串,字符串中还有单双引号的用
- 布尔值
- Ture,False(大写首字母)
- 逻辑运算:
and
与,or
或,not
非
- 空值:None
- 变量:字母数字下划线组成,不能以数字开头。
- 常量:大写
- 字符串
-
基本数据结构
- List:
- 创建list:
classmates = ['Michael', 'Bob', 'Tracy']
- 获取长度:
len(classmates) # 3
- Random Access:
classmates[1] # Bob
- Reverse �Access:
classmates[-1 # Tracy]
- 从尾部追加:
classmates.append('Adam') #['Michael', 'Bob', 'Tracy', 'Adam']
- Random Insert:
classmates.insert(1, 'Jack') #['Michael', 'Jack', 'Bob', 'Tracy', 'Adam']
- 删除尾部元素:
pop()
- Random Delele:
pop(i)
- Random Update:
classmates[1] = 'Sarah'
- List元素数据类型不用一致。
- 创建list:
- tuple
- 有序不可修改
- 多种类型
- 一个元素的tuple
t = (1,)
- dict
- 创建:
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
- 读取:
d['Adam']
- 插入和更新:
d['Jack'] = 88
- 删除:
d.pop('Bob')
- 创建:
- Set(Set中的元素不可变)
- 创建Set:
s = set([1, 2, 3]
, 或者s = {1, 2, 3}
- 添加元素:
s.add(4)
- 删除元素:
s.remove(4)
- 运算: 交集
s1 & s2
,并集s1 | s2
- 创建Set:
- List:
-
流程控制
- if elif else,注意缩进和:日了你哥的写法。
- for in range while 懒得写了,最基本的
-
函数
-
定义函数:
def my_abs(x): if x >= 0: return x else: return -x
-
参数:
- 默认参数:
def power(x, n=2)
默认参数要不可变 - 可变参数:
def calc(*numbers)
- 关键字参数(传入必须参数后,再可以传一个dict):
def person(name, age, **kw):
>>> person('Adam', 45, gender='M', job='Engineer') name: Adam age: 45 other: {'gender': 'M', 'job': 'Engineer'} >>> extra = {'city': 'Beijing', 'job': 'Engineer'} >>> person('Jack', 24, **Extra) >>> #传入的只是Extra的一个拷贝,不会修改外部数据 name: Jack age: 24 other: {'city': 'Beijing', 'job': 'Engineer'}
- 命名关键字参数:用来控制关键字的名字:
def person(name, age, *, city, job): print(name, age, city, job)
- 如果前边有偶可变参数,不用单独加
*
了 - 参数定义的顺序必须是:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。
- 默认参数:
-
切片:
- 列表L正常切:
L[0:3]
- 开头为0可以省略:
L[:3]
- 反向切:
L[-2:] #取后两个元素
- 跳着切:
L[::5]
- 原样复制:
L[:]
- 列表L正常切:
-
迭代
- 就一个foreach,可以用于任何Iterable的东西上。
- 如果需要index
>>> for i, value in enumerate(['A', 'B', 'C']): print(i, value) 0 A 1 B 2 C
-
列表生成器,毛列表生成器,就是个for引导:
>>> [x * x for x in range(1, 11) if x % 2 == 0] [4, 16, 36, 64, 100] >>> [m + n for m in 'ABC' for n in 'XYZ'] ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
-
生成器:
- 普通生成器:
g = (x * x for x in range(10))
只是把列表的【】变成括号 - 调用
next(<genetor>)
来蹦出一个个元素。 - 宝宝用yield写一个斐波那契吧,教程写的不好看
def fib(): yield 0 yield 1 head = fib() tail = fib() next(tail) while True: yield next(head) + next(tail)
- 普通生成器:
-
高阶函数:
- map/reduce/filter:没啥特别的,函数直接传名。reduce是左结合的,这几个api一致性做的还不错,第一个参数是函数,第二个参数是list
- 返回一个空参数闭包可以实现lazy
- lambda: 只能写一行,真撒哔啊这种写法。
- 函数可以在函数里面声明:
def log(text): def decorator(func): def wrapper(*args, **kw): print('%s %s():' % (text, func.__name__)) return func(*args, **kw) return wrapper return decorator
- 偏函数:就是Curry了一下,没啥特别的。