一、基础小知识
1、Python是一种脚本语言,源文件通常以.py作为扩展名,其运行方式与java类似,都是编译成字节码后再解释执行的
2、Python2.x与Python3.x是不兼容的,不过2.x由于足够成熟,第三方库丰富,因此,应该根据需要选用,两者并不冲突
3、Python的IDE不像Ms的VS环境那样,独一无二的好用的工具,一般是IDLE或者PythonWin以及其他一些开源的工具,或者就直接使用交互式命令行
4、注意,由于Python是解释性脚本语言,因此,既可以写成一个脚本文件整体执行,也可以在交互式命令环境中片段执行
5、在cmd命令提示符中,输入python –V可以查看当前运行的python版本
6、Python可以在同一行写入多条语句,使用分号隔开即可
7、若一行语句过长,需要折行继续,则可以使用反斜杠\分隔,这个与C++一样
8、Python脚本代码可以直接在Shell中运行
9、倘若要从一个脚本文件运行,例如在D盘下创建一个main.py文件,其中输入代码print(“nihao”,”wohao”),然后进入到命令提示符,进入到D盘目录下,输入命令python main.py,即可运行脚本。很多Python脚本文件都会在第一行指定解释器的位置,但是,注意,真正正确的写法是:#!/usr/bin/envpython
二、开发工具
1、PYPI,也即python package index,是python官方的第三方库的仓库,官方推荐使用pip进行包的下载管理,pip相当于是linux中的yum,apt-get这样的工具,pip需要较高版本的python环境支持,所以,尽量使用较高的版本
2、Python的IDE工具非常的多,除了自带的IDLE外,还有很多,甚至一些商业的工具,有一些跨平台的工具使用JAVA开发的,所以会要求有JVM,就我个人来说,写片段代码使用IDLE比较多,很方便,如果是正式开发,则使用pycharm,这是一个收费的工具,不过很好用
三、注释及特殊运算符
1、#用来表示注释一行,从#开始到这一行结束都表示被注释
2、加减乘除以及取模运算符都是跟C一样的,这里特别介绍除法和乘方操作符
3、使用三重引号可以进行多行注释,只要不将这些字符串赋值给一个变量,都会被当成一个注释,可以是三个单引号,也可以是三个双引号这样的三重引号形式,三重引号的字符串是可以赋值给变量的,会保留字符串中所有的格式
4、在Python中,可以使用分号;将多个语句放在一行上,不过不建议这么做
5、for循环,while循环,if语句的条件都不用放在小括号中,函数定义时,参数需要放在小括号中
四、变量类型
4.1基本规则
I、Python是动态类型语言,不需要在使用变量之前先定义变量类型 ,当给 Python 中的变量赋不同类型的值时,变量呈现不同的类型,例如aa=”nihao”,此时aa是字符串类型;aa=45,则此时aa是数字类型
II、Python是一个强类型的语言,注意不要跟上面的动态类型搞混了,类似2+”2”这样的计算是会报错的,Python并不会进行自动的转换。事实上,强类型是指变量必须有显式的类型,无论这个类型是自动声明还是人工声明的,弱类型语言不需要声明类型
III、变量只能以字母或下划线开头,变量名没有长度限制
IV、在Python中,一切都是对象,包括基本数据类型例如int\float\string,例如x=100,注意,由于x是一个对象,因此x只是指向了100这个数值,而并不是x本身存储了100
4.2连续赋值
I、举例:x,y=34,56,通过这样的语法可以同时给x,y赋值,多个连续的变量可以赋不同类型的值,以上述为例,x,y=y,x,通过这样的语法还可以直接交换x与y变量的值
4.3数据类型
4.3.1 数值类型
I、int、float、long、bool,注意还直接支持complex类型,这是复数类型,Python中直接做了支持,果然是爽啊,不用再自己写类了,定义方式是x=2+3j,注意这里的j是语法的一部分,不能改成其他字母。
II、查看变量类型:通过type(变量名)可以查看,比如type(x)
4.3.2 Decimal类型
I、这个类型称之为十进制数据类型,在进一步介绍这个类型之前,先看一个例子,dd=0.1+0.2,猜猜结果是多少,你一定认为是0.3吧,呵呵,请看:0.30000000000000004,是的,你没有眼花,就是这个值,为什么呢,因为0.1和0.2都是float类型,这个类型存储的是近似值而不是精确的值,那么decimal类型正是提供精确数字的一个类型,不过Decimal并不会内置类型,使用前需要引入decimal模块,看一个例子:
import decimal#引入decimal包
>>>
cc=decimal.Decimal(0.1) #注意后面的Decimal类型D是大写的
>>>dd=decimal.Decimal(0.2)
>>>ee=cc+dd
>>>ee
Decimal('0.30000')#可以看到,输出了0.3
Decimal类型可以设置精度范围:>>> decimal.getcontext().prec=1
将小数位设置为1位精度
4.3.3 数值计算
/ - Float Division,返回一个浮点数类型
// - Integer Division,返回商的整数部分
注意,//并非一早就支持的运算符
4.3.4 字符串类型
I、Python中的字符串可以放在双引号中,也可以放在单引号中,也可以放在三引号中(没错,你没看错,是三引号)
II、单引号与双引号字符串的用途基本一致,如果字符串中存在单引号则字符串可以放在双引号中,反之也是
III、单或双引号表示的字符串,再需要换行书写时,需要换行符号\,例如:
abc=”acd\
jkk”
此时,abc的值是”acdjkk”,注意,换行符与之前的串之间不需要空格
IV、对于三引号的字符串,首先是可以直接换行的,不用使用换行符;另外在字符串中可以放入单引号,双引号等符号;所谓的三引号,可以是这样的”””,也可以是这样的’’’
4.3.5字符串特点
I、字符串一旦创建就不能被修改,只能一直新建
Str1=”nihao”
Str1+=”mike”#到这一步,id(Str1)的地址已经是一个新地址了,等于是
#新建了一个字符串
这其实也是一种防止内存覆盖的方法
4.3.6字符串操作
I、加号+用于字符串连接;
Str1=”hello”+”nihao”或者
Str1+=”end string”
II、星号*用于重复字符串
Str1=”nihao”*3
返回”nihaonihaonihao”
III、字符串切片
s=”welcome”
语法:s[start:end],返回从索引start到索引end-1的子串
例如字符串str=”welcome”,str[0:2]则返回”we”
start或者end可以不填写,则默认start为0,end为末尾,或者说往后一直取值到末尾
若end为负数,比如s[0,-1]则表示从索引0开始,去除掉最后一位字符
负几就是从后面开始去除掉几位字符
例如:str[0:-1]返回”welcom”
Str[0:-3]返回”welc”
IV、取得ASCII码
ord(“a”)ord(“\n”)ord(“ “)
参数中的字符串可以是单引号、双引号、三引号的都可以,但是要注意只能放一个字符,不能使用多个字符组成的字符串
V、通过ASCII码获得字符
chr(97)返回’a’
llen(str)取得字符串长度
max(str)取得字符串中ASCII码最大的字符
min(str)取得字符串中ASCII码最小的字符
lin以及not in操作
用来判断在字符串中是否存在另外一个串
“come” in “welcome”
返回true
“come” not in “welcome”
返回false
VI、字符串比较
可以使用>>=<<===!=进行比较
事实上字符串比较的是各个字符的ASCII码,从左往右比较
例如:str1=”green”str2=”glue”
则比较到r>l,因此str1>str2
VII、循环遍历
for iin str1:
print i
注意,默认情况下是不能支持中文的
VIII、判断函数
isalnum()Returns True if string is alphanumeric
isalpha()Returns True if string contains onlyalphabets
isdigit()Returns True if string contains onlydigits
isidentifier()Return True is string is valid identifier
islower()Returns True if string is in lowercase
isupper()Returns True if string is in uppercase
isspace()Returns True if string contains onlywhitespace
IX、计算某个字符在字符串中出现的次数-count
Str=”nihaohello”
print Str.count(“o”)
计算字符o在Str中出现的次数,返回2
ls.endswith(“”)s.startswith(“”)
判断字符串s是否是以参数中的子串开始或结束的
ls.find(“cc”)在s中查找cc出现的位置索引,搜索不到返回-1
s.rfind(“cc”)在s中从最右边开始查找cc出现的索引,若s中有多个cc,则这里提供了搜索最右边的cc的方法
ls.capitalize()
将字符串的首字母大写
ls.lower()s.upper()
将字符串变形为小写和大写
ls.title()
将字符串中每个单词的首字母都大写
注意,只有字符串中的每个单词之间都用空格分隔才有效
s=”hello world”
s.title()
返回”HelloWorld”
ls.swapcase()
将字符串中的大写字母变成小写字母,反之变成大写字母
ls.replace(old,new)
s=”nihao”
s.replace(“n”,”J”)
返回”Jihao”
4.3.5 Lists类型
l、列表,与C中的数组类似,使用中括号语法创建List,例如:List=[1,2,3,4,5],列表中的元素可以是不同类型的,这个是与C数组很大的区别,例如:List=[“nihao”,123,”hello”]
II、列表可以嵌套,也即列表中可以再有列表
4.3.6 Lists创建
I、除了上述的直接赋值创建方式,还有几种常用的方式
List1=list() #创建一个空列表,当然也可以List1=[]这样创建空列表
List2=list([23,34,45])
List3=list([“你好”,”hellow”,”myworld”])
上面两种方式其实是一样的,都是赋值法,只不过是放在了list()语句中了
也可以直接使用字符串来创建list4=list(“python”)
在这里可以看出,其实字符串就是一个列表
4.3.7 Lists访问
I、访问方式与数组的中括号方式一样
str=[1,2,3,4,5]
str[0]则访问了第一个元素l也可以使用for遍历
>>> list4=list("python")
>>> for i in list4:
print i
II、修改元素
List4[0]=345
列表是可以修改的,这个是与字符串的差别
4.3.8 Lists通用操作
I、个人感觉,list与字符串很是相像,或者说,字符串其实就是列表,基于以上的理解,很多对于字符串的通用操作,对于列表也适用:
xins判断在列表s中是否存在元素x
x not in s判断在列表s中是否不存在元素x
s1+s2串联两个列表,跟串联两个字符串一个意思
s1*n将s1复制n份然后串联起来
s[i]取得列表中某个值,也可以通过这个方式修改某个列表元素
s[i:j]跟取得子串一个意思
len(s)取得列表长度
min(s) max(s)取得列表中ASCII码最小和最大的元素
s1.count(e1)取得s1列表中元素e1出现的次数,
注意,与字符串不同,列表中未必是字符,也可能是数字,
因此e1的传参要看情况,比如s1=[1,2,3,1],则要计算元素1出现的次数,语法为s1.count(1)
sum(s1)当列表s1中都是数字时,可以计算出数字合计值
4.3.9 Lists专用操作
s.append(23)
s.append(“nihao”)
用于在列表后附加元素
s1.extend(s2)
将列表s2附加到s1后面,相当于列表串联
s1.index(“nihao”)
在s1中搜索第一次出现”nihao”的索引位置
s1.insert(1,“nihao”)
在列表索引1的位置插入一个元素”nihao”
s1.pop(index)
删除掉列表s1中索引位置为index的元素,并且返回
若index参数为空,则默认处理列表最后一个元素
s1.remove(x)
从列表s1中删除第一次出现的元素x
s1.reverse()
反转列表s1
s1.sort()
按照ASC规则排序列表中元素
4.3.10 Lists推导式
I、推导式也是构造列表的一种方式,一般形式为:
[表达式for变量in列表]以及
[表达式for变量in列表if条件]
可以认为,这是一种通过for语句创建列表的方式,通过一个表达式构造出一个列表,或者说是推导出一个列表
上面的表达式是通过for后面的变量构造出来的,或者可以这么说,for后面是取值范围,表达式是对取值范围中的数据进一步加工而得出的列表
举例:
Str=[x for x in [1,2,3,4,5]]
得出的列表为[1,2,3,4,5]
Str=[x+1 for x in [1,2,3,4,5]]
得出的列表为[2,3,4,5,6]
Str=[xfor x in [1,2,3,4,5] if x%2==0 ]
这里只是对取值范围加了个条件
4.3.11 字典定义
I、字典用来存储键值对,类似于哈希表或者PHP中的关联数组,字典是可以被更改的语法看起来跟json非常相像,如下:Friends={‘tom’:’12’,’jerry’:’54’}
不同的键值对使用逗号分隔,key部分必须唯一不能重复
Key部分可以使用单引号也可以使用双引号也可以使用三重引号,Value部分也可以并且Value部分也可以是一个列表或者是另外一个字典
lI、可以创建空字典myDic={}
4.3.12 字典处理
I、获得某个key的值、修改以及新增
myDic[“key名”],通过这种语法可以取值也可以赋值
注意不能通过myDic[0]这样取值,必须通过key名来访问
若进行了赋值例如myDic[“newElement”]=678,则若myDic中不存在”newElement”这个key,相当于给字典新增了key-value
II、删除某个key值
del myDic[“keyName”]
III、循环字典
使用for循环
fori in myDic
print myDic[i]
其实,从这里也可以看出,python中的for循环已经内建了迭代器
如果这里的print是print i则会输出所有的key名
IV、通用处理
len(myDict)#取得字典的长度,也即有几个key
key名in
myDict key名not in
myDict #判断某个key是否在字典中
V、比较处理
注意,字典不像字符串可以进行大于小于这样的比较,但是可以进行等于和不等于的比较,例如
d1= {"mike":41, "bob":3}
d2= {"bob":3, "mike":41}
>>>d1 == d2
True
>>>d1 != d2
False
>>
VI、专用处理
myDict.clear()#清空字典
myDict.get(key名)#获得字典中某个key名的value值
myDict.pop(key名)#删除某个key名,并返回相应的value值
myDict.popitem()#随机删除一个key,并返回相应的值
4.3.13 元组定义
I、元组与列表非常像,不过元组一旦创建,就不能新增,删除,替换以及重新排序,因此,元组是不能被修改的,这和列表以及字典都不一样
II、元组可以直接创建,使用圆括号
T1=()
T1=(11,22,33)
也可以使用列表和字符串来创建
T1=tuple([1,2,3,4,5])
T1=tuple(“nihao”)
元组中也可以是字符串,不一定要都是数字,甚至可以是列表和字典
4.3.14 元组通用操作
I、比如对于一个元组
T1=(1,2,3,4,5)
len(T1)#取得元组的长度
min(T1),max(T1)#取得元组中最小和最大的元素
如果元素是字符串,则比较ASCII码
但是注意,对于sum(),只有元素都是数字的元组才有效
II、循环
这个跟列表,字典一样,都是使用for循环处理
for i in t1:
print i
切片
这里与列表的处理也是一样的
T1[0:2]则取得从索引0到1的元组数据,返回一个新的元组
III、取值
T1[0]取得元组第一个元素
T1[1]取得元组第二个元素
in以及not in操作
2 in t1
3 not in t2
分别返回true和false
4.3.15 类型转换
I、Python中的类型转换都可以通过BIF处理
a=10#int转换为float
float(a)
s=”123”#字符串转换为int
int(s)
i=100#数字转化为字符串
str(i)
i=23.97312#四舍五入
round(i,2)或者round(i)
第二个参数指定了保留的小数位数,若没有指定则表示四舍五入到整数