Python 基础知识汇总
前言
开发工具:
pip install ipython==5.7.0
基础
- python 文件后缀
py
源代码文件
pyc
字节码文件
pyd
Python 可直接调用的 C 语言动态链接库文件,一般只存在于 Windows 系统
pyi
文件是 PEP484 提案规定的一种用于 Python 代码类型提示(Type Hints)的文件
PEP(Python Enhancement Proposals)
python 正式规范文档
- 生成方式
pip install mypy
stubgen xxx.py
pyo
优化后的字节码文件
pyx
CPython 包源文件,一般用来编写 Python 的 C 扩展
pyw
一般只存在于 Windows 系统
pyd
Python 的库文件(Python 版 DLL)、在 Linux 上是 so 文件
- Python 不区分单引号(
'
)和双引号("
)
- 缩进:单个制表符
- Python 的程序缺省是顺序执行的,而不像 c、java 和 golang 一样需要一个 main()的入口函数才能执行。这是脚本语言的特点
查看帮助
# 本地web查看帮助
pydoc3
# 帮助
help(<>)
# 获取对象的所有属性和方法
dir(<>)
unicode
- python 中,
u''
表示unicode
- unicode 用两个字节表示一个字符,存纯英文会浪费,于是出现可变长的 UTF-8。UTF-8 中,英文占一个字节,汉字占三个字节
- unicode 转换成 utf-8:
u'我'.encode('utf-8')
-> '\xe6\x88\x91'
- utf-8 转换成 unicode:
'\xe6\x88\x91'.decode('utf-8')
-> u'\u6211'
- 当 python 源码中包含中文时,要添加文件编码如下:
- 满足正则表达式
^[ \t\v]*#.*?coding[:=][ \t]*([-_.a-zA-Z0-9]+)
即可
# -*- coding: UTF-8 -*-
// or
#coding=utf-8
变量
Python 中的变量不需要声明类型,是弱类型语言,可以直接使用=
号赋值。
命名规则:
- 以
_
分隔变量单词
- 变量区分大小写
- 变量命令中前导
_
的使用:
__xxx__
是特殊变量,可以直接访问,不是 private 变量
_xxx
虽然我可以被访问,但是,请把我视为私有变量,不要随意访问
__xxx
不能直接从外部访问
全局标量
使用 global
关键字声明
global 变量名
运算符
**
幂:3*4 表示:3333=81
/
除:x/y
//
取整除:4//3.0=1.0
%
取模:4%3.0=1
<<
左移:把一个数的比特向左移一定数目(每个数在内存中都表示为比特或二进制数字,即 0 和 1)2 « 2 得到 8。——2 按比特表示为 10
>>
右移把一个数的比特向右移一定数目 11 » 1 得到 5。——11 按比特表示为 1011,向右移动 1 比特后得到 101,即十进制的 5。
&
安位与:5&3=11
not
布尔非:x = True; not y 返回 False。
说明:
- 混合运行,计算顺序是从左到右的,
()
可以改变计算顺序
- 幂运算比取反运算优先级高
逻辑判断符
||
<-> or
&&
<-> and
!
<-> not
数据类型
一切是皆对象
int
float
boolean
: False
, True
string
list
tuple
dict
set
file
容器使用来存放一些对象的数据结构。根据使用方式的不同,Python 提供了列表(list)
、元组(trupe)
、字典(dict)
。
字符串(string)
Python 字符串
列表(list)
Python 字符串
元组(tuple)
元组和列表很相似(元组是不可变的类别
),唯一的区别是元组定义好之后,就不能在改动,定义:
a = (元素1,元素2,元素3...)
说明:
- 若修改元组报错:
TypeError: 'tuple' object does not support item assignment
- 元组的索引、切片规则和数组相同
tuple()
函数的功能与 list()
函数基本上是一样的:以一个序列作为参数并把它转换为元组
- tuple
a=(1,)
与 a=(1)
不同
字典(dict)
Python 中的字典就像是 Java 中的 map,存储 键值对
。示例:
a = {}
a = {key1:value1,key2:value2}
说明:
>>> x = {"b": 2, "c": 4, "a": 1}
>>> sorted(x.items(), key=lambda i: i[1])
[('a', 1), ('b', 2), ('c', 4)]
>>> sorted(x.items(), key=lambda i: i[0])
[('a', 1), ('b', 2), ('c', 4)]
集合(set)
- 集合用来保存不重复的元素
- 存储整形、浮点型、字符串、元组,无法存储列表、字典、集合等可变的数据类型
- Python 集合会将所有元素放在一对大括号
{}
中,用 ,
分隔
- 声明
x=set() 或 x=set(iteration) 或 y = {1, 2, 3}
,后者不能为空
- 使用
- 遍历
for in
- 添加
add
- 删除
del
或 remove
- 合并
set.union(set1, set2...) 或 z = x.union(y)
frozenset
冻结的集合
类型强制转化
type(str)
获取变量的类型,使用如下方法可以对类型进行强制转换:
- int(1.2)
- int(‘12’)
- float(3)
- bool(1)
- bool(’')
- unicode(100)
- str(b) 将对象强制转化为字符串
- long()
流程控制
条件语句
love = True
if love== True:
print "ilove you"
else:
print "I not love you"
if ......:
print "ilove you"
elif .......:
print "...................................."
else:
print "I not love you"
三目表达式
'event' if a%2 == 0 else 'odd'
'odd' if a%2 else 'event'
for 循环
for i in range(5):
Print i
说明:
- 任何可迭代对象都可以作用于 for 循环,
isinstance('abc', Iterable)
判断是否可迭代
range()
内置函数:range(初始值,终止值,步长)
- 终止值:是采用小于,而不是小于等于,所以是满足条件的是不包含终止值的
- 如:
range(10, 5, -1)[2]
break
可以结束 for
、while
循环
continue
跳过后边的代码,立刻进入下一轮循环
- 一行的实现
x = [1, 2, 3, 4]
y = [i for i in x if i%2==0]
while 循环
>>> i = 3;
>>> while i <5:
... print i;
... i = i + 1;
... else:
... print("end of while.")
...
3
4
end of while.
说明:
print 输出
# 输出到标准输出,print函数的默认输出等价于 sys.stdout.write(),只是 print 会自动换行,而 stdout 需要手动添加转义符 "\n"
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
# 输出到标准错误
print('hello world!', file=sys.stderr)
# shell 的实现
# >&2 echo "hi"
# 输出到文件
with open('test.log', 'a') as f:
print('hello world!', file=f)
# 用 print 打印输出但不换行
print("...", end='')
sys.stdout.flush() # 一定要支持,输出到屏幕
什么是模块
- 一个
.py
文件就是一个模块。每个模块实现相对独立的功能,使用import
指令导入模块。
- 每一个包目录下面都会有一个
__init__.py
的文件,这个文件是必须存在的,否则,Python 就把这个目录当成普通目录,而不是一个包。__init__.py
可以是空文件,也可以有 Python 代码,因为__init__.py
本身就是一个模块
import sys
print 'the command line argument are:'
for i in sys.argv:
print i
print '\n\nThe PYTHONPATH is', sys.path, '\n'
- 自己写的模块(
.py
文件)一定不要与系统自带的模块重名,除非你想替代
from 模块名 import *
或from 模块名 import 对象
练习代码
str = "abcdef"
a_list = list(str)
a_list
# ['a', 'b', 'c', 'd', 'e', 'f']
a_tuple = tuple(a_list)
a_tuple
# ('a', 'b', 'c', 'd', 'e', 'f')
''.join(a_tuple)
'abcdef'
# -*- coding: utf-8 -*-
def t(arr):
r = []
for i, e in list(enumerate(arr)):
if i%2:
r.append((arr[i-1], e))
if len(arr)%2:
r.append((arr[-1], None))
return r
def t2(arr):
return [(arr[i], arr[i + 1] if len(arr) != i + 1 else None) for i in range(0, len(arr), 2)]
if __name__ == '__main__':
print t(list('abcdef'))
print t(list('abc'))
print t2(list('abcdef'))
print t2(list('abc'))