廖老師教程寫的還是不錯的,看了一下午,基本可以寫腳本了。
-
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了一下,沒啥特別的。