“人生苦短,我用Python”(” Life is short, you need Python”)
从最开始接触c,c++,VB,SQL,asp,c# ,Java,JS, Android到python。在编程的路上摸爬滚打了好久。最近项目中使用python较多,因此将自己使用感受与大家分享,通过与大家的交流互动进而对python进行更深层次的了解应用。
0x00.python基本介绍
python官网
anaconda官网
pycharm
vscode
环境安装:官网下载安装包安装。建议安装anaconda,在anaconda集成环境中安装各个工具。
0x01.变量及数据类型
- 数据类型
Python有五个标准的数据类型:Numbers数字,String字符串,List列表,Tuple元祖,Dict字典
Numbers数字分为:int整型,long长整型,float浮点型,complex复数
复数由实数部分和虚数部分组成,一般形式为x+yj,其中的x是复数的实数部分,y是复数的虚数部分,这里的x和y都是实数。
注:Python中存在小数字池:-5 ~ 257
String字符串:由数字、字母、下划线组成的一串字符,用于表示文本的数据类型
bool布尔型:True,False,用于做判断
List列表,支持字符,数字,字符串以包含列表(即嵌套),用[]标识,有序对象
Tuple元祖,用()标识,不能二次赋值,可以理解成不可变的列表(只读列表),有序对象
Dict字典:用{}标识,由索引(key)和它对应的值value组成,无序对象
数据类型转换方法: 常用的就是int(),float(),str(),list(),tuple()
。查看类型type()
- 运算符
+
加法
-
减法
*
乘法
/
除法
%
取模,返回除法的余数
//
取整除数
**
幂
- 赋值运算符
运算符 | 描述 | 实例 |
---|---|---|
= | 简单的赋值运算符 | c = a + b 将 a + b 的运算结果赋值为 c |
+= | 加法赋值运算符 | c += a 等效于 c = c + a |
-= | 减法赋值运算符 | c -= a 等效于 c = c - a |
*= | 乘法赋值运算符 | c *= a 等效于 c = c * a |
/= | 除法赋值运算符 | c /= a 等效于 c = c / a |
%= | 取模赋值运算符 | c %= a 等效于 c = c % a |
**= | 幂赋值运算符 | c **= a 等效于 c = c ** a |
//= | 取整除赋值运算符 | c //= a 等效于 c = c // a |
0x02.序列及通用操作
序列:可变序列list,不可变序列tuple、str
判断值是否属于序列print(1 in [1,2,3])
序列的链接print([1,2,3]+[4,5,6])
序列重复print([1,2,3]*2)
索引第一个值[1,2,3][0]
索引最后一个值[1,2,3][-1]
索引中间四个[1,2,3,4,5,6,7,8,9,0][3:-3]
按照2为步长取值[1,2,3,4,5,6,7,8,9,0][::2]
序列的常见方法count,index,append,extend,pop,remove,insert,sort
常见内置函数len,min,max,sum,type
列表生成器
range(5) range(10,100) range(0,10,2)
文本序列
表示方式:"" '' '''xxx'''
转义字符:\
空行:\n
文件路径:/
或者\\
替换:replace,split,join,startswith,endswith,upper,lower,swapcase(大小写互换),capitalize,isnumeric(只包含数字True,否则False),isalpha(所有字符都是字母True,否则False),rstrip(删除字符末尾的空格)
格式化字符:print("this is %i %s %f %0.2f %.2e %g %g" %(1,'a',0.2,0.567,123.123123123,123.12312,123.1))
print("this is {} {} {} {:.2f} {:.2e} {} {}".format(1,'a',0.2,0.567,123.123123123,123.12312,123.1))
转义字符
转义字符 | 描述 |
---|---|
\(在行尾时) | 续行符 |
\\ | 反斜杠符号 |
' | 单引号 |
" | 双引号 |
\a | 响铃 |
\b | 退格(Backspace) |
\e | 转义 |
\000 | 空 |
\n | 换行 |
\v | 纵向制表符 |
\t | 横向制表符 |
\r | 回车 |
\f | 换页 |
\oyy | 八进制数,yy代表的字符,例如:\o12代表换行 |
\xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
\other | 其它的字符以普通格式输出 |
- 字符串运算符
操作符 | 描述 |
---|---|
+ | 字符串连接 |
* | 重复输出字符串 |
[] | 通过索引获取字符串中字符 |
[ : ] | 截取字符串中的一部分 |
in | 成员运算符 - 如果字符串中包含给定的字符返回 True |
not in | 成员运算符 - 如果字符串中不包含给定的字符返回 True |
r/R | 原始字符串 - 原始字符串:所有的字符串都是直接按照字面的意思来使用,没有转义特殊或不能打印的字符。 原始字符串除在字符串的第一个引号前加上字母"r"(可以大小写)以外,与普通字符串有着几乎完全相同的语法。 |
% | 格式字符串 |
- 字符串格式化符号
符号 | 描述 |
---|---|
%c | 格式化字符及其ASCII码 |
%s | 格式化字符串 |
%d | 格式化整数 |
%u | 格式化无符号整型 |
%o | 格式化无符号八进制数 |
%x | 格式化无符号十六进制数 |
%X | 格式化无符号十六进制数(大写) |
%f | 格式化浮点数字,可指定小数点后的精度 |
%e | 用科学计数法格式化浮点数 |
%E | 作用同%e,用科学计数法格式化浮点数 |
%g | %f和%e的简写 |
%G | %f 和 %E 的简写 |
%p | 用十六进制数格式化变量的地址 |
其他常用功能可参考序列
0x03.字典映射
字典是另一种可变容器模型,且可存储任意类型对象。
字典的每个键值 key=>value 对用冒号 : 分割,每个键值对之间用逗号 , 分割,整个字典包括在花括号 {} 中。
申明一个字典
dict = {'name': 123, 98.6: 37, 'class': [1, 2, 3], (1, 2): [6, 7, 8]}
dict = dict(name=123, a= [1, 2, 3])
dict([("a","abc"),("b",123)])
内置函数
dict.update(dic2)
把第二个字典合并到第一个字典。
dict.get(key)
查看key的value,如果没有相应key则返回None
dict.keys()
输出字典所有key,注意这里的输出内容格式是视图,可以用list()得到key的列表
dict.values()
输出字典所有values,同.keys()
dict.items()
输出字典所有items(k,v),原理同.keys()方法
dict.clear()
删除字典内所有元素
dict.pop()
删除字典给定键 key 所对应的值,返回值为被删除的值。key值必须给出。 否则,返回default值。
其他常用功能常见内置函数都通用len,type,cmp
0x04.条件及循环语句
- 条件语句
Python条件语句是通过一条或多条语句的执行结果(True或者False)来决定执行的代码块。
num = 5
if num == 3: # 判断num的值
print 'boss'
elif num == 2:
print 'user'
elif num == 1:
print 'worker'
elif num < 0: # 值小于零时输出
print 'error'
else:
print 'roadman' # 条件均不成立时输出
多条件判断:or and
- 循环语句
控制语句 | 描述 |
---|---|
break 语句 | 在语句块执行过程中终止循环,并且跳出整个循环 |
continue 语句 | 在语句块执行过程中终止当前循环,跳出该次循环,执行下一次循环。 |
pass 语句 | pass是空语句,是为了保持程序结构的完整性。 |
- for循环
for i in range(3):
for j in range(2):
print(i,j)
- while循环
count = 0
while (count < 9):
print('The count is:', count)
count = count + 1
if count == 4:
break
print("Good bye!")
0x05.函数
- 系统内置保留关键字
and | exec | not |
---|---|---|
assert | finally | or |
break | for | pass |
class | from | |
continue | global | raise |
def | if | return |
del | import | try |
elif | in | while |
else | is | with |
except | lambda | yield |
- 内置函数
abs() | divmod() | input() | open() | staticmethod() |
---|---|---|---|---|
all() | enumerate() | int() | ord() | str() |
any() | eval() | isinstance() | pow() | sum() |
basestring() | execfile() | issubclass() | print() | super() |
bin() | file() | iter() | property() | tuple() |
bool() | filter() | len() | range() | type() |
bytearray() | float() | list() | raw_input() | unichr() |
callable() | format() | locals() | reduce() | unicode() |
chr() | frozenset() | long() | reload() | vars() |
classmethod() | getattr() | map() | repr() | xrange() |
cmp() | globals() | max() | reverse() | zip() |
compile() | hasattr() | memoryview() | round() | import() |
complex() | hash() | min() | set() | |
delattr() | help() | next() | setattr() | |
dict() | hex() | object() | slice() | |
dir() | id() | oct() | sorted() | exec |
- def创建函数
#可写函数说明
def printinfo(name,age=35,*vartuple):
"打印任何传入的字符串"
print("Name: ", name)
print("Age ", age)
for var in vartuple:
print(var)
return
printinfo("miki",50,70,60,50);
def vsum(a,b,c):
return a+b+c
vsum = lambda a,b,c:a+b+c
0x06.模块与包
- Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。
模块让你能够有逻辑地组织你的 Python 代码段。
把相关的代码分配到一个模块里能让你的代码更好用,更易懂。
模块能定义函数,类和变量,模块里也能包含可执行的代码。
import 语句来引入模块
from…import 从模块中导入一个指定的部分到当前命名空间中
from…import* 把一个模块的所有内容全都导入到当前的命名空间
模块路径问题
import pandas
print(pandas.file) # 查看现有包所在路径,将自己创建的包存入改路径
import sys
sys.path.append('C:/Users/') # 加载sys包,把新建的py所在路径添加上搜索路径
当你导入一个模块,Python 解析器对模块位置的搜索顺序是:
1、当前目录
2、如果不在当前目录,Python 则搜索在 shell 变量 PYTHONPATH 下的每个目录。
3、如果都找不到,Python会察看默认路径。UNIX下,默认路径一般为/usr/local/lib/python/。
模块搜索路径存储在 system 模块的 sys.path 变量中。变量里包含当前目录,PYTHONPATH和由安装过程决定的默认目录。PYTHONPATH 变量
作为环境变量,PYTHONPATH 由装在一个列表里的许多目录组成。PYTHONPATH 的语法和 shell 变量 PATH 的一样。
在 Windows 系统,典型的 PYTHONPATH 如下:
set PYTHONPATH=c:\python27\lib;
在 UNIX 系统,典型的 PYTHONPATH 如下:
set PYTHONPATH=/usr/local/lib/python
0x07.数据读写
- Python File读写
f = open('path.txt', 'r')
print(f.read())
f.close()
f = open('path.txt', 'w', encoding = 'utf8')
lst='abcd'
f.writelines(lst)
f.close()
file.flush()刷新文件内部缓冲
file.read([size])从文件读取指定的字节数,如果未给定或为负则读取所有。
file.readline([size])读取整行,包括 "\n" 字符。
file.readlines([sizeint])读取所有行并返回列表,若给定sizeint>0,则是设置一次读多少字节,这是为了减轻读取压力。
file.seek(offset[, whence])设置文件当前位置
file.write(str)将字符串写入文件,返回的是写入的字符长度。
- pickle读写
import pickle
data = {'a':[1,2,3,4], 'b':11, 'c':'asd'}
p = open( 'data.pkl', 'wb')
pickle.dump(data,p)
p.close()
f = open( 'data.pkl', 'rb')
s = pickle.load(f)
- mode 参数
模式 | 描述 |
---|---|
t | 文本模式 (默认)。 |
x | 写模式,新建一个文件,如果该文件已存在则会报错。 |
b | 二进制模式。 |
+ | 打开一个文件进行更新(可读可写)。 |
U | 通用换行模式(不推荐)。 |
r | 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式。 |
rb | 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式。一般用于非文本文件如图片等。 |
r+ | 打开一个文件用于读写。文件指针将会放在文件的开头。 |
rb+ | 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。一般用于非文本文件如图片等。 |
w | 打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb | 以二进制格式打开一个文件只用于写入。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
w+ | 打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。 |
wb+ | 以二进制格式打开一个文件用于读写。如果该文件已存在则打开文件,并从开头开始编辑,即原有内容会被删除。如果该文件不存在,创建新文件。一般用于非文本文件如图片等。 |
a | 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
ab | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入。 |
a+ | 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写。 |
ab+ | 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写。 |