实验一Python的安装与简单程序练习
1.python比起其他高级语言简洁很多,比如不需要头文件,不需要大括号,if语句的划分只要缩进,每行代码末尾不需要;作为结尾,变量不需要声明类型等等。
2.Python有许多函数,需要应用才能掌握。
①map()用于依次将项目发给函数进行运行;
②split()是分割函数,语法:str.split(str="",num=string.count(str))[n],冒号内是分割符号,括号内的str代表是几个分成一份,n代表取出分成的第几份;
③eval()返回传入表达式的结果,实际上是去除双引号,可以用于list转化成数字和其他类型的数据结构。
3.Python中input的返回值默认是list,list不能强制转化为int,float。因此用eval函数。
4.List中[x:y]x代表起始的位置,y代表步长,因此此处[0:-1]可以代表最后一个,因为y比x小说明是倒序,0代表第一个,第一个的前一个就是最后一个。
此处的列表知识:
list1[:n]表示从列表list1第0个元素开始截取至第n个元素(不包括第n个元素)
list1[n:]表示从列表list1第n个元素开始截取至最后一个元素(包括第n个元素)
list1[a:b:c]表示从列表list1第a个元素开始截取至第b个元素步长为c(不包括第b个元素)
5.turtle()海龟可以用于画图。
基本方向的控制circle()画圆,fd()直行。
实验2Python基本类型与内置函数
- 注意缩进
- 使用import
实验3 Python序列操作
- 输入多个值存入列表只需要用eval,但是输入要以[]的形式,不要定义长度
- Range()从0开始到目标数字即代表x个
- 排序函数有两种(1)list.sort()在原列表中排序(2)sorted(list,reverse=)返回新的列表
- str.join(“”)在字符串str中加入
- Random的使用
- random.digits0-9
- random.ascllletters大小字母
- random.random()
- random.shuffle()打乱
- dic.get()返回键值(key)为该值的值(item),此处代表若找不到键值为ch的值则返回0
实验4 选择与循环结构
- 取消python中自带的换行用print(“”,end=’ ’)
- eval()可以用于取出只输入一个数时的值
- map()可以用于取出输入多个数时的值,具体用法为map(数据类型,input().split())
- List的建立可以为list=[],但是后续插入要用append等函数;也可以用list=[]*length
- math.ceil向上取整,//向下取整
- math.round()四舍五入(但是是奇数才入,偶数不进位)
- 当输出时用到了迭代输出的数时要把输出的部分全部转换为字符串
8.列表的初始化
list = []
for i in range(1,n+1):
list.append(i)
列表的倒置 list.reverse()
实验5 字符串与正则表达式
1.python中的string库带有对数字、大小写字母、符号的分类。因此可以直接使用。
2.chr( )和ord( )的使用
chr ( )是将数字转变成对应ASCLL码的字符,返回值类型是string。
ord ( )是返回对应的字符串的ASCLL码或Unicode码,返回值类型是int。
3.字符串输出的格式化
grade="%.2f%%"%(correct*100/len(origin))
(1)可以在输出部分直接使用%
格式为”***** %X.X数据类型 *****”%(value) 这里没有,
(2)使用format( )函数
S=”xxx{str1}xxx{str2}xxx”.format(str1= ,str2=” ”)
print(S)
(3)使用f.using
print(f’xxx {str1},xxx{str2:%Y},xxx{int+1}’)
4.正则表达式
通过限定条件找到需要的内容。
常用的符号:
这部分需要引入re模块。
常使用的函数有search(搜索),match(匹配),compile(输出找到的单个),findall(输出找到的多个),sub(替换)。
实验6 函数设计与使用
1.函数参数分为三种,默认值参数、关键参数和可变长度参数。默认值参数在使用函数时设置默认初值,关键参数可以使得函数的参数传递方式与传入参数的位置无关,可变长度参数表示可以接受任意多个位置的实参,在参数前加*号放入元组中,**放入字典。
2.变量作用域常见全局变量和局部变量。全局变量加global否则在局部作用域内会被认为同名局部变量。Nonlocal变量引用最近的外层函数中的同名变量。
3.lambda表达式:lambda 参数 表达式,结果是表达式的返回值。
4.Python装饰器(decorator)在实现的时候,被装饰后的函数其实已经是另外一个函数了(函数名等函数属性会发生改变),为了不影响,Python的functools包中提供了一个叫wraps的decorator来消除这样的副作用。写一个decorator的时候,最好在实现之前加上functools的wrap,它能保留原有函数的名称和函数属性。
实验7 面向对象程序设计
1.类的创建
class 类名( ):
类成员
def __init__(self):
- __xx 私有成员
- __xx__ 特殊成员
- @property的两种使用
(1)修饰方法,是方法可以像属性一样访问(后面不加括号)。
class DataSet(object):
@property
def method_with_property(self): ##含有@property
return 15
def method_without_property(self): ##不含@property
return 15
l = DataSet()print(l.method_with_property) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。print(l.method_without_property()) #没有加@property , 必须使用正常的调用方法的形式,即在后面加()
两个都输出为15。
class DataSet(object):
@property
def method_with_property(self): ##含有@property
return 15l = DataSet()print(l.method_with_property()) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。
如果使用property进行修饰后,又在调用的时候,方法后面添加了(), 那么就会显示错误信息:TypeError: 'int' object is not callable,也就是说添加@property 后,这个方法就变成了一个属性,如果后面加入了(),那么就是当作函数来调用,而它却不是callable(可调用)的。
class DataSet(object):
def method_without_property(self): ##不含@property
return 15l = DataSet()print(l.method_without_property) #没有加@property , 必须使用正常的调用方法的形式,即在后面加()
没有使用property修饰,它是一种方法,如果把括号去掉,不会报错输出的就会是方法存放的地址。
(2)与所定义的属性配合使用,调用某个成员采用几乎同名的方法调用,从而隐藏真实的属性名,这样可以防止属性被修改。
由于python进行属性的定义时,没办法设置私有属性,因此要通过@property的方法来进行设置。这样可以隐藏属性名,让用户进行使用的时候无法随意修改。
class DataSet(object):
def __init__(self):
self._images = 1
self._labels = 2 #定义属性的名称
@property
def images(self): #方法加入@property后,这个方法相当于一个属性,这个属性可以让用户进行使用,而且用户有没办法随意修改。
return self._images
@property
def labels(self):
return self._labelsl = DataSet()#用户进行属性调用的时候,直接调用images即可,而不用知道属性名_images,因此用户无法更改属性,从而保护了类的属性。print(l.images) # 加了@property后,可以用调用属性的形式来调用方法,后面不需要加()。