文章目录
一、概述
Python是解释性 的面向编程 语言,主要有两个版本:Python2 和Python3 。(Python3设计时没有考虑向下兼容! )
命令行形式执行py文件:python xxx.py
二、基础语法
Python3中,一切皆为对象 ,拥有三个属性:
标识:id(变量名)
类型:type(变量名)
值:print(变量名)
Python是动态类型语言,变量不需要显式声明数据类型 !(会根据赋值自动确定其类型)
有自动垃圾回收机制 ,不被引用的变量会被回收,也可以用del()删除 。
==判断两个变量指向的对象值是否相同
is 判断两个变量指向的对象是否相同
不可变对象 创建后不可修改值,如int,str,complex等
(注:是对象不可变,不是变量不可变!)
标识符
第一个字母必须是字母/下划线 ,其他的可以是字母/下划线/数字 ,区分大小写!
(双下划线开始与结束 的名称通常有特殊含义,尽量避免使用,如__init__,也不要用预定义的标识符/关键字 ,如int,str等)
标识符命名规则:
1.模块/包:全小写+下划线
2.函数名:全小写+下划线
3.变量名:全小写+下划线
4.类名:大写驼峰
5.常量:全大写+下划线
(python其实不支持常量,因此只用后续不修改值的变量当做常量。)
变量
python支持对变量链式赋值 与系列解包赋值:
python
x=y=123 # 表示x=123,y=123
x,y=1,2 # 表示x=1,y=2
python的整除是//,普通除法是/!
运算符及其优先级序
简单语句&复杂语句
python语句分为简单语句和复杂语句
复杂语句:循环(for/while)、判断(if)、try、with、函数/类的定义
空语句pass,什么都不执行
注释:以**#**开头,一整行
自定义函数
自定义函数:
python
def 函数名(参数表):
函数内置函数:
dir():函数内的所有属性与方法
type():<class '__ main __.函数名'>
id():标识符
help():
len():对象长度/个数
类和对象
python
class XXX:
def yyy(self):
模块导入
import XXX:可以调用XXX.YY()方法
from XXX import YY:可以调用YY()方法
if语句
在python中 if语句中最外面的括号不是必须的。
python
if(x>0):
if x>0:# 二者是一样的
循环语句
用break 和continue来中断或跳过循环。
可迭代对象(适用于循环的)
序列(如字符串),列表,元组,字典,文件对象,迭代器(iterator),生成器函数(generator)。
for语句
python
for 变量 in range(begin,end,step) #(范围是 [begin,end) !step可不写,默认为1)
while语句
python
while(条件表达式):
enumrate函数
用于在循环中用下标访问元素。
python
for index,value in enumerate(array,start=0):# start表示起始位置,默认从0开始
print(index,value)
zip函数
用于将多个可迭代的对象打包成一个个元组。
python
x=[1,2,3]
y=[4,5,6]
list(zip(x,y)) # 输出[(1,4),(2,5),(3,6)]
for i,j in zip(x,y):
print(i,j)
map函数
将某个操作作用于可迭代对象中的所有元素(即对内部元素批处理某个操作)
python
list(map(abs,[-1,0,7,8]))# 输出[1,0,7,8]
list(map(pow,range(5),range(5)))# 表示0**0,1**1,...4**4,输出[1,1,4,27,256]
三、内置数据类型
数值:int,bool,float,complex (python没有double )
序列:不可变(str,tuple ,bytes)、可变(list,bytearray)
集合:set,frozenset
字典:dict({1:"xxx",2:"yyy"})
NoneType
int对象
python
int(x,base=10)# 默认进制是10
int('100',2)# 即十进制下的4
float对象
python
float('Infinity'),float('-Infinity'),float('3.14'),float('NaN')
# 支持定义inf,-inf,NaN
as_integer_ratio():转化为分数
hex():化为十六进制串
float.fromhex(str):十六进制串化为浮点数
is_integer():是否是整数
complex对象
部分运算需要
python
import cmath # 部分运算需要cmath
x=complex(a,b)# 定义一个复数(a+bj)
x.real()# 实部
x.imag()# 虚部
x.conjugate()# 共轭虚数
bool对象
python
bool(0) # false
bool(1) # true
bool('xxx') # 非空串会被转化为true,否则为false
str对象
python中没有独立的字符对象(即没有char ),将字符视为长度为1的字符串 。
不可变对象
python
# 单引号'111'
# 双引号"123"
# 三单引号'''123'''(可以跨行)
# 三双引号"""123"""(可以跨行)
str(123) # '123'
str(True) # 'True'
str(3.14) # '3.14'
str(sample,encoding='utf-8',)
Python3字符默认为16为unicode编码,可以用**ord()进行转化(ascii字符会被转化为ascii编码),用chr()**可以把对应的编码转化为字符。
转义字符
字符串格式化(兼容Python2的用法)
python
"{0},{1}".format(51,81.2)
str.format("{0},{1}",15,81.2)
format(81.2,"0.5f") # 81.20000
"%d%.2f"%(15,81.2)
bytes对象
byte与bytearray不接受字符串参数,只接受bytes和bytearray参数。
操作与字符串类似。
bytearray对象
类型混合运算与数字转换
int,float,complex可以混合运算,也可以强制转换
内置数学函数
四、序列数据
内置序列数据:tuple,list,str,bytes,bytearray
python
x=(1,2,3)# 元组,数据不可变
x=[1,2,3]# 列表
x="123"# 字符串
x="x22"
x.encode("utf-8")
序列数据基本操作
len():序列长度
min()/max():序列最大/最小值
sum():序列中元素之和(字符串不可以用sum )
all():如果全体数值为True则为True
any():如果存在数值为True则为True
序列切片
[start: end :step]:表示**[start,end)区间的子序列,step默认为1,step为-1时表示 倒序**
当end为空时默认为末尾 ,表示从start开始向后取
当start为空时默认为开头 ,表示从end开始向前取
当start/end为负数时,表示倒着取下标。
python
s='abcdef'
s[1:3]# 从下标为1开始,到3为止(不包括3),即'bc'
s[3:10]# 同上,为'def'
s[8:2]# 同上,为''
s[:]# 全选,即'abcdef'
s[:2]# 从下标2开始倒着取(不包括2),即'ab'
s[::2]# 全体中两个两个取,即'ace'
s[::-1]# 全体倒着取,即'fedcba'
序列连接&序列重复
用"+"号和"*"号。
python
s1='abc'
s2='xyz'
s1+s2 # 'abcxyz'
s1*3 #'abcabcabc'
s2*=2 #'xyzxyz'
序列成员操作
python
s='good'
'o' in s# 是否在序列中出现,为True
s.count('o')# 统计出现次数,为2
s.index('d')# 字符在序列中第一次出现的下标,为3
序列比较
逐个字符比较,其次短的比长的小。
序列排序
python
sorted(s1,reverse=True,key=str.lower)# 是否翻转序列,是否降序排序
序列拆分
python
first,*middle,last=range(10)
# 第一个和最后一个是变量,中间的是元组变量,值为[1,2,3,4,5,6,7,8]
元组基本操作
python
tuple(iterable)
列表基本操作
python
list(iterable)
s[i]=xxx# 设置下标的元素
del s[i]/s[i:j]# 删除第i/[i:j]个,后面的向前覆盖
[表达式 for i in range(10)]# 创建10个元素构造的数组(常用于构建一维数组)
[i**2 for i in range(5)]# [0,1,4,9,16]
五、输入输出
访问命令行参数
sys.argv
sys.argv[0]表示Python脚本名
sys.argv[1]表示第一个参数,sys.argv[2]表示第二个参数,以此类推。
argparse
解析命令行参数并转化
python
# 假设输入python xxx.py --length 5 --width 3
import argparse
parser=argparse.ArgumentParser()
parser.add_argument('--length',default=10,type=int,help='长度')
parser.add_argument('--width',default=10,type=int,help='宽度')
args=parser.parse_args()
args.length,args.width # 从参数中获取的属性,分别是5和3
输入输出
python
input()
print(value,sep=' ',end='\n',file=sys.stdout,flush=False)
# sep表示分隔符,end表示换行符,file表示写入的文件流,默认为控制台sys.stdout,flush表示是否强制写入流
密码式输入
python
import getpass
passwd=getpass.getpass("请输入密码")
六、文件操作
文件基本操作
python
f=open(file,mode='r',buffering=-1,encoding=None)
# mode:r只读,w写入(会清空之前内容),x创建新文件,
# a(末尾追加),b(二进制文件),t(文本文件,默认值),+(可读写)
while(f.readline()):# 逐行读取
xxx
f.close()
python
with open(file,mode='r',buffering=-1,encoding=None) as f:
while(f.readline()):
xxx
f.close()
文件流
输入流:sys.stdin
输出流:sys.stdout
错误流:sys.stderr
重定向
python
f=open('test.log','w')
sys.stdout=f# 将标准输出流重定向到文件test.log内
print(xxxx)
命令行重定向:
python
python xxx.py > test.out
python xxx.py < test.in
管道
将一个程序的输出作为下一个程序的输入
过滤器
将某种输入流转化为输出流