当前位置: 首页 > news >正文

Python 语法学习 1(类比 java 学习)-附Python 中 self

这里的学习背景是学会了 java,但是不会 Python 的语法

类比的方式来讲 Python 的语法,这样更容易上手。用 twoSum 例子来展开说说 Python 和 Java 的异同。


一、类定义和方法

Java:

public class Solution {
    public int[] twoSum(int[] nums, int target) {
        // ...
    }
}

Python:

class Solution(object):
    def twoSum(self, nums, target):
        # ...
对比解释:
  • class Solution(object):定义一个类,object 是所有类的基类(可以省略)。

  • def 是 Python 中定义方法(函数)的关键词,相当于 Java 里的 public + 返回类型。

  • self 是 Python 类中方法的第一个参数,表示类的实例,相当于 Java 里的 this

  • Python 不需要写返回类型(Python 是动态类型语言)。


二、注释的写法

"""
:params nums: List[int]
:params target: int
:return: List[int]
"""

这个是文档字符串,可以帮助别人理解函数的参数和返回值。和 Java 中的 javadoc 比较像:

/**
 * @param nums 输入数组
 * @param target 目标值
 * @return 两个数的下标
 */

三、语法格式(很关键)

Python:

  • 不需要大括号 {},而是用缩进(通常是4个空格)表示代码块。

  • 结尾不需要分号 ;

  • 变量声明不需要写类型,比如 a = 1 就可以了。


四、一个完整的 Python 实现(对照 Java 思维)

class Solution(object):
    def twoSum(self, nums, target):
        hashmap = {}
        for i in range(len(nums)):
            complement = target - nums[i]
            if complement in hashmap:
                return [hashmap[complement], i]
            hashmap[nums[i]] = i

Java 类比版:

public int[] twoSum(int[] nums, int target) {
    Map<Integer, Integer> map = new HashMap<>();
    for (int i = 0; i < nums.length; i++) {
        int complement = target - nums[i];
        if (map.containsKey(complement)) {
            return new int[] { map.get(complement), i };
        }
        map.put(nums[i], i);
    }
    return null;
}

五、常见语法小贴士

JavaPython
public int x = 0;x = 0
if (a == b) {}if a == b:
for (int i = 0; i < n; i++)for i in range(n):
String s = "abc";s = "abc"
System.out.println()print()

self 


✅ 先看 Java 中的例子:

public class Dog {
    String name;

    public Dog(String name) {
        this.name = name;
    }

    public void bark() {
        System.out.println(this.name + " is barking!");
    }
}

在这个类中:

  • this.name 就是指这个“Dog”对象自己的 name

  • this 就是当前实例对象(new 出来的那只狗)。


🔁 对应到 Python 中:

class Dog:
    def __init__(self, name):
        self.name = name

    def bark(self):
        print(self.name + " is barking!")

解释:

  • self 就相当于 Java 里的 this

  • self.name = name 就是把传进来的名字赋值给当前实例对象。

  • 在调用 bark() 的时候,self 会自动表示当前这只狗。


🧠 举个完整例子来理解 self

dog1 = Dog("Lucky")
dog2 = Dog("Snowy")

dog1.bark()  # 输出:Lucky is barking!
dog2.bark()  # 输出:Snowy is barking!

在执行 dog1.bark() 时,Python 会自动把 dog1 作为第一个参数传给 bark() 方法的 self,所以:

self = dog1

✅ 所以总结一下:

JavaPython
this.name = name;self.name = name
public void bark()def bark(self):
自动传入当前对象 this自动传入当前对象 self

可以试着把 self 暂时当成 Java 里的 this,只不过在 Python 里必须手动写出来作为第一个参数(这是语法规定),而 Java 是隐式存在的。


http://www.dtcms.com/a/113555.html

相关文章:

  • 前端用用jsonp的方式解决跨域问题
  • [ICLR 2025]Biologically Plausible Brain Graph Transformer
  • Reids 的io并发模型
  • 程序化广告行业(60/89):算法优化与DSP系统实例解析
  • Linux系统程序设计:从入门到高级Day03
  • 第八章:流量治理_《凤凰架构:构建可靠的大型分布式系统》
  • DDPM 做了什么
  • 2007-2019年各省地方财政其他支出数据
  • 格式工厂怎样插入内置音频文件
  • 硬件工程师面试问题(五):蓝牙面试问题与详解
  • 在响应式网页的开发中使用固定布局、流式布局、弹性布局哪种更好
  • vllm作为服务启动,无需额外编写sh文件,一步到位【Ubuntu】
  • 『Linux_网络』 第一章 网络基础概念
  • 分表字段选择策略:以电商交易订单为例的最佳实践
  • Java项目之基于ssm的怀旧唱片售卖系统(源码+文档)
  • 大数据时代的隐私保护:区块链技术的创新应用
  • 通过构造函数和几何条件,研究了不同函数的最近点存在性、性质及单调性
  • ZKmall开源商城多云高可用架构方案:AWS/Azure/阿里云全栈实践
  • 紧急更新!MinIO发布RELEASE.2025-04-03T14-56-28Z版本,修复高危漏洞CVE-2025-31489,用户需立即升级!
  • raft协议中一条数据写入流程
  • Java 实现插入排序:[通俗易懂的排序算法系列之三]
  • 文献总结:TPAMI综述BEV感知—Delving into the devils of bird‘s-eye-view perception
  • Socket编程TCP
  • HarmonyOS:WebView 控制及 H5 原生交互实现
  • 硬件学习之器件篇-蜂鸣器
  • 第三章 react redux的学习之redux和react-redux,@reduxjs/toolkit依赖结合使用
  • use_tempaddr 笔记250405
  • setj集合
  • 1.5 基于改进蛇优化VGG13SE故障诊断方法的有效性分析
  • Python实现链接KS3,并将文件数据上传到KS3