Python入门
字符串
转义字符
-
\
- 示例
print('Jerry\'s favorite book is Red river')
Jerry's favorite book is Red river
原始字符串
-
r
-
在字符串开始的引号外面添加r可以忽略转义字符
- 示例
-
>>> print(r'Jerry\'s favorite book is Red river')
Jerry\'s favorite book is Red river
>>> print('Jerry\'s favorite book is Red river')
Jerry's favorite book is Red river
>>>
多行字符串
-
‘’’ ‘’’
- 使用三重引号时,代码块缩进规则不适用,输出格式于引号内格式一致
多行注释
-
“”" “”"
- 使用三重双引号实现多行注释
下标和切片
- 访问字符串指定位置字符或指定范围字符
字符串存在检测
- in
not in
常用方法
-
isX
-
islower()
- 字母小写检测
-
isupper()
- 字母大写检测
-
isalpha()
- 字符串只包含字母且非空
-
isalnum()
- 字符串只包含字母和数字且非空
-
isdecimal()
- 字符串只包含数字且非空
-
isspace()
- 字符串只包含空格、制表符和换行符且非空
-
istitle()
- 字符串仅包含以大写字母开头,后面全是小写字母的单词
-
-
lower()
- 将字符串中所有字母小写
-
upper()
- 将字符串中所有字母大写
-
join()
-
将字符串列表连接成为字符串
-
‘,’.join(list_name)
前面的连接符号逗号可以换成其它的- 示例
-
-
>>> test = ['my','name','is','Han meimei']
>>>> ' '.join(test)
'my name is Han meimei'
-
split()
-
将字符串分割为列表
-
’String’.split()
默认使用空格分隔,如果需要传入实参用来作为分隔符号,例如:‘2020/12/22’.split(’/’)- 示例
-
-
>>> '2020/12/22'.split('/')
['2020', '12', '22']
-
对齐
-
接收两个参数,第一个指定长度,第二个指定填充字符
-
rjust()
-
右对齐,默认通过插入空格对其文本,如果需要使用其它的填充符号可以传入符号
- 示例
-
-
-
>>> 'test'.rjust(10)
' test'
- ljust()
- 左对齐
- 示例
>>> 'test'.ljust(10,'-')
>'test------'
- center()
- 居中对齐
- 示例
>>> 'test'.center(10,'#')
'###test###'
-
删去空白字符
-
默认删除空白字符(空格、制表符和换行符)
如果需要有一个可选参数,指定两端要删除的字符合集-
strip()
-
删除两边
-
如果指定了删除的字符合集,其中每个字符的顺序无关
- 示例
-
-
-
-
>>> test = 'niceOkwangnicekOniceOOkncie'
>>> test.strip('niceOk')
'wang'
>>> test
'niceOkwangnicekOniceOOkncie'
>>> test.strip('kOicen')
'wang'
- lstrip()
- 删除左边
- rstrip()
- 删除右边
列表
定义:[]表示,以逗号分隔元素
示例:fruit = [“apple”,“banana”,“pear”]
访问:通过索引访问;
注意:索引值从0~n-1
操作
-
访问
-
1.使用索引访问
-
示例
示例:
-
-
>>> test = ['a','c','d','e','b']
>>> test[1]
'c'
- 2.使用循环遍历元素
- 示例
示例:
>>> for elem in test:
print(elem,end=' ')
a c d e b
-
创建
-
1.创建数字列表
-
使用range(begin,end,step)
注意:数据域左闭右开-
示例
示例:
-
-
-
>>> for i in range(1,11):
print(i,end=' ')
1 2 3 4 5 6 7 8 9 10
- 2.列表解析
- 快速生成指定数据集合的列表
列表名 = [value的表达式 for value in range(1,11)]
- 示例
示例:
>>> test = [x**2 for x in range(1,11)]
>>> test
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
-
修改
-
通过索引修改:
例如:
fruit[1] = “watermelon”
则此时
fruit = [“apple”,“watermelon”,“pear”]
-
-
添加
-
1.在末尾添加
append()-
fruit.append(‘value’)
示例:
fruit.append(‘peach’)
-
-
2.在指定位置添加
insert()-
使用insert(pos,‘value’)
示例:
fruit.insert(1,‘test’)
-
-
-
查找
-
使用index()返回查找元素的下标,如果未找到提示错误
- 示例
-
>>> cat = ['Tom','black','fat']
>>> cat.index('black')
1
>>> cat.index('not_in_test')
Traceback (most recent call last):
File "<pyshell#7>", line 1, in <module>
cat.index('not_in_test')
ValueError: 'not_in_test' is not in list
>>>
-
多重赋值
-
用列表中多个元素同时给不同变量赋值
- 示例
-
>>> cat = ['Tom','black','fat']
>>> name,color,size = cat
>>> name
'Tom'
>>> color
'black'
>>> size
'fat'
>>>
-
删除
-
1.使用del
-
使用条件,知道要删除的元素的位置
示例:
del fruit[1]
-
-
2.使用pop()
-
如果希望在删除元素同时能够使用该删除元素,可使用pop()
-
默认弹出列表末尾的值
例如:
test = [‘a’,‘b’,‘c’,‘d’]
test.pop()
则此时 test = [‘a’,‘b’,‘c’] -
要弹出指定位置的值,需要添加元素的索引
例如:
test = [‘a’,‘b’,‘c’,‘d’]
test.pop(1)
则此时 test = [‘a’,‘c’,‘d’]
-
-
3.使用remove()
-
根据元素值删除
例如:
test = [‘a’,‘b’,‘c’]
test.remove(‘b’)
则此时 test = [‘a’,‘c’]
-
-
-
切片
-
用于访问列表中的一部分元素
-
使用说明:
test = [1,3,5,7,9]
test[0:3]可以切去前三个元素
test[1:3]可以切取第2、3两个元素
test[:3] 等价于test[0:3]
test[-3:]可以切取后三个元素-
示例
示例:
-
-
-
>>> test = [1,3,5,7,9]
>>> test[0:3]
[1, 3, 5]
>>> test[1:3]
[3, 5]
>>> test[:3]
[1, 3, 5]
>>> test[-3:]
[5, 7, 9]
-
复制列表
-
使用包含整个列表的切片[:]
-
示例
示例:
-
-
>>> test = [1,3,5,7,9]
>>> copylist = test[:]
>>> test
[1, 3, 5, 7, 9]
>>> copylist
[1, 3, 5, 7, 9]
>>> copylist.append(11)
>>> test
[1, 3, 5, 7, 9]
>>> copylist
[1, 3, 5, 7, 9, 11]
- copy()
- copy.copy(list_name)
- 示例
>>> import copy
>>> test = [x for x in range(5)]
>>> test
[0, 1, 2, 3, 4]
>>> copy_test = copy.copy(test)
>>> copy_test
[0, 1, 2, 3, 4]
>>> copy_test[1] = 6
>>> copy_test
[0, 6, 2, 3, 4]
>>> test
[0, 1, 2, 3, 4]
- deepcopy()
- 如果复制的列表中还有其它的列表,那么使用copy.deepcopy(list_name)来代替
- 示例
>>> users = [['wang','zhang','li'],[24,26,33],['M','F','M']]
>>> deepcopy_users = copy.deepcopy(users)
>>> deepcopy_users
[['wang', 'zhang', 'li'], [24, 26, 33], ['M', 'F', 'M']]
>>> name,age,sex = deepcopy_users
>>> name
['wang', 'zhang', 'li']
>>> age
[24, 26, 33]
>>> sex
['M', 'F', 'M']
-
排序
-
使用sort()永久性排序
-
1.按字母顺序
-
示例
示例:
-
-
-
>>> test = ['a','c','d','e','b']
>>> test.sort()
>>> test
['a', 'b', 'c', 'd', 'e']
- 2.按字母逆序
- 示例
示例:
>>> test = ['a','c','d','e','b']
>>> test.sort(reverse = True)
>>> test
['e', 'd', 'c', 'b', 'a']
- 使用sorted()临时排序
- 该方法不影响原来的列表顺序
- 示例
示例:
>>> test = ['a','c','d','e','b']
>>> sorted(test)
['a', 'b', 'c', 'd', 'e']
>>> test
['a', 'c', 'd', 'e', 'b']
- 同时该方法也支持逆序排序
>>> sorted(test,reverse=True)
['e', 'd', 'c', 'b', 'a']
>>> test
['a', 'c', 'd', 'e', 'b']
-
反转
-
使用reverse()
- 示例:
-
>>> test = ['a','c','d','e','b']
>>> test.reverse()
>>> test
['b', 'e', 'd', 'c', 'a']
-
常用简单函数
-
长度
-
使用len()
- 示例:
-
-
>>> test = ['a','c','d','e','b']
>>> len(test)
5
- 最大值
- 使用max()
- 示例:
>>> test
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> max(test)
100
- 最小值
- 使用min()
- 示例:
>>> test
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> min(test)
1
- 求和
- 使用sum()
- 示例:
>>> test
[1, 4, 9, 16, 25, 36, 49, 64, 81, 100]
>>> sum(test)
385
元组
定义
- ( )
注意:元组元素不允许修改
如果只有一个元素,则需要在第一个元素后面使用一个逗号(,)指明这是一个元组类型
- 示例
>>> test = ('tuple_test')
>>> type(test)
<class 'str'>
>>> test2 = ('tuple_test',)
>>> type(test2)
<class 'tuple'>
>>>
字典
定义
- { }
注意:内容由键-值对组成(key:value)
创建字典
- test = {}
添加键值对
- 示例
>>> test['color'] = 'green'
>>> test['size'] = 25
>>> test
{'color': 'green', 'size': 25}
修改字典元素值
- 示例
>>> test['color'] = 'black'
>>> test
{'color': 'black', 'size': 25}
删除字典元素
-
使用 del
需要指明字典名和要删除的键- 示例
>>> del test['color']
>>> test
{'size': 25}
遍历字典
-
同时使用键值
-
for key,value in dict_name.items():
print(“key:”+key)
pirnt(“value:”+value)
注意:
其中key、value分表用于存储键和值
items()方法返回键值对列表-
示例
示例:
-
-
>>> age = {'wang':24,'zhang':23,'li':25,'sun':27}
>>> for k,v in age.items():
print(k+':'+str(v))
wang:24
zhang:23
li:25
sun:27
-
只使用键
-
for key in dict_name.keys():
- 示例:
-
>>> age = {'wang':24,'zhang':23,'li':25,'sun':27}
>>> for name in age.keys():
print(name)
wang
zhang
li
sun
-
只使用值
-
for value in dict_name.values():
- 示例:
-
>>> age = {'wang':24,'zhang':23,'li':25,'sun':27}
>>> for age in age.values():
print(age)
24
23
25
27
-
按字母顺序遍历结果
-
for key in sorted(dict_name.keys()):
-
示例
示例:
-
-
>>> age = {'wang':24,'zhang':23,'li':25,'sun':27}
>>> for name in sorted(age.keys()):
print(name)
li
sun
wang
zhang
检查字典中是否存在键或值
-
get(),检查键存在,同时不修改原来的字典
-
接受两个参数,第一个是键,第二个是如果键不存在返回的备用值
- 示例
-
>>> test = {'name':'Jerry','age':19}
>>> print(test['name']+' is '+str(test['age'])+' years old and is '+test.get('married','not_married'))
Jerry is 19 years old and is not_married
>>> test
{'name': 'Jerry', 'age': 19}
-
setdeault(),检查键存在,同时如果键不存在将默认的键值添加到字典中
-
接收两个参数,第一个是要检查的键,第二个是如果键不存在时使用的默认键值
- 示例
-
>>> test = {'name':'Jerry','age':19}
>>> test.setdefault('married','not_married')
'not_married'
>>> test
{'name': 'Jerry', 'age': 19, 'married': 'not_married'}
>>>
嵌套
-
字典中存储列表
- 示例:
>>> test={}
>>> test['favorate_foods'] = ['apple','banana','cake']
>>> test
{'favorate_foods': ['apple', 'banana', 'cake']}
-
列表中存储字典
-
示例
示例:
-
>>> zhang = {'age':18,'sex':'female'}
>>> wang = {'age':20,'sex':'female'}
>>> li = {'age':24,'sex':'male'}
>>> info = [zhang,wang,li]
>>> info
[{'age': 18, 'sex': 'female'}, {'age': 20, 'sex': 'female'}, {'age': 24, 'sex': 'male'}]
>>> for i in info:
print(i)
{'age': 18, 'sex': 'female'}
{'age': 20, 'sex': 'female'}
{'age': 24, 'sex': 'male'}
>>>
-
字典中存储字典
-
示例
示例:
-
>>> info = {
'wang':{
'age':18,
'sex':'male'
},
'zhang':{
'age':20,
'sex':'female'
}
}
>>> info
{'wang': {'age': 18, 'sex': 'male'}, 'zhang': {'age': 20, 'sex': 'female'}}
- 遍历
- 示例
示例:
>>> for name,user_info in info.items():
print(name)
print('age:'+str(user_info['age']))
print('sex:'+user_info['sex'])
print('')
wang
age:18
sex:male
zhang
age:20
sex:female
漂亮打印字典键值对
-
pprint
-
先导入 import pprint
使用: pprint.pprint(dict_name)- 示例
-
import pprint
# 统计各个字符出现次数
test = 'This is a test message for counting times of every character!'
count = {}
for ch in test:
count.setdefault(ch,0)
count[ch] = count[ch]+1
print('Print with pprint()')
pprint.pprint(count)
print('-------------------------\nPrint with print()')
print(count)
Print with pprint()
{' ': 10,
'!': 1,
'T': 1,
'a': 4,
'c': 3,
'e': 7,
'f': 2,
'g': 2,
'h': 2,
'i': 4,
'm': 2,
'n': 2,
'o': 3,
'r': 4,
's': 6,
't': 5,
'u': 1,
'v': 1,
'y': 1}
-------------------------
Print with print()
{'T': 1, 'h': 2, 'i': 4, 's': 6, ' ': 10, 'a': 4, 't': 5, 'e': 7, 'm': 2, 'g': 2, 'f': 2, 'o': 3, 'r': 4, 'c': 3, 'u': 1, 'n': 2, 'v': 1, 'y': 1, '!': 1}
模式匹配&正则表达式
常见字符分类
正则表达式查找文本模式
-
创建正则表达式对象
- 1.导入re模块
- 2.向re.compile()传入一个字符串值,表示正则表达式,它将返回一个Regex对象
-
匹配Regex对象
- 1.向Regex对象的 search() 方法传入想要查找的字符串。它返回一个Match对象
- 2.调用Match对象的 group() 方法,返回实际匹配的字符串
-
示例
>>> import re
>>> testReg = re.compile(r'\d{3}-\d{3}-\d{4}')
>>> testSearch = testReg.search('There is a test phone number 234-778-9840')
>>> testMatch = testSearch.group()
>>> testMatch
'234-778-9840'
正则表达式匹配更多模式
-
1.利用括号分组
- 通过使用括号()将匹配项分离,可以匹配指定部分的内容
注意:group()传入参数为0或者不传入参数将匹配整个文本 - 例如想要获取电话号码224-768-9980中的各部分号码:224、768、9980
- 通过使用括号()将匹配项分离,可以匹配指定部分的内容
>>> import re
>>> testReg = re.compile(r'(\d{3})-(\d{3})-(\d{4})')
>>> testSearch = testReg.search('A test phone number is 224-768-9980')
>>> for i in range(4):
print(testSearch.group(i))
224-768-9980
224
768
9980
>>>
-
2.使用管道匹配多个分组
- 通过使用管道符 | 来匹配多个表达式中的一个
同时可以使用findall()来找到所有匹配项
- 通过使用管道符 | 来匹配多个表达式中的一个
>>> import re
>>> testReg = re.compile(r'Tom|Jerry')
>>> testSearch = testReg.search('Tom & Jerry is a famous cartoon')
>>> testMatch = testSearch.group()
>>> testMatch
'Tom'
>>> testFindall = testReg.findall('Tom & Jerry is a famous cartoon')
>>> testFindall
['Tom', 'Jerry']
- 如果多个匹配项有相同的前缀或其他相同部分,可以将不同之处放在括号内,这样相同部分只需指定一次
>>> import re
>>> testReg = re.compile(r'test(1|2|3|4)')
>>> testSearch = testReg.search('test1 test2 test3 and test4 are necessary')
>>> testMatch = testSearch.group()
>>> testMatch
'test1'
>>> testSearch.group(1)
'1'
>>> testReg.findall('test1 test2 test3 and test4 are necessary')
['1', '2', '3', '4']
数据可视化
matplotlib
-
一个制作图表的工具包
-
设置标题
- plt.title(“title_name”,fontsize=15)
-
修改标签
-
横向标签
- plt.xlabel(“label_name”,fontsize=15)
-
纵向标签
- plt.ylabel(“label_name”,fontsize=15)
-
-
设置刻度标记大小
- plt.tick_params(axis=‘both’,labelsize=14)
-
校正图形
-
向plot()提供一系列数字时,默认第一个数据点对应的x坐标为0,为了正确表示图形关系,可以给plot()同时提供输入值和输出值
- 示例
-
-
import matplotlib.pyplot as plt
# 输入值(x)
values = [x for x in range(1,6)]
# 输出值(y)
squares = [1,4,9,16,25]
# 将列表值传递给绘图函数plot(),其中values指示x,squares指示y,linewidth指定线条粗细
plt.plot(values,squares,linewidth=3)
# 指示图形标题及字体大小
plt.title('Square Numbers',fontsize=15)
# 指定x坐标名称及字体大小
plt.xlabel('value',fontsize=14)
# 指定y坐标及字体大小
plt.ylabel('square of value',fontsize=14)
# 指定刻度标记大小
plt.tick_params(axis='both',labelsize=14)
# 打开matplotlib查看器,显示绘制的图形
plt.show()
-
绘制简单折线图
-
示例
使用列表中的平方数序列绘制折线图
-
import matplotlib.pyplot as plt
squares = [1,4,9,16,25]
plt.plot(squares)
plt.show()
-
绘制散点图
-
scatter()
-
接收一对x、y坐标,在指定位置绘制一个点
-
plt.scatter(2,4)
-
设置绘制时点的尺寸
- plt.scatter(2,4,s=200)
-
设置标题
- plt.title(“title_name”,fontsize=15)
-
修改标签
-
横向标签
- plt.xlabel(“label_name”,fontsize=15)
-
纵向标签
- plt.ylabel(“label_name”,fontsize=15)
-
-
设置刻度标记大小
- plt.tick_params(axis=‘both’,which=‘major’,labelsize=14)
-
-
绘制一系列点,分别传递包含x、y值的列表
- 示例
-
-
# 输入值(x)
values = [x for x in range(1,6)]
# 输出值(y)
squares = [1,4,9,16,25]
plt.scatter(values,squares,s=30)
- 设置坐标轴取值范围
- plt.axis([0,100,0,10000])
前两个为x轴的范围
后两个为y轴的范围
- 删除数据点的轮廓
- 在调用scatter()时传递实参 edgecolor='none'
- plt.scatter(x_values,y_values,edgecolor='none',s=3)
- 自定义数据点的颜色
- 向scatter()传递实参c = 'color_name'
- plt.scatter(x_values,y_values,c='green',edgecolor='none',s=3)
- 使用颜色映射
- 使用一系列颜色,从起始色渐变的结束色,用于突出数据规律
将参数c设置为y值列表,并使用参数cmap告诉pyplot使用那个颜色进行映射
- plt.scatter(x_values,y_values,edgecolors='none',c=squares,cmap=plt.cm.Reds,s=3)
- 自动保存图表
- 使用savefig()
第一个参数指定图片名称,存储到当前代码所在的文件夹下
第二个参数裁去多余的空白部分,如果要保留多余的空白,可省略此参数
- plt.savefig('squares_plot.png',bbox_inches = 'tight')
异常
每当发生错误,python会创建一个异常对象,如果没有编写处理该异常的代码,程序将停止执行,并返回一个异常报告
- 例如:
简单的除数为0的异常
>>> print(5/0)
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
print(5/0)
ZeroDivisionError: division by zero
解决 try-except
-
使用try-except写一个处理特定异常的模块,让程序继续执行
- 示例:
>>> try:
print(5/0)
except ZeroDivisionError:
print('除数不能为0')
除数不能为0
else 代码块
-
用于处理try语句中成功执行的代码后续操作
- 例如:
>>> try:
res = 5/2
except ZeroDivisionError:
print('除数不能为0')
else:
print(res)
2.5
FileNotFoundError异常
- 示例
filename = 'file.txt'
try:
with open(filename) as test:
contents = test.read()
except FileNotFoundError:
print('Sorry,the file you want to open is not found!')
pass
-
有时候希望程序异常时不提示,则在except模块中使用pass
- 示例
try:
--snip--
except FileNotFoundError:
pass
else:
--snip--
文件
读取文件
- 示例
with open('file_name') as variable_name:
# variable_name存储open返回的表示文件的对象
contents = variable_name.read()
# contents 存储文件中读取到的的字符串
print(contents)
-
逐行读取
- 示例
filename = 'read_test.txt'
with open(filename) as test:
for line in test:
# 使用rstrip()去掉末尾的空白
print(line.rstrip())
-
将读取到的内容存储到列表中,这样做可以在后面使用列表
- 示例
filename = 'read_test.txt'
with open(filename) as test:
lines = test.readlines()
文件路径
-
示例
…\test\filename.txt
注意windows中使用的是’'而不是‘/’
写入文件
-
写入空文件
-
在调用open时提供两个实参,一个是文件名称,另一个是打开方式,如果写入的文件不存在,则系统将创建一个文件
-
‘w’ 写入模式
- 如果文件不为空,则会清空原来的内容后写入
-
‘r’ 读取模式
- 只能读取文件
-
‘a’ 附加模式
- 在原有的内容后面附加新的内容
-
-
-
示例
filename = 'write_test.txt'
with open(filename,'w') as test:
test.write('This is a test message!\n')
test.write('This is another test message!')
-
写入多行
-
写入多行文件时,不会自动换行,
即需要再写入时添加换行符’\n’- 示例:
一个实现保存输入的用户姓名的示例
- 示例:
-
filename = 'write_test.txt'
with open(filename,'w') as test:
i = 0
while True:
i += 1
name = input('Enter your name\n')
if name == 'q':
break
else:
test.write(str(i)+'.'+name.title()+'\n')
分析文本
-
split()用于拆分字符串
-
默认以空格为分隔符拆分
-
可以指定拆分参数,以指定的符号进行拆分
- 示例
-
>>> test = 'hello,this,is,a,file,test'
>>> test.split(',')
['hello', 'this', 'is', 'a', 'file', 'test']
>>> ts = test.split(',')
>>> for t in ts:
print(t,end=' ')
hello this is a file test
存储数据
-
JSON
- 一种数据存储格式
使用时需要import json
- 一种数据存储格式
-
json.dump()
-
用于存储数据,接收两个实参,要存储的数据以及用于存储数据的文件对象
- 示例
-
import json
filename = 'json_test.json'
name = ['jerry','alice','bob']
with open(filename,'w') as test:
json.dump(name,test)
-
json.load()
-
用于读取数据,接收参数为文件对象
- 示例
-
import json
filename = 'json_test.json'
with open(filename) as test:
rs = json.load(test)
print(rs)
类
创建和使用类
-
创建
-
class 类名:
def init(self,参数名…):
self.参数名 = 参数名
…
注意:
类名首字母大写
方法__init__() 是必须的,其中init左右各两个下划线- 示例:
-
class Dog():
def __init__(self,name,age):
self.name = name
self.age = age
def sit(self):
print(self.name.title()+' is now sitting down.')
def roll_over(self):
print(self.name.title()+' is rolling over.')
my_dog = Dog('tom',12)
my_dog.sit()
my_dog.roll_over()
-
实例
-
1.访问属性
- my_dog.name
-
2.调用方法
- my_dog.sit()
-
使用类和实例
-
属性
-
默认值
- 示例
-
class Car():
def __init__(self,make,model,year):
self.make = make
self.model = model
self.year = year
self.miles = 0 # 指定属性默认值
def des(self):
dname = str(self.year)+' '+self.make+' ' +self.model
return dname.title()
def get_miles(self):
print('This car has '+str(self.miles)+' miles on it.')
car = Car('audi','a9',2016)
print(car.des())
car.get_miles()
- 修改
- 1.直接修改
- car.miles = 23
car.get_miles()
- 2.通过方法修改
- 在Car类中添加方法:
def update_miles(self,new_miles):
self.miles = new_miles
car.update_miles(34)
car.get_miles()
- 3.通过方法递增
- 注意:
增加了条件检查,只有新的值大于原来的值才允许更新
def update_miles(self,new_miles):
if new_miles>self.miles:
self.miles = new_miles
else:
print('Can not roll back!')
- 私有
- 如果需要设定为私有类型,需要在属性或者方法名称前面添加两个下划线(__test、__method() )
类方法
-
在方法前面添加类方法标识符
@classmethod- 实例
class Test:
country = 'China'
@classmethod # 类方法标识
def getCountry(cls):
return cls.country
c1 = Test.getCountry() # 通过类名调用类方法
print('通过类名调用类方法 ' + c1)
test = Test()
c2 = test.getCountry() # 通过对象调用
print('通过对象调用 ' + c2)
静态方法
-
在方法前面添加修饰符
@staticmethod- 实例
class Test:
country = 'China'
@staticmethod
def show():
print(Test.country)
Test.show()
继承
-
子类
-
如何创建子类?
- 1.class 子类名(父类名):
2.初始化父类属性
def init(self,…):
super().init(除self的各个属性名)
- 1.class 子类名(父类名):
-
如何添加父类没有的属性?
- 在__init__(…):
的代码块内添加 self.属性名 = 初始化
例如: self.color = ‘black’
- 在__init__(…):
-
如何添加父类没有的方法?
- 直接在 子类模块中 def 即可
-
-
重写
-
如果父类方法在子类中不适用,则需要重写父类方法
- 子类中定义一个父类同名的方法
具体实现不同于父类方法
- 子类中定义一个父类同名的方法
-
实例作为属性
-
将类的一部分作为独立的类提取出来
例如有两个测试类:Sex、Student
现通过Sex类中的相关方法显示学生的性别信息- 示例:
class Sex():
def __init__(self, sex='M'):
self.sex = sex
def set_sex(self, new_sex):
self.sex = new_sex
def sex_info(self):
print('sex:' + self.sex)
class Student():
def __init__(self, name):
self.name = name
self.sex = Sex()
def info(self):
print('name:' + self.name)
self.sex.sex_info()
stu = Student('wang')
stu.info()
stu.sex.set_sex('F')
stu.info()
-
实例作为属性时用列表存储属性值
-
一个简单例子,传入时存入元组中,
元组不能修改元素,所以另外使用一个列表存储元素- 示例
-
class User():
def __init__(self,first_name,last_name):
self.first_name = first_name
self.last_name = last_name
def greet(self):
print('Hello,'+self.first_name.title()+' '+self.last_name.title())
class Privilages():
def __init__(self,*privilages):
self.privilages =[]
for p in privilages:
self.privilages.append(p)
def add_privilages(self,new_pri):
self.privilages.append(new_pri)
print('Privilages Updated!')
def delete_privilages(self,del_pri):
self.privilages.remove(del_pri)
print('Privilages Delete!')
def update_privilages(self,up_pri,new_pri):
id = self.privilages.index(up_pri)
self.privilages[id] = new_pri
print('Privilages Updated!')
def show_privilages(self):
i = 0
print('Privilages as follows:')
for p in self.privilages:
i+=1
print(str(i)+'.'+p)
class Admin(User):
def __init__(self,first_name,last_name):
super().__init__(first_name,last_name)
self.privilages = Privilages('add','delete','update','search')
admin = Admin('jams','lee')
admin.greet()
admin.privilages.show_privilages()
admin.privilages.add_privilages('test')
admin.privilages.show_privilages()
admin.privilages.delete_privilages('test')
admin.privilages.show_privilages()
admin.privilages.update_privilages('search','new_search')
admin.privilages.show_privilages()
while
使用循环
-
示例
示例:
>>> name =''
>>> while name!='q':
name = input('Enter your name\n')
if name!='q':
print('Hello,'+name)
Enter your name
wang
Hello,wang
Enter your name
zhang
Hello,zhang
Enter your name
q
退出循环
-
break
-
示例
示例 :
-
>>> name =''
>>> while name!='q':
name = input('Enter your name\n')
if name!='q':
print('Hello,'+name)
else:
break;
-
continue
-
示例
示例:
-
>>> num = 0
>>> while num<10:
num+=1
if num%2==0:
continue
else:
print(str(num),end=' ')
1 3 5 7 9
循环删除列表元素
-
示例
示例:
>>> foods = ['apple','cake','rice','banana','apple','cake','apple']
>>> while 'apple' in foods:
foods.remove('apple')
>>> foods
['cake', 'rice', 'banana', 'cake']
函数
传递实参
-
示例
示例:
def test(name):
print(‘Hello,’+name.title())test(‘zhang’)
Hello,Zhang
默认值
-
注意:默认值需要放在没有默认值的形参后面
-
示例
示例:
-
>>> def test(name = 'test'):
print('Hello,'+name.title())
>>> test()
Hello,Test
>>> test('zhang')
Hello,Zhang
关键字实参
-
为了避免向函数传递实参时混淆位置
-
示例
示例:
-
>>> def test(name,sex):
print('Hello,'+name+'.sex is '+sex)
>>> test(sex='F',name = 'Zhang')
Hello,Zhang.sex is F
>>> test('zhang','F')
Hello,zhang.sex is F
可选实参
-
有时候某些实参可以不传递给函数,则定义可选实参如下:
param = ‘’- 示例:
>>> def test(first_name,last_name,mid_name=''):
print('Hello,'+first_name.title()+' '+mid_name.title()+' '+last_name.title()+'.')
>>> test('john','lee','hooker')
Hello,John Hooker Lee.
>>> test('john','lee')
Hello,John Lee.
返回值
-
返回简单值
-
示例
示例:
-
>>> def test(name):
return name.title()
>>> print(test('zhang'))
Zhang
-
返回字典
-
示例
示例:
-
>>> def test(first_name,last_name):
name = {'first':first_name,'last':last_name}
return name
>>> test('John','Lee')
{'first': 'John', 'last': 'Lee'}
-
返回列表
- 示例:
>>> def test(*food):
foods = []
for f in food:
foods.append(f)
return foods
>>> test('apple','banana','cake','hambarger')
['apple', 'banana', 'cake', 'hambarger']
传递列表
-
向函数传递列表,有函数对列表进行操作
-
示例
示例:
-
>>> def test(num):
for i in num:
print(i,end = ' ')
print('')
>>> test_list = [x for x in range(1,10)]
>>> test(test_list)
1 2 3 4 5 6 7 8 9
-
注意:
如果不希望函数修改列表可以向函数传递列表副本
用法:
function_name(list_name[:])-
示例
示例:
-
>>> def test(num):
for i in num:
if i%2==0:
num.remove(i)
print(num)
>>> test_list = [x for x in range(1,10)]
>>> test(test_list[:])
[1, 3, 5, 7, 9]
>>> test_list
[1, 2, 3, 4, 5, 6, 7, 8, 9] #可以看到传递的列表未发生改变
传递任意数量的实参
-
有时候不确定实参的个数,就需要使用任意数量实参
注意:
此时传入的实参放置在一个元组之中
如果还有其他位置形参,需要将接收任意数量实参的形参放在最后面-
示例
示例:
-
>>> def test(*food):
foods = []
for f in food:
foods.append(f)
return foods
>>> test('apple','banana','cake','hambarger')
['apple', 'banana', 'cake', 'hambarger']
-
使用任意数量的关键字实参
-
有时候需要接收任意数量的关键字实参,但不知传递的是什么信息,就可以使用能够接收任意数量的键值对的实参
- 示例:
-
>>> def test(name,**info):
save = {}
save['name'] = name
for k,v in info.items():
save[k] = v
return save
>>> test('zhang',age = 18,sex = 'Female')
{'name': 'zhang', 'age': 18, 'sex': 'Female'}
模块导入
-
将函数封装在模块中,使用时只需导入模块名称就可以调用相关函数。同时可以隐藏代码细节
-
导入整个模块
使用:
import 模块名称 -
如果只需使用模块中的特定函数
导入方式:
from 模块名称 import 函数名称 -
使用 as 重命名
- 在导入模块中函数的同时可以重命名函数名称(使用 as),这样可以在该模块中使用新定义的名称调用原模块中的函数
使用方式:
from module_name import func_name as new_name
调用时:
new_name()
- 在导入模块中函数的同时可以重命名函数名称(使用 as),这样可以在该模块中使用新定义的名称调用原模块中的函数
-
导入模块中所有函数
使用:
from module_name import *
-