Python 基础知识汇总
前言
开发工具:
- 安装
ipython,方便命令行编辑:
pip install ipython==5.7.0- Pycharm
- Vscode
基础
- python 文件后缀
py源代码文件pyc字节码文件pydPython 可直接调用的 C 语言动态链接库文件,一般只存在于 Windows 系统pyi文件是 PEP484 提案规定的一种用于 Python 代码类型提示(Type Hints)的文件PEP(Python Enhancement Proposals)python 正式规范文档- 生成方式
pip install mypystubgen xxx.py
pyo优化后的字节码文件pyxCPython 包源文件,一般用来编写 Python 的 C 扩展pyw一般只存在于 Windows 系统pydPython 的库文件(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=11not布尔非:x = True; not y 返回 False。
说明:
- 混合运行,计算顺序是从左到右的,
()可以改变计算顺序 - 幂运算比取反运算优先级高
逻辑判断符
||<-> or&&<-> and!<-> not
数据类型
一切是皆对象
intfloatboolean:False,Truestringlisttupledictsetfile
容器使用来存放一些对象的数据结构。根据使用方式的不同,Python 提供了列表(list)、元组(trupe)、字典(dict)。
字符串(string)
列表(list)
元组(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}说明:
-
取值:
a["key"] -
修改:
a["key"] = "value" -
添加元素:
a["new-key"] = "new-value" -
常用方法:
- get()
- keys()/values()/items()
- pop()
- update()
- clear()
-
字典dict迭代的是 key- 如果要迭代 value,用
for value in d.itervalues() - 如果要同时,用
for k, v in d.iteritems()
- 如果要迭代 value,用
-
dict 排序示例
>>> 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()
流程控制
条件语句
- if..else..
love = True
if love== True:
print "ilove you"
else:
print "I not love you"- if..elif..else..
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 … in …
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.说明:
else是可选的,最后执行
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'))