- 終端進(jìn)入 python 交互式環(huán)境
python >>> - 運(yùn)行 py 文件
>>> python hello.py - 加載一個模塊
Python會在指定的路徑下搜索對應(yīng)的.py文件,默認(rèn)情況下,Python解釋器會搜索當(dāng)前目錄、所有已安裝的內(nèi)置模塊和第三方模塊,搜索路徑存放在sys模塊的path變量中。如果找不到,就會報(bào)錯。import sys
添加自己的搜索目錄:import sys sys.path- 一是直接修改sys.path:
sys.path.append('xxx'),這種方法運(yùn)行結(jié)束后失效 - 設(shè)置環(huán)境變量
PYTHONPATH
- 一是直接修改sys.path:
- 注釋 #
- 使用 4 個空格縮進(jìn)
- 每一行都是一個語句,當(dāng)語句以冒號 : 結(jié)尾時(shí),縮進(jìn)的語句視為代碼塊
- py 文件頭通常加上
第一行注釋是為了告訴Linux/OS X系統(tǒng),這是一個Python可執(zhí)行程序,Windows系統(tǒng)會忽略這個注釋;#!/usr/bin/env python3 # -*- coding: utf-8 -*-
第二行注釋是為了告訴Python解釋器,按照UTF-8編碼讀取源代碼,防止亂碼 - 輸出
print('xxx') print('a','b','c') print(100) - 輸入
input() a = input() a = input('enter something') - 基本數(shù)據(jù)類型
- 整數(shù):100 0xff00 int('10')
- 浮點(diǎn)數(shù):1.23 1.23e9 1.23e-3
- 字符串
# 可用 '' 表示 'abc' # 可用 "" 表示 "def" # 字符串包含 ' 可用 "" ,同理 '' "I'm OK" # 使用轉(zhuǎn)義字符 \ (% 需用 %% 轉(zhuǎn)義) 'I\'m OK' # \ 還可用作續(xù)行符 "你\ 好" # r''表示''內(nèi)部的字符串默認(rèn)不轉(zhuǎn)義 r"C:\test" # 多行 '''可 多 行'''- 布爾值:True False
- 邏輯運(yùn)算符:and( & ) or( | ) not
- 空值:None
- NaN
- 常量:PI
- 類型判斷函數(shù):
isinstance(,)eg:isinstance(123,int) - 運(yùn)算符
- + - * /( 精確除 ) %
- //( 地板除、取整除 ) **( 乘方 )
字符串和編碼
python 以 unicode 編碼,在內(nèi)存中以 unicode 表示。Unicode編碼通常是2個字節(jié)(ASCII編碼是1個字節(jié))
字母A用ASCII編碼是十進(jìn)制的65,二進(jìn)制的01000001;用Unicode編碼的二進(jìn)制是00000000 01000001(只需要在前面補(bǔ)0)
“可變長編碼” —— UTF-8編碼。UTF-8編碼把一個Unicode字符根據(jù)不同的數(shù)字大小編碼成1-6個字節(jié),常用的英文字母被編碼成1個字節(jié),漢字通常是3個字節(jié),只有很生僻的字符才會被編碼成4-6個字節(jié)
ord()函數(shù)獲取字符的整數(shù)表示,chr()函數(shù)把編碼轉(zhuǎn)換為對應(yīng)的字符:
ord('A') ==> 65
ord('中') ==> 20013
chr(65) ==> A
chr(20013) ==> 中
以十六進(jìn)制的字符整數(shù)編碼書寫str:
'\u4e2d\u6587' ==> 中文
# 即等價(jià)于
'中文'
用帶b前綴的單引號或雙引號表示一個 bytes 類型:
# x 是 bytes 類型
x = b'ABC'
# y 是 str 類型
y = 'ABC'
str 與 bytes 類型之間的轉(zhuǎn)換:
# str 2 bytes
'ABC'.encode('ascii') ==> b'ABC'
# 在bytes中,無法顯示為ASCII字符的字節(jié),用\x##顯示
'中文'.encode('utf-8') ==> b'\xe4\xb8\xad\xe6\x96\x87'
# bytes 2 str
b'ABC'.decode('ascii') ==> 'ABC'
b'\xe4\xb8\xad\xe6\x96\x87'.decode('utf-8') ==> '中文'
計(jì)算字符串長度:
len('ABC')
計(jì)算字節(jié)數(shù):
len(b'ABC')
len('中文'.encode('utf-8'))
替換生成新的字符串:
a = 'abc'
# 因?yàn)?str 是不可變對象,所以替換后賦予 b
b = a.replace('a', 'A') b ==> 'Abc
格式化字符串:
'Hello, %s' % 'world' ==> 'Hello, world'
'Hi, %s, you have $%d.' % ('Michael', 1000000) ==> 'Hi, Michael, you have $1000000.'
% 運(yùn)算符就是用來格式化字符串
常見的占位符有:
%d 整數(shù)
%f 浮點(diǎn)數(shù)
%s 字符串
%x 十六進(jìn)制整數(shù)
# %2d 保留兩位數(shù)字,%02d 保留兩位數(shù)字,不夠補(bǔ) 0
'%2d-%02d' % (3, 1)
# %.2f 小數(shù)點(diǎn)后保留兩位
'%.2f' % 3.1415926
數(shù)據(jù)類型的轉(zhuǎn)換
# str 2 int
a = int('123')
# int 2 str
b = str(100)
# str 2 float
a = float('123.1')
# float 2 str
b = str(1.23)
# int 2 bool
a = bool(1)
# str 2 bool
b = bool('') ==> False
序列
range(5) 生成一個 0-4 的整數(shù)序列
列表 list
- str 也可看作是一種 list
定義:
classmates = ['Michael', 'Bob', 'Tracy']
# list里面的元素的數(shù)據(jù)類型可以不同
L = ['Apple', 123, True]
a = list(range(5))
獲取元素個數(shù):
len(classmates)
訪問,通過索引:
classmates[0]
# 注意越界問題
classmates[len(classmates) - 1]
# 可反向訪問,也要注意越界問題
classmates[-1]
添加元素:
# 追加元素到末尾
classmates.append('Adam')
# 添加元素到指定位置
classmates.insert(1, 'Jack')
刪除元素:
# 刪除末尾元素
classmates.pop()
# 刪除指定位置元素
classmates.pop(1)
修改元素:
classmates[1] = 'Sarah'
切片 slice —— 取一個list或tuple的部分元素
L = ['Michael', 'Sarah', 'Tracy', 'Bob', 'Jack']
# 取前3個元素
L[0:3]
# 如果第一個索引是0,還可以省略
L[:3]
# 支持倒數(shù)切片
# 倒數(shù)第一個元素的索引是-1
# 同樣是包左不包右
# 倒數(shù)切片獲取的 list 依然是正序,因?yàn)槟J(rèn)的隔間取數(shù)為 1
L[-2:] ==> ['Bob', 'Jack']
L[-2:-1] ==> ['Bob']
# 獲取反向切片,可以:
L[-1:-6:-1]
可按間隔取數(shù)
L = list(range(100))
# 前10個數(shù),每兩個取一個
L[:10:2]
只寫[:]就可以原樣復(fù)制一個list
L[:]
列表生成式 List Comprehensions —— 用來創(chuàng)建list的生成式
[x * x for x in range(1, 11)] ==> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
for循環(huán)后面還可以加上if判斷
[x * x for x in range(1, 11) if x % 2 == 0] ==> [4, 16, 36, 64, 100]
使用兩層循環(huán),可以生成全排列
[m + n for m in 'ABC' for n in 'XYZ'] ==> ['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
使用兩個變量來生成list
d = {'x': 'A', 'y': 'B', 'z': 'C' }
[k + '=' + v for k, v in d.items()] ==> ['y=B', 'x=A', 'z=C']
元組 tuple
tuple 和 list 非常類似,但 tuple 一旦初始化就不能修改
定義:
classmates = ('Michael', 'Bob', 'Tracy')
# 定義一個只有1個元素的tuple
t = (1,)
訪問,通過索引:
classmates[0]
字典 dict
定義:
d = {'Michael': 95, 'Bob': 75, 'Tracy': 85}
訪問:
# 如果沒有對應(yīng)的 key,會報(bào)錯
d['Michael']
# 通過in判斷key是否存在
'Thomas' in d
# 通過 get 方法獲取,沒有返回 None
d.get('Thomas')
# 指定當(dāng)沒有返回的 value
d.get('Thomas', -1)
添加鍵值對:
# d 里沒有 key 為 'Adam' 的鍵值對,如果有,則是修改
d['Adam'] = 67
刪除鍵值對:
d.pop('Bob')
集合 set
定義:
# 提供一個list作為輸入集合,重復(fù)元素自動被過濾
s = set([1, 2, 3])
添加:
s.add(4)
刪除:
s.remove(4)
集合的概念 —— 集合的交集和并集:
s1 & s2
s1 | s2
條件判斷
age = 3
if age >= 18:
print('adult')
elif age >= 6:
print('teenager')
else:
print('kid')
循環(huán)與迭代
for...in循環(huán):
- for...in循環(huán)的參數(shù)是外部可見的
for i in range(n):
...
# list 的遍歷循環(huán)(迭代)
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
# 使用Python內(nèi)置的 enumerate 函數(shù)實(shí)現(xiàn)對list實(shí)現(xiàn)類似Java那樣的下標(biāo)循環(huán)
for i, name in enumerate(names):
print(i, name)
# dict 的遍歷循環(huán)(迭代)
d = {'a': 1, 'b': 2, 'c': 3}
# 默認(rèn)情況下,dict迭代的是key
for key in d:
print(key)
# 迭代 value
for value in d.values():
print(value)
# 迭代 key-value
for k, v in d.items():
print(k, " :", v)
while 循環(huán):
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
循環(huán)相關(guān)語句:
-
break語句 -
continue語句
可迭代對象 Iterable 與不可迭代對象
- 只要是可迭代對象,無論有無下標(biāo),都可以迭代
- 判斷一個對象是不是可迭代對象
from collections import Iterable isinstance('abc', Iterable) ==> True isinstance([1,2,3], Iterable) ==> True isinstance(123, Iterable) ==> False - 可迭代對象有:list、tuple、dict、set、str、generator(包括生成器和帶yield的generator function)