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()的入口函数才能执行。这是脚本语言的特点
查看帮助
在命令窗口执行:
# 帮助
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表示:333*3=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)]
类型强制转化
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
跳过后边的代码,立刻进入下一轮循环
while 循环
>>> i = 3;
>>> while i <5:
... print i;
... i = i + 1;
... else:
... print("end of while.")
...
3
4
end of while.
说明:
什么是模块
- 一个
.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'))