Python与Java的语法区别
数据容器/数组/集合
Python: 对数据容器的操作
# 对list进行切片,从1开始,4结束,步长1(默认步长为1) my_list = [0, 1, 2, 3, 4, 5, 6] result1 = my_list[1:4] print(f"结果1:{result1}") # 对tuple进行切片,从头开始,到最后结束,步长1 my_tuple = (0, 1, 2, 3, 4, 5, 6) result2 = my_tuple[:] # 其实和结束不写表示从头到尾,步长为1可以省略 print(f"结果2:{result2}") # 对str进行切片,从头开始,到最后结束,步长2 my_str = "01234567" result3 = my_str[::2] print(f"结果3:{result3}") # 对str进行切片,从头开始,到最后结束,步长-1 my_str = "01234567" result4 = my_str[::-1] # 等同于序列反转了 print(f"结果4:{result4}") # 对列表进行切片,从3开始,到1结束,步长-1 my_list = [9, 10, 21, 3, 4, 5, 6] result5 = my_list[3:1:-1] print(f"结果5:{result5}") # 对元组进行切片,从头开始,到尾结束,步长-2 my_tuple = (0, 1, 2, 3, 4, 5, 6) result6 = my_tuple[::-2] print(f"结果6:{result6}")
Java: 对数组的操作
//对list进行切片,从1开始,4结束,补偿1 int[] my_list = {0, 1, 2, 3, 4, 5, 6}; int[] sub_list = Arrays.copyOfRange(my_list, 1, 5); for (int i : sub_list) { System.out.print(i); }
Python: 字典
# 定义字典 my_dict1 = {"王力宏":99, "周杰伦":88, "林俊杰": 77}
score = my_dict1["王力宏"]
print(f"王力宏的考试分数是:{score}")
Java: Map集合
Map<String, Integer> map = new HashMap<>(); map.put("王力宏",99); map.put("周杰伦",88); map.put("林俊杰",77); int score = map.get("王力宏"); System.out.println("王力宏的考试分数是:"+score);
Python: 遍历字典
# 获取全部Key my_dict = {"周杰伦": 99, "林俊杰": 88, "张学友": 77} keys = my_dict.keys() print(f"该字典的全部Keys是:{keys}") # 遍历字典 # 方式1:通过获取全部的Key来完成遍历 for key in keys: print(f"字典的key是:{key}") print(f"字典的value是:{my_dict[key]}") # 方式2:直接对字典进行for循环,每一次循环都是直接得到key for key in my_dict: print(f"2字典的key是:{key}") print(f"2字典的value是:{my_dict[key]}") # 统计字典内的元素数量,len()函数 num = len(my_dict) print(f"字典中的元素数量有:{num}个")
Java: 遍历Map
//遍历Map
Map<String, Integer> map = new HashMap<>();
map.put("王力宏",99);
map.put("周杰伦",88);
map.put("林俊杰",77);
for (Map.Entry<String, Integer> entry : map.entrySet()) {
String name = entry.getKey();
int score = entry.getValue();
System.out.println(name + "的考试分数是:" + score);
}
// 统计字典内的元素数量
int size = scores.size();
System.out.println("Map中元素的数量是:" + size);
Python: 容器的通用操作
my_list = [1, 2, 3, 4, 5] my_tuple = (1, 2, 3, 4, 5) my_str = "abcdefg" my_set = {1, 2, 3, 4, 5} my_dict = {"key1": 1, "key2": 2, "key3": 32, "key4": 4, "key5": 5} # len元素个数 print(f"列表 元素个数有:{len(my_list)}") print(f"元组 元素个数:{len(my_tuple)}") print(f"字符串 元素个数有:{len(my_str)}") print(f"集合 元素个数有:{len(my_set)}") print(f"字典 元素个数有:{len(my_dict)}") # max最大元素 print(f"列表 最大的元素有:{max(my_list)}") print(f"元组 最大的元素有:{max(my_tuple)}") print(f"字符串最大的元素有:{max(my_str)}") print(f"集合 最大的元素有:{max(my_set)}") print(f"字典 最大的元素有:{max(my_dict)}") # min最小元素 print(f"列表 最小的元素有:{min(my_list)}") print(f"元组 最小的元素有:{min(my_tuple)}") print(f"字符串 最小的元素有:{min(my_str)}") print(f"集合 最小的元素有:{min(my_set)}") print(f"字典 最小的元素有:{min(my_dict)}") # 类型转换:容器转列表 print(f"列表 转 列表的结果是:{list(my_list)}") print(f"元组 转 列表的结果是:{list(my_tuple)}") print(f"字符串 转 列表的结果是:{list(my_str)}") print(f"集合 转 列表的结果是:{list(my_set)}") print(f"字典 转 列表的结果是:{list(my_dict)}") # 类型转换:容器转元组 print(f"列表 转 元组的结果是: {tuple(my_list)}") print(f"元组 转 元组的结果是: {tuple(my_tuple)}") print(f"字符串 转 元组的结果是: {tuple(my_str)}") print(f"集合 转 元组的结果是: {tuple(my_set)}") print(f"字典 转 元组的结果是: {tuple(my_dict)}") # 类型转换:容器转字符串 print(f"列表 转 字符串的结果是: {str(my_list)}") print(f"元组 转 字符串的结果是: {str(my_tuple)}") print(f"字符串 转 字符串的结果是: {str(my_str)}") print(f"集合 转 字符串的结果是: {str(my_set)}") print(f"字典 转 字符串的结果是: {str(my_dict)}") # 类型转换:容器转集合 print(f"列表 转 集合的结果是: {set(my_list)}") print(f"元组 转 集合的结果是: {set(my_tuple)}") print(f"字符串 转 集合的结果是: {set(my_str)}") print(f"集合 转 集合的结果是: {set(my_set)}") print(f"字典 转 集合的结果是: {set(my_dict)}") my_list = [3, 1, 2, 5, 4] my_tuple = (3, 1, 2, 5, 4) my_str = "abcdefg" my_set = {3, 1, 2, 5, 4} my_dict = {"key3": 1, "key1": 2, "key2": 32, "key5": 4, "key4": 5} # 进行容器的排序 print(f"列表 对象的排序结果是: {sorted(my_list)}") print(f"元组 对象的排序结果是: {sorted(my_tuple)}") print(f"字符串 对象的排序结果是: {sorted(my_str)}") print(f"集合 对象的排序结果是: {sorted(my_set)}") print(f"字典 对象的排序结果是: {sorted(my_dict)}") # 进行容器的反向排序 print(f"列表 对象的反向排序结果是: {sorted(my_list, reverse=True)}") print(f"元组 对象的反向排序结果是: {sorted(my_tuple, reverse=True)}") print(f"字符串 对象的反向排序结果是: {sorted(my_str, reverse=True)}") print(f"集合 对象的反向排序结果是: {sorted(my_set, reverse=True)}") print(f"字典 对象的反向排序结果是: {sorted(my_dict, reverse=True)}")
Java: 省略,比Python复杂
Python: 函数的多返回值
# 演示使用多个变量,接收多个返回值 def test_return(): return 1,"hello",True x, y, z = test_return() print(x) print(y) print(z)
Java: 无法返回多个返回值。如果有多个值需要返回,需要用对象包装起来,最终返回一个对象
Python: 多种传参的形式:
def user_info(name, age, gender): print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}") # 位置参数 - 默认使用形式 user_info('小明', 20, '男') # 关键字参数 user_info(name='小王', age=11, gender='女') user_info(age=10, gender='女', name='晓晓') user_info('甜甜', gender='女', age=20) # 缺省参数(默认值) def user_info(name, age, gender='男'): print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}") def user_info(name, age, gender='男',hobby='any'): print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}, 爱好是:{hobby}") # 注意,Python里可以定义2个相同名字的函数,但是后面的函数会覆盖前面的函数 user_info('小天', 13) user_info('小天', 13, gender='女') user_info('小天', 13, gender='女', hobby='足球') # 不定长 - 位置不定长,*号 # 不定长定义的形式参数会作为元组存在,接收不定长数量的参数传入 def user_info(*args): print(f"args参数的类型是:{type(args)}, 内容是:{args}") user_info(1,2,3,'小明', '男孩') # 不定长 - 关键字不定长,**号 , kw代表 key - word (keyword) def user_info(**kwargs): print(f"kwargs参数的类型是:{type(kwargs)}, 内容是:{kwargs}") user_info(name='小王', age=11, gender='男') """ 上面的输出结果: 姓名是:小明, 年龄是:20, 性别是:男 姓名是:小王, 年龄是:11, 性别是:女 姓名是:晓晓, 年龄是:10, 性别是:女 姓名是:甜甜, 年龄是:20, 性别是:女 姓名是:小天, 年龄是:13, 性别是:男, 爱好是:any 姓名是:小天, 年龄是:13, 性别是:女, 爱好是:any 姓名是:小天, 年龄是:13, 性别是:女, 爱好是:足球 args参数的类型是:<class 'tuple'>, 内容是:(1, 2, 3, '小明', '男孩') kwargs参数的类型是:<class 'dict'>, 内容是:{'name': '小王', 'age': 11, 'gender': '男'} """
Java: 省略
Python: 函数作为参数传递
# 定义一个函数,接收另一个函数作为传入参数 def test_func(compute): result = compute(1, 2) # 确定compute是函数 print(f"compute参数的类型是:{type(compute)}") print(f"计算结果是:{result}") # 定义一个函数,准备作为参数传入另一个函数 def compute(x, y): return x + y # 调用,并传入函数 test_func(compute) """ 上面的输出结果是: compute参数的类型是:<class 'function'> 计算结果是:3 """
Java: 没有类似语法
Python: lambda匿名函数
# 定义一个函数,接收其他函数输入 def test_func(compute): result = compute(1, 2) print(f"结果是:{result}") # 通过lambda匿名函数的形式,将匿名函数作为参数传入 # 语法: lambda 传入参数: 函数体(一行代码) test_func(lambda x, y: x + y) test_func(lambda x, y: x + y)
Java: 省略
Python: 读文件
"""
演示文件的读取
"""
import time
# 打开文件
f = open("D:\\test.txt",'r',encoding='UTF-8')
print(type(f))
# 读取文件 - read()
print(f'读取的10个字节的结果为:{f.read(10)}')
print(f'read方法读取全部内容的结果是:{f.read()}')
# 读取文件 - readLines()
lines = f.readlines() # 读取文件的全部行,封装到列表中
print(f"lines对象的类型:{type(lines)}")
print(f"lines对象的内容是:{lines}")
# 读取文件 - readline()
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f"第一行数据是:{line1}")
print(f"第二行数据是:{line2}")
print(f"第三行数据是:{line3}")
# for循环读取文件行
for line in f :
print(f"每一行数据是:{line}")
# 文件的关闭
# f.close()
# time.sleep(500000)
# with open 语法操作文件
with open("D:\\test.txt",'r',encoding='UTF-8') as f:
for line in f:
print(f"每一行数据是:{line}")
Java: 省略
Python: 文件的写入
"""
# 打开文件,不存在的文件,r,w,a
import time
"""
f = open("D:/word.txt", "w", encoding="UTF-8")
# write写入
f.write("Hello World!!fffffffffDDDDDDDD!") # 内容写入到内存中
# flush 刷新
# f.flush() # 将内存中积攒的内容,写入到硬盘的文件
# close关闭
f.close() # close方法,内置了flush的功能的
Java: 省略
Python: 异常的捕获
"""
演示捕获异常
"""
# 基本捕获语法
try:
f = open("D:/abc.txt", "r", encoding="UTF-8")
except:
print("出现异常了,因为文件不存在,我将open的模式,改为w模式去打开")
f = open("E:/storage/study/Python/python-learn/day01/02-python-learn/08_文件操作/素材/abc.txt", "w", encoding="UTF-8")
# 捕获指定的异常
try:
print(name)
# 1 / 0
except NameError as e:
print("出现了变量未定义的异常")
print(e)
# 捕获多个异常
try:
# 1 / 0
print(name)
except (NameError, ZeroDivisionError) as e:
print("出现了变量未的定义 或者 除以0的异常错误")
# 未正确捕获异常类型,将无法捕获异常
# 捕获所有异常
try:
f = open("E:/storage/study/Python/python-learn/day01/02-python-learn/08_文件操作/素材/123.txt", "r", encoding="UTF-8")
except Exception as e:
print("出现异常了")
f = open("E:/storage/study/Python/python-learn/day01/02-python-learn/08_文件操作/素材/123.txt", "w", encoding="UTF-8")
else:
print("好高兴,没有异常")
finally:
print("我是finally, 有没有异常我都要执行")
f.close()
Java:异常的捕获
try {
System.out.println("你好");
}catch (Exception e){
e.printStackTrace();
}finally {
System.out.println("我好");
}
Python: 模块的导入
"""
演示Python的模块导入
"""
# 使用import导入time模块使用sleep功能(函数)
import time # 导入Python内置的time模块(time.py这个代码文件)
print("你好")
time.sleep(5) # 通过,就可以使用模块内部的全部功能(类、函数、变量)
print("我好")
# 使用from导入time的sleep功能(函数)
from time import sleep
print("你好")
sleep(5)
print("我好")
# 使用*导入time模块的全部功能
from time import * # *表示全部的意思
print("你好")
sleep(5)
print("我好")
# 使用as给特定功能加上别名
import time as t
print("你好")
t.sleep(5)
print("我好")
from time import sleep as sl
print("你好")
sl(5)
print("我好")
Java:模块的导入
import java.util.Random;
public static void main(String[] args) {
Random random = new Random();
System.out.println(random.nextInt());
}
Python: 自定义模块
# 导入自定义模块使用
# import my_module_1
# my_module_1.test_a(1, 2)
# 导入不同模块的同名功能
# from my_module_1 import test_a
# from my_module_2 import test_a
# test_a(1,2)
# __main__变量
# from my_module_1 import test_a
# test_a(1,2)
# __all__变量
from my_module_1 import *
test_a(1,2)
test_b(1,2)
#----------------------------my_module_1.py----------------------------
__all__ = ['test_a']
def test_a(a, b):
print(a+b)
def test_b(a, b):
print(a*b)
# test_a(2,3)
if __name__ == '__main__':
test_a(2,3)
#----------------------------my_module_2.py----------------------------
def test_a(a, b):
print(a - b)
Java:省略
Python: 安装包
pip install 包名
pip install -i https://pypi.tuna.tsinghua.edu.cn/simple 包名称
Java:省略
Python: json数据格式
"""
演示JSON数据和Python字典的相互转换
"""
import json
# 准备列表,列表内每一个元素都是字典,将其转换为JSON
data = [{"name":"张大山","age":11},{"name":"王大锤","age":13},{"name":"赵小虎","age":20}]
json_str = json.dumps(data, ensure_ascii=False)
print(type(json_str))
print(json_str)
# 准备字典,将字典转换为JSON
d = {"name":"周杰伦", "addr":"台北"}
json_str = json.dumps(d, ensure_ascii=False)
print(type(json_str))
print(json_str)
# 将JSON字符串转换为Python数据类型[{K: v, K: v},{K: v, K: v}]
s = '[{"name":"张大山","age":11},{"name":"王大锤","age":13},{"name":"赵小虎","age":20}]'
l = json.loads(s)
print(type(l))
print(l)
# 将JSON字符串转换为Python数据类型{K: v, K: v}
s = '{"name":"周杰伦", "addr":"台北"}'
d = json.loads(s)
print(type(d))
print(d)
Java: 省略
Python: 折线图开发
"""
演示可视化需求1:折线图开发
"""
import json
from pyecharts.charts import Line
from pyecharts.options import TitleOpts, LabelOpts
# 处理数据
f_us = open("E:/storage/study/Python/python-learn/day01/02-python-learn/10_可视化案例/素材/美国.txt", "r", encoding="UTF-8")
f_jp = open("E:/storage/study/Python/python-learn/day01/02-python-learn/10_可视化案例/素材/日本.txt", "r", encoding="UTF-8")
f_in = open("E:/storage/study/Python/python-learn/day01/02-python-learn/10_可视化案例/素材/印度.txt", "r", encoding="UTF-8")
# 去掉不合json规范的开头
us_data = f_us.read()
jp_data = f_jp.read()
in_data = f_in.read()
us_data = us_data.replace("jsonp_1629344292311_69436(","")
jp_data = jp_data.replace("jsonp_1629350871167_29498(","")
in_data = in_data.replace("jsonp_1629350745930_63180(","")
# 去掉不合JSON规范的结尾
us_data = us_data[:-2]
jp_data = jp_data[:-2]
in_data = in_data[:-2]
# json转Python字典
us_dict = json.loads(us_data)
jp_dict = json.loads(jp_data)
in_dict = json.loads(in_data)
# 获取trend key
us_trend_data = us_dict['data'][0]['trend']
jp_trend_data = jp_dict['data'][0]['trend']
in_trend_data = in_dict['data'][0]['trend']
# 获取日期数据,用于x轴,取2020年(到314下标结束)
us_x_data = us_trend_data['updateDate'][:314]
jp_x_data = jp_trend_data['updateDate'][:314]
in_x_data = in_trend_data['updateDate'][:314]
# 获取确认数据,用于y轴,取202年(到314下标结束)
us_y_data = us_trend_data['list'][0]['data'][:314]
jp_y_data = jp_trend_data['list'][0]['data'][:314]
in_y_data = in_trend_data['list'][0]['data'][:314]
# 生成图标
line = Line() # 构建折线图对象
# 添加x轴数据
line.add_xaxis(us_x_data) # x轴是公用的,所以使用一个国家的数据即可
# 添加y轴数据
line.add_yaxis("美国确诊人数", us_y_data, label_opts=LabelOpts(is_show=False)) # 添加美国的y轴数据
line.add_yaxis("日本确诊人数", jp_y_data, label_opts=LabelOpts(is_show=False)) # 添加日本的y轴数据
line.add_yaxis("印度确诊人数", in_y_data, label_opts=LabelOpts(is_show=False)) # 添加印度的y轴数据
# 设置全局选项
line.set_global_opts(
# 标题设置
title_opts=TitleOpts(title="2020年美日印三个国家的疫情图", pos_left="center", pos_bottom="1%", is_show=True)
)
# 调用render方法,生成图表
line.render()
# 关闭文件对象
f_us.close()
f_jp.close()
f_in.close()
Java: 省略
Python: 地图可视化的基本使用
import json
from pyecharts.charts import Map
from pyecharts.options import VisualMapOpts
# 读取数据文件
file = open("E:/storage/study/Python/python-learn/day01/02-python-learn/10_可视化案例/素材/疫情.txt", "r", encoding="UTF-8")
# 读取全部数据
data = file.read()
# 关闭文件
file.close()
# 取到各省数据
# 将字符串json转换为python的字典
data_dic = json.loads(data) # 基础数据字典
# 从字典中取出省份的数据
province_data_list = data_dic['areaTree'][0]['children']
# 组装每个省份和确诊人数为元组,并各个省的数据都封装到列表内
data_list = [] # 绘图需要用的数据列表
for province_data in province_data_list:
province_name = province_data['name'] # 省份名称
if ((province_name=="北京") | (province_name=="上海") | (province_name == "天津") | (province_name == "重庆")):
province_name += "市"
elif (province_name=="内蒙古") | (province_name=="西藏"):
province_name += "自治区"
elif (province_name=="广西"):
province_name += "壮族自治区"
elif (province_name=="新疆"):
province_name += "维吾尔自治区"
elif (province_name=="宁夏"):
province_name += "回族自治区"
elif (province_name=="香港") | (province_name=="澳门"):
province_name += "特别行政区"
else:
province_name += "省"
confirm = province_data['total']['confirm'] # 确诊人数
data_list.append((province_name,confirm))
# 创建地图对象
map = Map()
# 添加数据
map.add("各省份确诊人数", data_list, 'china')
# 设置全局配置,定制分段的视觉映射
map.set_global_opts(
visualmap_opts = VisualMapOpts(
is_show=True, # 是否显示
is_piecewise=True, # 是否分段
pieces=[
{"min": 0, "max": 99, "label": "0-99人", "color": 'green'},
{"min": 100, "max": 999, "label": "100-999人", "color": 'black'},
{"min": 1000, "max": 5000, "label": "1000-5000人", "color": 'yellow'},
{"min": 5000, "max": 9999, "label": "5000-9999人", "color": 'blue'},
{"min": 10000, "max": 99999, "label": "10000-99999人", "color": 'red'},
{"min": 100000, "label": "100000人以上", "color": 'pink'}
]
)
)
# 绘图
map.render("全国疫情地图.html")
Python: 面向对象》类的创建
# 1. 设计一个类(类比生活中:设计一张登记表)
class Student:
name = None # 记录学生姓名
gender = None # 记录学生性别
nationality = None # 记录学生国籍
native_place = None # 记录学生籍贯
age = None # 记录学生年龄
# 2. 创建一个对象(类比生活中:打印一张登记表)
stu1 = Student()
# 3. 对象属性进行赋值(类比生活中:填写表单)
stu1.name = "林俊杰"
stu1.gender="男"
stu1.nationality="中国"
stu1.native_place="山东省"
stu1.age=31
# 4. 获取对象中记录的信息
print(stu1.name)
print(stu1.gender)
print(stu1.nationality)
print(stu1.native_place)
print(stu1.age)
Java: 面向对象》类的创建
public class Student {
private String name;
private int age;
public static void main(String[] args) {
Student student = new Student();
student.name = "林俊杰";
student.age = 20;
}
}
Python: 成员方法
class Student:
name = None # 学生的姓名
def say_hi(self):
print(f"大家好呀,我是{self.name}, 欢迎大家多多关照")
def say_hi2(self, msg):
print(f"大家好呀,我是{self.name},{msg}")
stu1 = Student()
stu1.name = "张三"
stu1.say_hi()
Java: 成员方法
public class Student {
private String name;
private int age;
public void say_hi(){
System.out.println("姓名:"+this.name+" ,年龄:"+this.age);
}
public static void main(String[] args) {
Student student = new Student();
student.name = "林俊杰";
student.age = 20;
}
}
Python: 类和对象
"""
演示类和对象的关系,即面对对象的编程套路(思想)
"""
class Clock:
id = None # 序列化
price = None # 价格
def ring(self):
import winsound
winsound.Beep(2000,5000)
# 构建2个闹钟对象并让其工作
clock1 = Clock()
clock1.id = "0020"
clock1.price = 100
print(f"闹钟ID:{clock1.id}, 价格:{clock1.price}")
clock1.ring()
Java: 省略
Python: 构造方法
# 演示使用构造方法对成员变量进行赋值
# 构造方法的名称: __init__
class Student:
name = None
age = None
tel = None
def __init__(self, name, age, tel):
self.name = name
self.age = age
self.tel = tel
print(f"名字为:{self.name}, 年龄为:{self.age}, 电话为:{self.tel}")
stu1 = Student("张三", 20, "18679772038")
print(stu1.name)
print(stu1.age)
print(stu1.tel)
Java: 构造方法
public class Student {
private String name;
private int age;
Student(String name, int age) {
this.name = name;
this.age = age;
}
public static void main(String[] args) {
Student student = new Student("林俊杰", 20);
System.out.println(student.name);
System.out.println(student.age);
}
}
Python: 其他内置方法
class Student:
def __init__(self, name, age, tel):
self.name = name
self.age = age
self.tel = tel
print(f"名字为:{self.name}, 年龄为:{self.age}, 电话为:{self.tel}")
# __lt__魔术方法
def __lt__(self, other):
return self.age < other.age
# __le__魔术方法
def __le__(self, other):
return self.age < other.age
# __eq__魔术方法
def __eq__(self, other):
return self.age == other.age
# __str__魔术方法
def __str__(self):
return f"名字为:{self.name}, 年龄为:{self.age}, 电话为:{self.tel}"
stu1 = Student("张三", 20, "18679772986")
stu2 = Student("李四", 30, "18679832729")
print(stu1 < stu2)
print(stu1 > stu2)
print(stu1 <= stu2)
print(stu1 >= stu2)
print(stu1 == stu2)
print(stu1)
print(stu2)
Java: hash方法,toString方法
省略
Python: 封装
# 定义一个类,内含私有成员变量和私有成员方法
class Phone:
# 私有成员变量
__current_voltage = 0.5 # 当前手机运行电压
def __keep_single_core(self): # 私有成员方法
print("让CPU以单核模式运行")
def call_by_5g(self):
if self.__current_voltage >= 1:
print("5g通话已开启")
else:
self.__keep_single_core()
print("电量不足,无法使用5g通话,并已设置为单核运行进行省点。")
phone = Phone()
# print(phone.__current_voltage) # 报错
phone.call_by_5g()
Java: 封装
public class Phone {
private int current_voltage = 1;
private void keep_single_core(){
System.out.println("让CPU以单核模式运行");
}
public void call_by_5g(){
if (this.current_voltage > 1) {
System.out.println("5g通话已开启");
}else {
System.out.println("电量不足,无法使用5g通话,并已设置为单核运行进行省点。");
}
}
public static void main(String[] args) {
Phone student = new Phone();
student.keep_single_core();
}
}
Python: 继承
# 演示单继承
class Phone:
IMEI = None # 序列号
producer = "HM" # 厂商
def call_by_4g(self):
print("4g通话")
class Phone2022(Phone):
face_id = "1001" # 面部识别ID
def call_by_5g(self):
print("5g通话")
phone = Phone2022()
phone.call_by_4g()
phone.call_by_5g()
# 演示多继承
class NFCReader:
nfc_type = "第五代"
producer = "New HM"
def read_card(self):
print("NFC读卡")
def write_card(self):
print("NFC写卡")
class RemoteControl:
rc_type = "红外遥控"
def control(self):
print("红外遥控开启了")
class MyPhone(Phone, NFCReader, RemoteControl):
pass
myPhone = MyPhone()
myPhone.call_by_4g()
myPhone.read_card()
myPhone.write_card()
myPhone.control()
print(myPhone.producer)
Java: Java中不支持类的多继承,继承通过extends关键字。如果想要实现多继承,可以使用接口实现多继承。
Python: 继承》复写和使用父类成员
class Phone:
IMEI = None # 序列号
producer = "ITCAST" # 厂商
def call_by_5g(self):
print("使用5g网络进行通话")
# 定义子类,复写父类成员
class MyPhone(Phone):
producer = "ITHEIMA" # 复写父类的成员属性
def call_by_5g(self):
print("开启CPU单核模式,确保通话的时候省电")
# 在子类中调用父类成员
# 方式1
# print(f"父类的厂商是:{Phone.producer}")
# Phone.call_by_5g(self)
# 方式2
print(super().producer)
super().call_by_5g()
print("关闭CPU单核模式,确保性能")
phone = MyPhone()
phone.call_by_5g()
Java: 省略
Python: 类型注解--变量
类型注解只是帮助开发者自身对变量进行类型注释
import json
import random
var_1: int = 10
var_2: str = "itheima"
var_3: bool = True
# 类对象类型注解
class Student:
pass
stu: Student = Student()
# 基础容器类型注解
my_list: list = [1,2,3]
my_tuple: tuple = (1,2,3)
my_dict: dict = {"itheima": 666}
# 容器类型详细注解
my_list: list[int] = [1,2,3]
my_tuple: tuple[int, str, bool] = (1, "itheima", True)
my_dict: dict[str,int] = {"itheima": 666}
# 在注释中进行类型注解
var_1 = random.randint(1,10) # type: int
var_2 = json.loads('{"name": "zhangsan"}') # type: dict[str,str]
def func():
return 10
var_3 = func() # type: int
# 类型注解的限制
var_4: int = "itheima" # 运行程序不会报错
var_5: str = 123 # 运行程序不会报错
Java: 省略
Python: 类型注解 -- 函数和方法
"""
演示对函数(方法)进行类型注解
"""
# 对形参进行类型注解
def add(x: int, y: int):
return x+y
# 对返回值进行类型注解
def func(data: list) -> list:
return data
# 类型注解不是强制性的,只是用于备注作用,就算类型对不上也不会报错
print(func(1)) # 输出 1
Java: 省略
Python: 类型注解 -- Union联合类型
"""
演示Union联合类型注解
"""
# 使用Union类型,必须先导包
from typing import Union
my_list: list[Union[int, str]] = [1,2,"itheima", "itcast"]
def func(data: Union[int,str]) -> Union[int,str]:
pass
func(1)
Java: 没有这种语法
Python: 多态
"""
演示面向对象的多阿泰特性及抽象类(接口)的使用
"""
class Animal:
def speak(self):
pass
class Dog(Animal):
def speak(self):
print("汪汪汪")
class Cat(Animal):
def speak(self):
print("喵喵喵")
def make_noise(animal: Animal):
"""制造点噪音,需要传入Animal对象"""
animal.speak()
# 演示多态:使用2个子类对象来调用函数
dog = Dog()
cat = Cat()
make_noise(dog)
make_noise(cat)
# 演示抽象类
class AC:
def cool_wind(self):
"""制冷"""
pass
def hot_wind(self):
"""制热"""
pass
def swing_l_r(self):
"""左右摆风"""
pass
class Midea_AC(AC):
def cool_wind(self):
print("美的空调制冷")
def hot_wind(self):
print("美的空调制热")
def swing_l_r(self):
print("美的空调左右摆风")
class GREE_AC(AC):
def cool_wind(self):
print("格力空调制冷")
def hot_wind(self):
print("格力空调制热")
def swing_l_r(self):
print("格力空调左右摆风")
def make_cool(ac: AC):
ac.cool_wind()
midea_ac = Midea_AC()
gree_ac = GREE_AC()
make_cool(midea_ac)
make_cool(gree_ac)
Java: 省略

浙公网安备 33010602011771号