一、python的特点
简介:编程语言分为两大类,分别是编译型和解释型,例如c语言属于编译型的语言,而python属于解释型的语言,编译型的语言需要经过编译后成为程序执行,速度较快,而python每输入一条语句就可以别解释执行,但速度比较慢,就程序员来说,python的开发效率更高。
1. 简单
Python是一种代表简单思想的语言。
2. 易学
Python有极其简单的语法。
3. 免费、开源
Python是FLOSS(自由/开放源码软件)之一。
4. 高层语言
使用Python编写程序时无需考虑如何管理程序使用的内存一类的底层细节。
5. 可移植性
Python已被移植到很多平台,这些平台包括Linux、Windows、FreeBSD、Macintosh、Solaris、OS/2、Amiga、AROS、AS/400、BeOS、OS/390、z/OS、Palm OS、QNX、VMS、Psion、Acom RISC OS、VxWorks、PlayStation、Sharp Zaurus、Windows CE甚至还有PocketPC。
6. 解释性
可以直接从源代码运行。在计算机内部,python解释器把源代码转换为字节码的中间形式,然后再把它翻译成计算机使用的机器语言。
7. 面向对象
python既支持面向过程编程也支持面向对象编程。
8. 可扩展性
部分程序可以使用其他语言编写,如c/c++。
9. 可嵌入型
可以把Python嵌入到c/c++程序中,从而提供脚本功能。
10. 丰富的库
Python标准库确实很庞大。它可以帮助你处理各种工作,包括正则表达式、文档生成、单元测试、线程、数据库、网页浏览器、CGI、FTP、电子邮件、XML、XML-RPC、HTML、WAV文件、密码系统、GUI(图形用户界面)、Tk和其他与系统有关的操作。
二、python保留字
截图来自《python开发技术详解》
总共为32个保留字。
三、常用的输入输出函数
简介:python常用的输入输出函数为input、print
#输入函数——input()
'''例如:给a赋值,无论输入的是整型(int)、浮点型(float)、还是字符串(str),都会以字符串的方式赋值给变量,变量再赋值的时候确定类型。鉴于此,我们需要使用强制类型转换来将str->int,str->float'''
#1、输入字符串
aStr=input("输入字符串")#input括号内的内容为提示性文字,由于输入的内容将以字符串保存,不用转换类型。
aInt=int(input("输入整型数字"))#通过int()将原本为"int"->int
aFloat=float(input("输入一个浮点数"))#通过float()将原本为"float"->float
print(aStr)
print(aInt)
print(aFloat)
#2、输出函数
#输出函数print,使用比较灵活,可以直接print(变量名),若要格式化输出则类似C语言,不同之处在于格式,或者使用格式化输出函数
#2.1直接输出变量名
print(aInt)
#2.2使用+来拼接字符串
print("字符串"+"可以拼接,还可以拼接‘字符串变量’"+aStr)
#2.3使用%进行格式化输出
print("这是字符串:%s,这是整型:%d,这是浮点型%f"%(aStr,aInt,aFloat))
print("格式化输出浮点数:%6.3f"%aFloat)#%6.3f表示小数点后面精确到3位,总长度6位数,包括小数点,不够左侧补空格
#Python 3.X对于浮点数默认的是提供17位数字的精度
#2.4 str.format()函数的使用
print("你好!,我是{0},今年{1}岁".format("汤姆","12"))
四、python里面支持的数据类型number(数字),又分为int,float
str(字符串)
List(列表)
Tuple(元组)
Set(集合)
Dictionary(字典)
Python3 的六个标准数据类型中:不可变数据(3 个):Number(数字)、String(字符串)、Tuple(元组);
可变数据(3 个):List(列表)、Dictionary(字典)、Set(集合)
五、range()函数
'''range()函数是表示范围的函数,可设置步长,如可以123456789,也可以134679'''
#基础用法
'''用i依次保存从1-10,但不包括10,即1-9,并打印输出'''
for i in range(1,10):
print(i)
#设置步长
for i in range(1,10,2):
print(i)
六、定义函数与类的关键字
#定义一个函数:def(可以理解为define,定义,声明)
def function():
pass#pass 是为了函数的完整性,表示什么都不做
#声明一个类:class
class People:
name="xiaoming"
sex="男"
age=15
#类的使用
people1=People()#实例化,people1拥有People的所有功能与属性,属性的调用不加()
print(people1.name)
print(people1.age)
print(people1.sex)
对象和类的关系:对象是类的实例,如人是一个类,具体的某一个人就是对象。
七、随机函数的使用
简介python的random模块用于生成随机数,此模块需要调用import random
import random
#生成一个0-1内的随机小数
a=random.random()
print(a)
#生成指定范围的随机浮点数
b=random.uniform(1,10)
print(b)
#生成指定范围的整数
c=random.randint(1,10)
print(c)
#从指定范围内,按指定基数递增的集合中 获取一个随机数。
#random.randrange(10, 30, 2),结果相当于从[10, 12, 14, 16, ... 26, 28]序列中获取一个随机数。
d=random.randrange(10,30,2)
print(d)
'''random.choice从序列中获取一个随机元素。其函数原型为:random.choice(sequence)。参数sequence表示一个有序类型。这里要说明 一下:sequence在python不是一种特定的类型,而是泛指一系列的类型。list, tuple, 字符串都属于sequence。'''
list1=["python","sfdsf","2324"]
seq="fasfsdf"
seq1=random.choice(list1)
seq2=random.choice(seq)
print(seq1)
print(seq2)
八、numpy函数
简介:关于numpy的更多用法见董付国编著的《python程序设计基础》第二版的246页。
import numpy
#把列表转化为数组
a=numpy.array((1,2,3,4))
print(a)
#全0二位数组,零矩阵
array0=numpy.zeros((3,3))
print(array0)
#全1的二维矩阵
array1=numpy.ones((3,3))
print(array1)
#单位矩阵
array3=numpy.identity(3)
print(array3)
九、数据分析pandas函数
关于pandas的更多用法见董付国编著的《python程序设计基础》第二版的264页。
简介:pandas是基于numpy的数据分析模块,pandas提供3种数据结构:Series,带标签的一维数组
DataFrame,带标签且大小可变的二位表格结构
Panel,带标签且大小可变的三维数组
生成一维数组:
import pandas as pd
import numpy as np
x=pd.Series([1,2,3,4])
print(x)
说明:第一列为标签
dates=pd.date_range('20180310',periods=6)
df = pd.DataFrame(np.random.rand(6,4), index=dates, columns=['A','B','C','D'])#生成6行4列位置
print(df)#输出6行4列的表格
说明:np.random.rand(6,4)为生成6行4列的随机0-1内的小数,index为行标签,column为列标签
十、正则表达式
关于正则表达式的更多用法见董付国编著的《python程序设计基础》第二版的174页。
import re
string="1223dsfsdDDS你好"
a=re.search('[0-9]{4}',string)#匹配4个数字
b=re.search('[a-zA-Z]{8}',string)#匹配英文字母
c=re.search('[\u4e00-\u9fa5]{2}',string)#匹配汉字
print(a)
print(b)
print(c)
说明:如需要直接获取匹配坐标,直接在re.search().span()即可。
十一、python访问二进制的模块
#使用pickle模块读写二进制文件
import pickle
data="dfadsafdsfdsafdsfes"
with open('sample_pickle.dat','wb')as f:
try:
pickle.dump(len(data),f)#要序列化的个数
for item in data:
pickle.dump(item,f)#序列化数据并写入文件
except:
print('写入文件异常')
with open('sample_pickle.dat','rb') as f:
n=pickle.load(f)#读取文件中的数据个数
for i in range(n):
x=pickle.load(f)#读取并反序列化每个数据
print(x)
另有模块:struct、shelve,操作类似,具体见董付国编著的《python程序设计基础》第二版的196页。
十二、python的异常处理
try:
#运行别的代码
except :
#如果在try部份引发了'name'异常
except ,:
#如果引发了'name'异常,获得附加的数据
else:
#如果没有异常发生
基础用法1:
try:
a=1
b=a/0
except:
print("程序异常!")
基础用法2——捕获异常:
try:
a=1
b=a/0
except Exception as e:
print(e)
基础用法3——try-except-else:
try:
a=1
b=a/0
except Exception as e:
print(e)
else:
print("程序正常")
try:
a=1
b=a/1
except Exception as e:
print(e)
else:
print("程序正常")
*由此可见,else下面的语句只有在没有异常才会执行。
基础用法4——try-except-finally
try:
a=1
b=a/0
except Exception as e:
print(e)
finally:
print("finally执行")
try:
a=1
b=a/1
except Exception as e:
print(e)
finally:
print(
*由此得出finally语句无论程序是否异常,finally都会执行。
十三、python的两个版本
1、python2.x
2、python3.x
我们现在使用的为python3.x版本,python3和python2不兼容
十四、逻辑运算
a = 10
b = 20
if a and b:
print("1 - 变量 a 和 b 都为 true")
else:
print("1 - 变量 a 和 b 有一个不为 true")
if a or b:
print("2 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
print("2 - 变量 a 和 b 都不为 true")
# 修改变量 a 的值
a = 0
if a and b:
print("3 - 变量 a 和 b 都为 true")
else:
print("3 - 变量 a 和 b 有一个不为 true")
if a or b:
print("4 - 变量 a 和 b 都为 true,或其中一个变量为 true")
else:
print("4 - 变量 a 和 b 都不为 true")
if not (a and b):
print("5 - 变量 a 和 b 都为 false,或其中一个变量为 false")
else:
print("5 - 变量 a 和 b 都为 true")
十五、类方法中如何调用类成员,如何调用实例成员
#类是对现实世界共性的一个抽象,这个抽象具有这些群体共有的功能和属性。
#定义一个类和成员方法
class People:
def fun1(self):
print("类的成员方法!")
#实例化对象,说白了就是你要使用类的东西,就需要在现实中将抽象实例化
people=People()
print(people.fun1())
#类是对现实世界共性的一个抽象,这个抽象具有这些群体共有的功能和属性。
#定义一个类和成员方法
class People:
'''这是一个注释,也就是帮助文档,当别人调用这个类的时候,想知道它的信息,就可以写在这里,通过类名.__doc__查看'''
def fun1(self):
print("类的成员方法!")
#实例化成员,说白了就是你要使用类的东西,就需要在现实中将抽象实例化
people=People()
print(people.fun1())
关于类成员的分类:_xxx: 以_下划线开头,保护成员,只有类的对象和子对象可以访问这些成员
__xxx:以__下划线开头或更多的下划线,但不以两个或更多下划线结束,表示私有成员,只有类对象自己可以访问,子类不能访问
__xxx__:系统定义的特殊成员
数据成员:数据成员可以分为两类:属于对象的数据成员和属于类的数据成员。属于对象的数据成员一般在构造方法中定义,也可以在其他方法中定义。在定义和在实例方法中访问数据成员时以self作为前缀;属于类的成员数据属于该类所有对象共享,不属于任何一个对象。
析构方法:此方法一般无须定义,因为Python是一门高级语言,程序员在使用时无需关心内存的分配和释放,因为此工作都是交给Python解释器来执行,所以,析构函数的调用是由解释器在进行垃圾回收时自动触发执行的。
#类是对现实世界共性的一个抽象,这个抽象具有这些群体共有的功能和属性。
#定义一个类和成员方法
class People:
'''这是一个注释,也就是帮助文档,当别人调用这个类的时候,想知道它的信息,就可以写在这里,通过类名.__doc__查看'''
def __init__(self,name,age,sno):#这是一个构造方法,一个class只能有一个用于构造对象的__init__函数
self.name=name
self.age=age
self.sno=sno#这三个数据成员属于对象的数据成员
def __del__(self):#模拟的析构方法
print("--->del")
eyesNumber=2
earsNumber=2#这两个数据成员属于类的数据成员
people1=People("Jordan",51,202022)
print(People.eyesNumber)#访问类的数据成员
print(people1.name)#访问实例对象的数据成员
#假如我们以类名的方式来访问对象的数据成员便会出错
print(People.name)
具体的方法类型和使用见董付国编著的《python程序设计基础》第二版的132页。
十六、文件的操作
文件打开的模式见董付国编著的《python程序设计基础》第二版的190页。
文件对象的常用方法见董付国编著的《python程序设计基础》第二版的191页。
f=open("text1.txt",'r',encoding='utf-8')#打开文件
for line in f:
print(line)
f.close()#关闭文件
#写文件
with open('text_write.txt','w') as f:
f.write("这是一个写入的文件,此文件会被自动创建")
#with 的用法可以自动在写完后关闭文件
文本文件的复制:借助shutil模块来完成拷贝操作
更多拷贝用法见董付国编著的《python程序设计基础》第二版的211页。
import shutil
shutil.copy('text1.txt','text2.txt')#第一个参数为被复制文件路径,如果文件在当前工作目录下,则不需要加入完整路径
十七、给出一个列表、元组,使用内置函数进行过滤
更过内容见董付国编著的《python程序设计基础》第二版的51页。
'''给出一个列表、元组,使用内置函数进行过滤.'''
#创建一个列表
list1=[4,5,6,2,7,0]
#排序
print(sorted(list1))
#最大值、最小值
print(max(list1))
print(min(list1))
#列表的个数
print(len(list1))
#求和
print(sum(list1))
#倒置
print(list1)#倒置前
b=reversed(list1)
print(list(b))#倒置后
#filter过滤
def maxthan(n):
return n>5
newlist=filter(maxthan,list1)#filter第一个参数为函数,第二个为需要过滤的数据
print(list(newlist))
十八、匿名函数和参数
更多用法见董付国编著的《python程序设计基础》第二版的97页和105页。
参数:以下是调用函数时可使用的正式参数类型:必需参数
关键字参数
默认参数
不定长参数
1、必需参数
def func(x):
pass
x为必需参数,即在调用时必需输入的参数
2、关键字参数
关键字参数就是指定参数名,不用像必需参数那样按顺序输入
def func1(x,y):
return x+y
a=func1(x=1,y=2)
#或者a=func2(y=2,x=1)
3、默认参数
默认参数为在定义函数时就为参数赋值,并且默认参数必须放在其他参数之后
def func2(x,y=9):
return x+y
c=func2(8)
print(c)
4、不定长参数
不定长参数就是在函数定义时不确定参数有几个,加了星号*的参数会以元组(tuple)的形式导入,存放所有未命名的变量参数。
def func4(*x):
return x
x=func4(1,2,3,4,5)
print(x)
匿名函数:python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。lambda 只是一个表达式,函数体比 def 简单很多。
lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
#lambda求和
sum=lambda arg1,arg2:arg1+arg2
print(sum(1,2))
十九、求类似1/(3+1)...1/(3*n+1),1/(3*n+2)的和
'''求类似1/(3*n+1),1/(3*n+2)的和'''
def sum1(n):
sum_=0
for i in range(1,n+1):
sum_+=1/(3*n+1)
return sum_
print(sum1(2))
二十、python的常用开发环境
自带的IDIE、pycharm、anaconda、ipython等
二十一、字典和列表的添加和删除函数
这个比较基础,见董付国编著的《python程序设计基础》第二版的42页和62页。
二十二、x==0的返回值,为bool类型