- 终端进入 python 交互式环境
python >>>
- 运行 py 文件
>>> python hello.py
- 加载一个模块
Python会在指定的路径下搜索对应的.py文件,默认情况下,Python解释器会搜索当前目录、所有已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中。如果找不到,就会报错。import sys
添加自己的搜索目录:import sys sys.path
- 一是直接修改sys.path:
sys.path.append('xxx')
,这种方法运行结束后失效 - 设置环境变量
PYTHONPATH
- 一是直接修改sys.path:
- 注释 #
- 使用 4 个空格缩进
- 每一行都是一个语句,当语句以冒号 : 结尾时,缩进的语句视为代码块
- py 文件头通常加上
第一行注释是为了告诉Linux/OS X系统,这是一个Python可执行程序,Windows系统会忽略这个注释;#!/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')
- 基本数据类型
- 整数:100 0xff00 int('10')
- 浮点数:1.23 1.23e9 1.23e-3
- 字符串
# 可用 '' 表示 'abc' # 可用 "" 表示 "def" # 字符串包含 ' 可用 "" ,同理 '' "I'm OK" # 使用转义字符 \ (% 需用 %% 转义) 'I\'m OK' # \ 还可用作续行符 "你\ 好" # r''表示''内部的字符串默认不转义 r"C:\test" # 多行 '''可 多 行'''
- 布尔值:True False
- 逻辑运算符:and( & ) or( | ) not
- 空值:None
- NaN
- 常量:PI
- 类型判断函数:
isinstance(,)
eg:isinstance(123,int)
- 运算符
- + - * /( 精确除 ) %
- //( 地板除、取整除 ) **( 乘方 )
字符串和编码
python 以 unicode 编码,在内存中以 unicode 表示。Unicode编码通常是2个字节(ASCII编码是1个字节)
字母A用ASCII编码是十进制的65,二进制的01000001;用Unicode编码的二进制是00000000 01000001(只需要在前面补0)
“可变长编码” —— UTF-8编码。UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节
ord()函数获取字符的整数表示,chr()函数把编码转换为对应的字符:
ord('A') ==> 65
ord('中') ==> 20013
chr(65) ==> A
chr(20013) ==> 中
以十六进制的字符整数编码书写str:
'\u4e2d\u6587' ==> 中文
# 即等价于
'中文'
用带b前缀的单引号或双引号表示一个 bytes 类型:
# x 是 bytes 类型
x = b'ABC'
# y 是 str 类型
y = 'ABC'
str 与 bytes 类型之间的转换:
# str 2 bytes
'ABC'.encode('ascii') ==> b'ABC'
# 在bytes中,无法显示为ASCII字符的字节,用\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') ==> '中文'
计算字符串长度:
len('ABC')
计算字节数:
len(b'ABC')
len('中文'.encode('utf-8'))
替换生成新的字符串:
a = 'abc'
# 因为 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.'
% 运算符就是用来格式化字符串
常见的占位符有:
%d 整数
%f 浮点数
%s 字符串
%x 十六进制整数
# %2d 保留两位数字,%02d 保留两位数字,不够补 0
'%2d-%02d' % (3, 1)
# %.2f 小数点后保留两位
'%.2f' % 3.1415926
数据类型的转换
# 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 的整数序列
列表 list
- str 也可看作是一种 list
定义:
classmates = ['Michael', 'Bob', 'Tracy']
# list里面的元素的数据类型可以不同
L = ['Apple', 123, True]
a = list(range(5))
获取元素个数:
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]
# 支持倒数切片
# 倒数第一个元素的索引是-1
# 同样是包左不包右
# 倒数切片获取的 list 依然是正序,因为默认的隔间取数为 1
L[-2:] ==> ['Bob', 'Jack']
L[-2:-1] ==> ['Bob']
# 获取反向切片,可以:
L[-1:-6:-1]
可按间隔取数
L = list(range(100))
# 前10个数,每两个取一个
L[:10:2]
只写[:]就可以原样复制一个list
L[:]
列表生成式 List Comprehensions —— 用来创建list的生成式
[x * x for x in range(1, 11)] ==> [1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
for循环后面还可以加上if判断
[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']
使用两个变量来生成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}
访问:
# 如果没有对应的 key,会报错
d['Michael']
# 通过in判断key是否存在
'Thomas' in d
# 通过 get 方法获取,没有返回 None
d.get('Thomas')
# 指定当没有返回的 value
d.get('Thomas', -1)
添加键值对:
# d 里没有 key 为 'Adam' 的键值对,如果有,则是修改
d['Adam'] = 67
删除键值对:
d.pop('Bob')
集合 set
定义:
# 提供一个list作为输入集合,重复元素自动被过滤
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')
循环与迭代
for...in循环:
- for...in循环的参数是外部可见的
for i in range(n):
...
# list 的遍历循环(迭代)
names = ['Michael', 'Bob', 'Tracy']
for name in names:
print(name)
# 使用Python内置的 enumerate 函数实现对list实现类似Java那样的下标循环
for i, name in enumerate(names):
print(i, name)
# dict 的遍历循环(迭代)
d = {'a': 1, 'b': 2, 'c': 3}
# 默认情况下,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 循环:
sum = 0
n = 99
while n > 0:
sum = sum + n
n = n - 2
print(sum)
循环相关语句:
-
break
语句 -
continue
语句
可迭代对象 Iterable 与不可迭代对象
- 只要是可迭代对象,无论有无下标,都可以迭代
- 判断一个对象是不是可迭代对象
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)