大数据(7f)比较Python和Scala面向对象

学习笔记《实用Python程序设计》第二章 有空就学一点 阅读详情

导入:import

from sklearn.svm import *
from sklearn.svm import SVC
from sklearn.svm import SVC as S, SVR
import java.util._
import java.util.ArrayList
import java.util.{ArrayList=>AL,HashSet}

类:class

Scala的this类似Python的self和__init__

class Batman:
    def __init__(self, name, mp=10):
        self.__name = name  # 私有属性
        self.mp = mp
    def info(self):
        print(self.__name, self.mp)

dogface = Batman('dogface')
dogface.info()
print(dogface._Batman__name)  # 私有属性(IDE报错)
class Batman {
  // 主构造器
  private var name: String = _  // 私有属性
  var mp: Int = 10

  def this(name:String) {
    // 辅助构造器1
    this()
    this.name = name
  }
  def this(name:String, mp:Int) {
    // 辅助构造器2
    this(name)
    this.mp = mp
  }

  def info(): Unit = {
    print(name, mp)
  }
}

object Hello {
  def main(args: Array[String]): Unit = {
    val dogface = new Batman("dogface", 3)
    dogface.info()
    // println(dogface.name) 私有属性不能访问
  }
}

继承

class Batman:
    def __init__(self, name, mp=10):
        self.name = name
        self.mp = mp

class Hero(Batman):
    def __init__(self, name, mp=20, ad=5):
        super().__init__(name, mp)
        self.ad = ad
    # 多态:Batman和Hero都可传入
    def attack(self, enemy: Batman):
        print(enemy.mp - self.ad)

bm = Hero('Blade Master')
mk = Hero('Mountain King')
bm.attack(mk)
class Batman(var name:String, var hp:Int=10) {}

class Hero(name:String, hp:Int=20, var ad:Int=5) extends Batman(name, hp) {
  // 多态:Batman和Hero都可传入
  def attack(enemy: Batman): Unit = {
    println(enemy.hp - ad)
  }
}

object Hello {
  def main(args: Array[String]): Unit = {
    val bm = new Hero("Blade Master")
    val dh = new Hero("Demon Hunter")
    bm.attack(dh)
  }
}

抽象类:abstract

父类先定义好一些方法,要求子类必须重写这些方法

from abc import ABCMeta, abstractmethod


class Animal(metaclass=ABCMeta):
    @abstractmethod
    def eat(self):
        raise NotImplementedError

    @classmethod
    @abstractmethod
    def drink(cls):
        pass

    @staticmethod
    @abstractmethod
    def run():
        pass


class Dog(Animal):
    def eat(self):
        print('重写方法才不报错')

    @classmethod
    def drink(cls):
        print('重新类方法')

    @staticmethod
    def run():
        print('重新静态方法')


dog = Dog()

关键字abstract和override

// 抽象类:abstract关键字标记的类
abstract class Animal {
  // 抽象属性:属性没有赋值
  val name: String
  // 抽象方法:只声明而没有实现的方法
  def eat(): Unit
  // 非抽象方法
  def run(): Unit = {
    println("run1")
  }
}

class Dog extends Animal {
  val name: String = "dog"
  def eat(): Unit = {
    println("实现抽象方法可省略`override` " + name)
  }
  // 重写非抽象方法要写`override`
  override def run(): Unit = {
    super.run()
    println("run2")
  }
}

object Hello {
  def main(args: Array[String]): Unit = {
    val d: Dog = new Dog()
    d.eat()
    d.run()
  }
}

单例对象

class Singleton:
    def __new__(cls, *args, **kwargs):
        if not hasattr(Singleton, '_instance'):
            Singleton._instance = object.__new__(cls)
        return Singleton._instance

for i in range(9):
    print(Singleton())
// 1、主构造方法私有化
class Singleton private() {}

object Singleton{
  // 2、提供 私有静态属性,接收单例对象
  private val s: Singleton = new Singleton()
  // 3、公共的、静态的【获取单例对象】方法
  def getInstance(): Singleton = s
}

object Hello {
  def main(args: Array[String]): Unit = {
    for (i <- 0 to 9) {
      println(Singleton.getInstance())
    }
  }
}

特质(多继承):trait

class Man:
    name = '男人'
    def run(self):
        print('奔跑吧,' + self.name)

class Bird:
    name = '鸟'
    def fly(self):
        print('起飞吧,' + self.name)

class BirdMan(Man, Bird):
    pass

bm = BirdMan()
bm.run()
bm.fly()

如上Python多继承,若存在同名,前者会遮蔽后者
打印结果:

奔跑吧,男人
起飞吧,男人

class Man {
  val name : String = "男人"
  def run(): Unit = {
    println("奔跑吧," + name)
  }
}

trait Bird {
  val name : String = "鸟"
  def fly(): Unit = {
    println("起飞吧," + name)
  }
}

class BirdMan extends Man with Bird {
  // 不重写 name 会报错:特质冲突
  override val name : String = "鸟 人"
}

object Hello {
  def main(args: Array[String]): Unit = {
    val bm : BirdMan = new BirdMan()
    bm.run()
    bm.fly()
  }
}

如上Scala特质打印结果

奔跑吧,鸟 人
起飞吧,鸟 人

封装属性(property)

class Round:
    __radius = 0

    @property
    def radius(self):
        return self.__radius

    @radius.setter
    def radius(self, value):
        if value < 0:
            raise ValueError('要求半径大于零')
        self.__radius = value

    @property
    def perimeter(self):
        return '{}pi'.format(self.radius * 2)


r = Round()
r.radius = 2.5
print(r.radius, r.perimeter)
# 以下操作报错
# r.perimeter = 9  # AttributeError: can't set attribute
# r.radius = -1  # ValueError: 要求半径大于零
class Round {
  var radius: Float = _
  def perimeter: String = s"${radius * 2}pi"
}

object Hello {
  def main(args: Array[String]): Unit = {
    val r : Round = new Round()
    r.radius = 2.5f
    println(r.radius, r.perimeter)
    // r.perimeter = 5  报错
  }
}

apply

Scala创建对象要默认有new,使用apply可以不用new

class Hero private(n: String) {
  private val name: String = n

  def info(): Unit = {
    printf(s"姓名:${name}\n")
  }
}

object Hero {
  def apply(): Hero = {
    new Hero("小兵")
  }

  def apply(name: String): Hero = {
    new Hero(name)
  }
}

val b1 = Hero()
val b2 = Hero("剑圣")
b1.info()  // 打印结果:小兵
b2.info()  // 打印结果:剑圣

case class(样例类)

  1. 和普通类相比,样例类会自动生成伴生对象,并提供了一些常用的方法:apply、unapply、toString、equals、hashCode、copy…
  2. 样例类可以直接使用模式匹配,因为其默认提供了unapply方法
  3. 构造器中的每一个参数都成为val,除非它被显式地声明为var(不建议)
case class Hero(name: String, lv: Int)

val h1: Hero = Hero("剑圣", 10)

val result = h1 match {
  case Hero("剑圣", 9) => "未满级"
  case Hero("剑圣", 10) => "满级"
  case _ => "不知道"
}

println(result) //满级

用样例类来定义DataSet中数据的结构信息,样例类中每个属性的名称直接映射到字段名称

import org.apache.spark.sql.{SparkSession, Dataset}

object Hello {
  def main(args: Array[String]): Unit = {
    // 创建SparkSession对象 并 设置隐式转换
    val spark: SparkSession = SparkSession.builder()
      .master("local[*]").appName("a").getOrCreate()
    import spark.implicits._
    // 创建DataSet
    val ds: Dataset[Hero] = Seq(Hero("剑圣", 9), Hero("先知", 7)).toDS
    ds.show()
  }
}

case class Hero(name: String, level: Int)

/*
+----+-----+
|name|level|
+----+-----+
|剑圣|    9|
|先知|    7|
+----+-----+
*/
python的竞争者scala,谁更适合大数据 在浏览spark的官网时,机缘巧合的我看到这这样一张图 这其中出现了三个熟悉的身影,Java、Scala、python,作为最近热门讨论的语言,那python和scala在大数据的竞争中到底谁更胜一筹呢?虽然python因为其“胶水”特性,被更多的使用和讨论,但是scala也真的不要小瞧他,他在spark的支撑下,真的也是一门强大的语言,来看一下scala的神秘色彩吧 Scal... 阅读详情

相关推荐

(六)Spark大数据开发实战:豆瓣电影数据处理与分析(scala版)

本项目对电影信息数据进行处理和分析,实现了对电影演员、电影类型、上映时间等多维度的统计分析。同时考察了DataFrame操作、Spark SQL操作、聚合与数据转换、窗口函数、日期和时间处理、数据清洗、写入写出等等。 由于Scala是直接运行在JVM上,因此它的运行速度通常比Python快。经测试,本项目的scala版本代码运行总用时22.8秒,而python版本代码运行总用时24.6秒,scala运行比python稍快一点,总的来说相差不大,在大规模数据量的项目中,scala的优势会更加明显。

weixin_44458771的博客 4015

python字符串格式化

字符串格式化与re模块

weixin_64311421的博客 477

BigData-Notes 16.9k Star 项目解析:从 Hadoop 到 Flink 的 13 个组件学习路径

本文解析了16.9k Star的BigData-Notes开源项目,为开发者设计了一套从Hadoop到Flink的13周系统学习路径。该项目覆盖大数据生态的13个核心组件,包含理论基础、环境搭建、API使用等多元学习维度,适合中级开发者快速构建大数据知识体系。

culh2177的博客 873

python基础(占位符以及数据处理的方法)

python input():接受用户输入,默认返回的是一个字符串 a=3.141567890 print("π的值为:%.10f" %a) 那么%f默认返回6为小数位,在前面添加.10就会返回10为小数点,如果没有10为小数,会自动补零; ctrl+/快速注释 常用的占位符: %d,整数 %f 浮点数 %s 字符串 %% 表示符号本身 a = '小张' b = "小吴" print("他们的名字分别是%s、%s" %(a,b)) format占位符:{} 格式: b=100/3

qq_58877067的博客 1336

Scala语言的软件工程

Scala是一种多范式编程语言,由马丁·奥德斯基(Martin Odersky)于2003年首次发布。其命名来源于“可缩放的语言”(scalable language),指的是其能够适应各种规模的项目需求。Scala运行在Java虚拟机(JVM)上,这意味着Scala程序可以调用Java库,并且与现有的Java应用程序兼容。

2501_90247484的博客 493

Python vs Scala:大数据预处理工具链深度评测

在大数据处理流程中,预处理环节(数据清洗、格式转换、异常值处理等)占据超过60%的开发时间。Python和Scala作为两大主流技术栈,分别构建了成熟的工具生态,但在不同应用场景下表现迥异。两种语言在数据预处理工具链上的核心差异是什么?分布式计算框架(如Spark)的多语言支持如何影响工程实践?数据规模、团队技术栈、系统性能需求如何驱动技术选型?本文通过「语言特性→工具链架构→算法实现→实战对比→应用场景」的逻辑链条,逐层剖析两种技术栈的核心差异。

AI Agent Harness Engineering 842

使用Python求斐波那契数列

斐波那契数列指的是这样一个数列 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233,377,610,987,1597,2584,4181,6765,10946,17711,28657,46368........ 这个数列从第3项开始,每一项都等于前两项之和。

127.0.0.1的博客 868

python实现ECMS算法

ECMS(Equivalent Consumption Minimization Strategy)算法是一种用于混合动力汽车能量管理系统的优化策略。它通过计算等效油耗来平衡电池电量消耗和燃油消耗,从而优化整体能耗。以下是一个简单的Python实现,用于演示ECMS算法的基本思想。这个实现假设了一个简单的混合动力汽车模型,其中电池电量和燃油消耗是主要的优化目标。

weixin_45570158的博客 924

Python一些函数用法(算法相关)

将s视为16进制数并转换为10进制数,16可转换为任意数。

qq_42239005的博客 468

Zotero PDF Translate插件实战:DeepL API免费申请与高效翻译配置指南

本文提供Zotero PDF Translate插件配置DeepL API的完整实战指南。详细介绍了如何免费申请DeepL API密钥,解决国内访问问题,并在插件中完成精细配置,实现文献阅读时的无缝划词翻译,大幅提升科研人员和学生的英文文献阅读效率。

rum55的博客 464

保姆级避坑指南:Mid-360雷达到手后,用livox_ros_driver2从接线到出点云的完整流程

本文提供Mid-360雷达到手后的完整使用指南,涵盖从硬件接线、网络配置到livox_ros_driver2驱动的安装与调试,帮助用户避开常见陷阱,实现点云数据的稳定输出与可视化。重点解析了配置文件的参数设置和点云格式选择,确保用户能够高效部署和使用Mid-360雷达。

weixin_30733003的博客 489

大数据(7d)比较Python和Scala的方法和函数

文章目录PythonScala Python 原名 method function 译名 方法 函数 调用方式 对象名.方法名() 函数名() f2 = lambda: None def f1(): pass class C: def __init__(self): pass def m1(self): pass @staticmethod def m2(): pass @classme

ArYe 559

AI编码的“黑箱危机”终结者:OpenSpec如何让你的代码从“猜谜”变“契约”?

OpenSpec的真正价值,在于它将AI编码从"经验驱动"推向"契约驱动"——当人类与AI对"目标是什么"达成显式共识,编码就从"猜谜游戏"变成了"工程实现"。这种转变不仅提升效率,更重塑了开发者与AI的关系:AI从"替代者"回归"协作者",而人类则聚焦于"定义正确的事"而非"正确地做事"。对于开发者,OpenSpec提供了驾驭AI的缰绳;对于团队,它构建了协作的基石;对于行业,它预示着AI编码工业化的开端。

haolove527的专栏 1350

scala 定义空list_python的竞争者scala,谁更适合大数据

在浏览spark的官网时,机缘巧合的我看到这这样一张图这其中出现了三个熟悉的身影,Java、Scala、python,作为最近热门讨论的语言,那python和scala在大数据的竞争中到底谁更胜一筹呢?虽然python因为其“胶水”特性,被更多的使用和讨论,但是scala也真的不要小瞧他,他在spark的支撑下,真的也是一门强大的语言,来看一下scala的神秘色彩吧Scala介绍1.Spark中使...

weixin_35983438的博客 101

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

锂电池寿命预测 | Pytorch实现基于Transformer 的锂电池寿命预测(NASA数据集)

算法如诗的博客 5589

【软考中级网络工程师】知识点之 ICMP 协议

本文聚焦软考中级网络工程师必备的 ICMP 协议知识,先概述其在 TCP/IP 协议族网络层的地位与无连接特性,再阐述差错报告、网络诊断等功能。解析报文格式,详解差错与查询类报文类型及工作机制,还介绍其在 Ping、Traceroute 命令中的应用,分析常见攻击与防范措施,最后总结核心要点,为网络工程师学习和应用 ICMP 协议提供全面指导。

邓邓子的博客 1405

大数据(7j)比较Python和Scala的yield

以Python为参照速查Scala语法简单的yieldyield+判断 简单的yield Python的yield在函数中,遍历函数取值 def f(): for i in range(5): yield i ** 2 Scala的yield配合for用来赋值 val vector = for (i <- 1 to 5) yield { i * i } print(vector) // Vector(1, 4, 9, 16, 25) yield+判断 Python:

ArYe 438

基于双目视觉的行车中障碍距离检测方法研究与目标跟踪

本文将介绍基于Python语言的双目视觉技术,以及如何使用该技术检测行车中的障碍物并跟踪目标。双目视觉利用两个摄像头模拟人眼的立体视觉,通过对两个摄像头所捕捉的图像进行比较和分析,可以得到物体的深度信息。首先,我们需要安装Python的OpenCV库,该库提供了丰富的图像处理和计算机视觉功能。接下来,我们进入一个循环中,不断读取左右图像,并将其转换为灰度图像。在视差图上,您可以实现目标检测和跟踪算法来识别和跟踪行车中的障碍物。请注意,上述代码只是一个简单示例,您可以根据具体需求和算法进行修改和扩展。

ZgnObjectivec的博客 278

python elseif用法_python的竞争者scala,谁更适合大数据

在浏览spark的官网时,机缘巧合的我看到这这样一张图这其中出现了三个熟悉的身影,Java、Scala、python,作为最近热门讨论的语言,那python和scala在大数据的竞争中到底谁更胜一筹呢?虽然python因为其“胶水”特性,被更多的使用和讨论,但是scala也真的不要小瞧他,他在spark的支撑下,真的也是一门强大的语言,来看一下scala的神秘色彩吧Scala介绍1.Spark中使...

weixin_39601743的博客 120

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法

keil工程After Build/Rebuild添加带参.exe实现全流程(2):带参调用.exe的几种方法。

kevin1499的博客 1617

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

深入探索 Scala:一门融合面向对象与函数式编程的现代编程语言

Scala 语言的最大特点是它融合了两种编程范式:面向对象编程(OOP)和函数式编程(FP)。这种独特的设计使得 Scala 既能够满足传统企业级应用的需求,又能应对现代大规模分布式系统的挑战。本文将深入介绍 Scala 语言的基本概念、核心特性及实际应用,帮助读者全面了解这门语言。

fudaihb的博客 1112

温度PID控制PLC程序

温度PID稳定控制程序,适用于欧姆龙PLC,对其他PLC也具有很大参考价值

Spark BigData Program:大数据实时流处理日志

Spark BigData Program:大数据实时流处理日志 文章目录Spark BigData Program:大数据实时流处理日志一、项目内容二、需求分析三、项目架构四、数据源(DataSource)python数据源Scala数据源数据样本五、采集系统(Flume)*zoo1 zoo2**zoo3*启动命令六、消息队列(Kafka)server.properties配置Kafka启动指令Kafka集群启动脚本Kafka添加topic主题IDEA消费者模型七、流式实时计算(Struct Strea

chaney的博客 707

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

1.Scala开发环境搭建和HelloWorld解析

一、Scala语言简介   scala本身是一门函数式编程和面向对象编程结合的语言:   1.函数式编程非常擅长数值计算   2.面向对象特别适合于大型工程或项目的组织以及团队的分工协作。      scala基于函数式编程和面向对象编程,构建了一门非常优雅的语言。 我们借助于scala,可以非常优雅地构造出各种规模的项目,这种项目不仅结构优雅,而且在做计算的时候,非常地精致和富于表现力。

KongMingJue的博客 644

大数据(7k)比较Scala、Java、SQL、Python的case模式匹配

匹配常量 匹配类型 匹配数组 匹配元组 for匹配元组 map匹配元组 关键词:match和case 类似Java的switch

ArYe 556

大数据(7e)Scala方法和函数的简化过程

带参函数 无参函数 函数作为参数 匿名函数 函数写法补充 比较Scala和Python的函数写法 下划线 用法

ArYe 576

学习Spark一定要先学会Scala吗?

这些前沿方向不仅能丰富你的简历内容,更能让你站在时代的最前沿,参与到最具挑战性的项目当中。但是,随着社区的发展和技术的进步,现在Spark也提供了对其他编程语言的良好支持,例如Python、R 和 Java。无论你是希望转型进入大数据领域的新手,还是寻求晋升机会的技术专家,CDA认证都能为你提供强有力的支持。在这个过程中,保持开放的心态和好奇心是非常重要的。为了更好地理解两者之间的差异,接下来我们将通过一个简单的例子来展示如何用Python和Scala分别实现相同的功能——计算一组数字的平均值。

cda2024的博客 862
上一篇: 大数据(7b)比较Python和Scala语法
下一篇: 大数据(7z)Scala手写中文分词
小基基o_O
博客等级 码龄9年 4414粉丝 467原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小基基o_O

您的鼓励是我创作的巨大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值