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: 省略

 

posted @ 2023-09-25 20:32  灰色人生qwer  阅读(72)  评论(0)    收藏  举报