Python学习从0开始——001

本文介绍了Python初学者如何设置环境,使用unittest模块编写测试用例,包括断言的使用、Python与Java/Java/C在import、def和class上的区别,以及if语句的异同。
摘要由CSDN通过智能技术生成

一、环境

不用在本地部署,使用InsCode,刚开始能简单就简单
在这里插入图片描述
然后点击开发新项目
在这里插入图片描述
选中Python模板之后点击创建,然后进入开发界面
在这里插入图片描述
然后等待创建,大概一两分钟。进入初始界面,直接点击运行按钮,会在右侧终端输出。
在这里插入图片描述

二、测试用例

百度一下,使用文心一言提供一个demo,然后加了一些注释,可以将以下代码直接放进main.py运行。

import unittest  
  
# 测试方法  
def add_numbers(a, b):  
    return a + b  
  
# 继承自 unittest.TestCase。unittest 是Python的标准库中的一个模块,用于编写和运行测试用例
class TestAddNumbers(unittest.TestCase):  
      
    # unittest框架的一个约定,任何以 test_ 开头的方法都会被识别为一个测试方法 
    # 断言(Assertion)是一种调试手段,用于在代码中设置检查点
    # 确保程序在某一特定点满足某些预期条件。
    # 如果条件不满足,程序会抛出一个AssertionError异常 
    def test_add_positive_numbers(self):  
        result = add_numbers(2, 3)  
        self.assertEqual(result, 5)  
      
    # self是一个对当前实例(即对象)的引用。
    # 当你定义一个类的方法时,第一个参数总是self,它代表类的实例对象本身。
    # 通过这个self参数,你可以访问该实例的属性或其他方法 
    def test_add_negative_numbers(self):  
        result = add_numbers(-2, -3)  
        self.assertEqual(result, -5)  
  
# 检查当前模块是否作为主程序运行(而不是被导入为模块)
# 如果是,它会调用 unittest.main() 来运行所有的测试用例  
if __name__ == '__main__':  
    unittest.main()

终端完整的输出:
在这里插入图片描述

三、疑问与解答

3.1、Python中的断言是什么意思,在Java中有没有类似的概念

在Python中,断言(Assertion)是一种调试手段,用于在代码中设置检查点,确保程序在某一特定点满足某些预期条件。如果条件不满足,程序会抛出一个AssertionError异常。断言通常用于在开发和测试阶段捕获程序中的错误,但在生产环境中,由于性能考虑,断言可能会被禁用。
在Java中,虽然没有Python中那样的assert关键字,但是Java也提供了断言机制。Java的断言是通过assert关键字实现的,但默认情况下,断言是禁用的。要启用断言,需要在启动JVM时使用-ea或–enableassertions选项。

3.2、Python与Java的import区别与共性

1.共性:

  1. 引入模块/类/函数:都用于引入其他模块或包中的类、函数或变量,以便在当前文件中使用。
  2. 避免命名冲突:当多个模块或包中包含相同名称的类、函数或变量时,通过重命名可以避免命名冲突。

2.区别:

  1. 语法差异

    • Python直接使用import module_name来导入整个模块,或使用from module_name import function_name来导入特定函数。
    • Java通常需要指定完整的包路径,如import package_name.ClassName;
  2. 静态与动态导入

    • Java的导入是静态的,即必须在源代码中明确指定要导入的类或接口。这有助于在编译时检查类型正确性。
    • Python的导入可以是动态的,可以在运行时根据条件或需求导入模块。这提供了更大的灵活性,但也可能增加代码的复杂性。
  3. 包和模块组织

    • Java中的包(package)和Python中的模块(module)在组织和结构上有所不同。Java的包结构通常与文件系统的目录结构相对应,而Python的模块可以放在任何位置,并通过模块搜索路径来找到。
  4. 通配符导入

    • Python支持通配符导入,如from module_name import *,这会将模块中的所有公共对象导入到当前命名空间中。然而,这种导入方式通常被认为是不良实践,因为它可能导致命名冲突和代码可读性下降。
    • Java不支持通配符导入,每个类或接口都需要单独导入。
  5. 访问级别

    • 在Java中,访问级别(如public、private、protected等)对导入有影响。只有public类和接口才能被其他包中的类访问和导入。
    • 在Python中,没有类似的访问级别控制导入。但模块内部的属性和方法可以通过下划线前缀(如_private_method)来约定为“私有”的,尽管这只是一个约定,并不强制执行。
  6. 编译与解释

    • Java是一种编译型语言,import语句在编译时解析,确保所有依赖项都已正确导入。
    • Python是一种解释型语言,import语句在运行时解析。这意味着Python可以在运行时动态地加载和执行模块。

3.3、Python与C中的def差别

  1. 语法

    • 在Python中,定义函数使用def关键字,其一般格式如下:def 函数名(参数列表): 函数体。Python中的函数定义相对简洁明了,没有C语言中的函数声明和严格的顺序限制。
    • C语言定义函数需要声明,一般格式如下:类型 函数名(参数列表) { 函数体; }。C语言中的函数需要在调用之前被实现或者在程序开头事先声明,否则会出现编译错误。
  2. 函数参数的处理方式

    • Python中的函数参数可以更加灵活。Python支持默认参数,即给参数设置默认值,这样在调用函数时可以不传入该参数的值。此外,Python还提供了可变参数和关键字参数,这大大增强了函数的功能性和灵活性。
    • C语言中的函数参数则相对固定,每个参数都需要在函数定义时明确指定,且没有默认参数的概念。在调用函数时,必须按照定义的顺序和类型传递参数。
  3. 函数的使用灵活性

    • Python中的函数还支持嵌套定义,即在一个函数的函数体中可以定义另一个函数。嵌套的函数可以访问外部函数的变量,但外部函数不能访问内部函数的变量。此外,Python还有高阶函数的概念,即函数名也可当作函数参数,这种写法可以大大减少代码长度。
    • 在C语言中,函数的定义和使用则相对固定,没有嵌套定义和高阶函数的概念。

3.4、Python和Java的class区别

  1. Python的class
    Python是一种面向对象的编程语言,因此它支持class的概念。Python的class允许你定义属性和方法,通过封装、继承和多态等特性实现代码的重用和组织。
    Python的class还有类特性property,用于对实例方法的属性进行特殊控制。
    Python的class还支持动态类型,变量的类型在赋值时确定,不需要在定义变量时声明类型。
  2. Java的class
    Java是一种纯面向对象的编程语言,因此class是其核心概念之一。Java的class定义了对象的属性和方法,是实现面向对象编程的基础。
    Java的class有严格的访问修饰符,可以控制属性和方法的可见性。
    Java是静态类型语言,变量在定义时必须声明类型,且在运行时不能修改。

3.5、Python、C和Java在if的区别

  1. Python的if语句
    Python的if语句用于条件判断,其语法相对简洁,不需要在语句末尾添加分号。
    Python使用缩进来划分语句块,而不是使用大括号。
  2. C的if语句
    C语言的if语句也用于条件判断,但其语法与Python不同。C语言的if语句末尾需要添加分号,且使用大括号来划分语句块。
  3. Java的if语句
    Java的if语句同样用于条件判断,其语法与C语言类似。Java的if语句末尾也需要添加分号,同样使用大括号来划分语句块。

四、代码解释与修改测试

4.1、if name == ‘main

if __name__ == '__main__':  
    unittest.main()

能看出来这是一个if的判断语句,问题在_name_是什么?
_name_ 是一个内置变量,它表示当前模块的名字。当一个Python文件(模块)被直接运行时,_name_ 的值会被设置为 __main__。如果这个文件被导入为一个模块,_name_ 的值则会被设置为该模块的名字(即不带 .py 后缀的文件名)。
所以该语句的作用是:做出判断,如果当前文件是作为主程序运行,则执行下面的代码块。如果文件被导入为模块,则不执行。

4.2、测试断言

修改负数相加的方法,将-5改为5

	def test_add_negative_numbers(self):  
        result = add_numbers(-2, -3)  
        self.assertEqual(result, 5)  

终端输出:
在这里插入图片描述
输出很详细,那么如果由程序来捕获异常并处理,可以继续做如下修改:

	def test_add_negative_numbers(self):  
        result = add_numbers(-2, -3)  
        try:  
            # 尝试执行断言  
            self.assertEqual(result, 5)  
            # 如果断言成功,打印正确信息  
            print("断言正确: The sum of -2 and -3 is correctly -5.")  
        except AssertionError as e:  
            # 如果断言失败,捕获异常并打印错误信息  
            print("断言失败:", str(e))   

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值