《Python编程:从入门到实践》学习记录(9-11)基础语法部分

简介: 《Python编程:从入门到实践》学习记录(9-11)基础语法部分

# 第九章 类



作为一个程序员,我根本不知道什么是


  • 在python中定义一个类 class Class_Name():
  • 初始化方法(构造方法): def __init__(self)
  • 实例化对象 obj=Class_Name(param)
  • 类中的函数的self代表当前对象,且必须在函数参数的第一个

class SingleDog:
    """
    单身狗
    """
    def __init__(self, name, age):
        """
        初始化方法,当实例化对象时会自动调用
        :param name:
        :param age:
        """
        self.name = name
        self.age = age
        print("在创建对象的时候会调用这个初始化方法哟~")
    def sit(self):
        """
        坐下
        :return:
        """
        print(self.name.title() + " is now sitting.")
    def roll_over(self):
        """
        命令打滚
        :return:
        """
        print(self.name.title() + " rolled over!")
# 实例化对象
single_dog = SingleDog("大东", 66)
# 调用方法
single_dog.sit()
single_dog.roll_over()
# 访问属性
print(single_dog.name)
  • output

在创建对象的时候会调用这个初始化方法哟~
大东 is now sitting.
大东 rolled over!
大东

# 继承


子类可以继承父类,子类将获得父类的所有属性和方法。


  • 语法 class Child_Class(Father_Class):
  • 当无指定的父类需要继承时,可省略括号: class Child_Class:
  • 在创建子类对象之前,python首先需要创建父类对象并给父类对象的属性赋值,所以子类的初始化方法def __init(self)__:需要调用父类的__init__(self):方法,先初始化父类。
  • 子类与父类在同一个文件

class Mobile:
    """
    手机父类
    """
    def __init__(self, company_name, mobile_name):
        self.company_name = company_name
        self.mobile_name = mobile_name
    def print_mobile_basic_info(self):
        """
        打印手机的基本信息
        :return:
        """
        print("这是" + self.company_name + "生产的手机,型号为" + self.mobile_name)
class Iphone(Mobile):
    """
    iphone派生自mobile
    """
    def __init__(self, company_name, mobile_name, produce_year):
        """
        子类构造方法
        """
        self.produce_year = produce_year
        super().__init__(company_name, mobile_name)
    def print_mobile_basic_info(self):
        """
        重写父类的方法
        :return:
        """
        print("这是" + self.company_name + "在" + str(self.produce_year) + "年生产的手机,型号为" + self.mobile_name)
company_name = "Apple"
mobile_name = "Iphone11ProMax"
produce_year = 2019
iphone11_pro_max = Iphone(company_name, mobile_name, produce_year)
iphone11_pro_max.print_mobile_basic_info()
print(iphone11_pro_max.company_name)
  • 子类与父类在不同的文件
  • 在一个类中导入另外一个类

from classz.mobile import Mobile
class Iphone(Mobile):
    def __init__(self, company_name, mobile_name, produce_year):
        self.produce_year = produce_year
        super().__init__(company_name, mobile_name)
iphone = Iphone(1, 1, 1)
  • 类的命名规范:与Java一致,首字母大写的驼峰命名法。
  • 实例的命名规范:小写+下划线


# 第十章 文件和异常



# 读取文件


  • open(file_path) 打开一个文件
  • with:确保文件一定能关闭,且在合适的时机关闭。
  • 也可以手动调用close()关闭文件,但是如果程序出bug了,导致close()未执行,那么文件将不会被关闭,可能会导致数据受损。如果过早的关闭文件,可能导致需要使用的时候文件已经被关闭了。所以使用with,交给python来做,是一个好的选择。
  • read()读取文件的全部内容
  • demo
  • 要读取的文本nums.txt

3.1234567890
 9876543210
 1234509876
  • 读取程序

with open("nums.txt") as nums_file:
    line = nums_file.read()
    print(line)
  • result:


image.png

逐行打印

image.png


为什么每次打印中间都空了一行:因为文件的每行末尾都有一个换行符,可使用rstrip()消除

image.png

python默认将所有读取到的内容都作为字符串。

readlines(): 返回一个列表

image.png

# 写入文件


  • 在open文件时,告诉python我们需要向打开的文件中写入内容,with open('file_path',model)
  • model的可选值可参见方法的文档


image.png

  • python只能将字符串写入文件,所以在写入之前需要str(content)


# 异常


  • 如果未正确处理异常,程序将停止,并显示一个traceback,包含异常的报告。


image.png


  • 处理异常try-except-else代码块
  • 语法:

try:
    业务代码...
except 发生指定的错误:
    发生错误时的处理程序
except 发生指定的错误:
    发生错误时的处理程序
else:
    未发生异常时将会执行的代码块



image.png


  • 让python什么也不做: pass


# JSON


  • 将python对象转为json对象存储到文件中: json.dump(data_obj, json_file_path)
  • 从文件中读取json字符串转换为python对象: json.load(json_file_path)

import json
def json2file(file_path):
    """
    对象转为json存入文件
    :param file_path:
    :return:
    """
    # 以写入模式打开文件
    with open(file_path, 'w') as json_file:
        # 创建列表
        num_list = list(range(1, 11))
        # 将列表数据写入json
        json.dump(num_list, json_file)
def file2json(file_path):
    """
    文件内容转为json
    :param file_path:
    :return:
    """
    # 打开文件
    with open(file_path) as json_file:
        # 加载文件中的json数据
        json_result = json.load(json_file)
    print(json_result)
file_path = "json.json"
json2file(file_path)
file2json(file_path)


# 第十一章 测试



  • 步骤
  1. 创建测试文件: test_xx.py
  2. 导入单元测试模块: import unittest
  3. 导入需要进行测试的方法: from module_name import function_name
  4. 创建测试类并且继承unittest.TestCase: class XxTestCase(unittest.TestCase):
  5. 根据需要测试的方法创建测试方法,命名必须以tese开头 def test_xx(self):
  6. 在测试测试方法中调用想要进行测试的方法
  7. 判断方法的结果是否符合预期self.assert_xxx
  8. unittest.main()
  • 这一行的作用是让python运行这个测试。如果没有这一行,在运行python xx.py的时候并不会进行测试。
  1. 运行,命令行python test_xx.py
  • pycharm中直接运行似乎不会按照预期进行测试
  • eg:

def get_formatted_name(first_name: str, last_name: str):
    """
    返回格式化之后的名字
    :param first_name:
    :param last_name:
    :return:
    """
    full_name = first_name.strip() + " " + last_name.strip()
    return full_name.title()
  • 测试用例:

# 导入测试工具模块
import unittest
# 导入要测试的方法
from test_demo import get_formatted_name
# 创建测试类,测试类必须继承`unittest.TestCase`
class NamesTestCase(unittest.TestCase):
    # 创建测试方法,测试方法必须以`test`打头
    def test_first_last_name(self):
        # 调用测试方法
        formatted_full_name = get_formatted_name("li", "dakang")
        # 断言结果是否符合 预期
        self.assertEqual(formatted_full_name, "Li Dakang")
# 让python运行这个测试。如果没有这一行,在运行`python xx.py`的时候并不会进行测试
unittest.main()


  • 运行
  • 测试通过


image.png

测试不通过


image.png

  • 钩子方法
  • 例如: setUp(): 在每个测试方法执行之前执行

# 导入测试工具模块
import unittest
# 导入要测试的方法
from test_demo import get_formatted_name
# 创建测试类,测试类必须继承`unittest.TestCase`
class NamesTestCase(unittest.TestCase):
    def setUp(self) -> None:
        self.bool_value = True
        print("=====在每个测试方法执行之前都会执行=====")
    # 创建测试方法,测试方法必须以`test`打头
    def test_first_last_name(self):
        print("单元测试test_first_last_name开始执行")
        # 调用测试方法
        formatted_full_name = get_formatted_name("li", "dakang")
        # 断言结果是否符合 预期
        self.assertEqual(formatted_full_name, "Li DaKang")
    def test_function(self):
        print("单元测试test_function开始执行")
        self.assertTrue(self.bool_value)
# 让python运行这个测试。如果没有这一行,在运行`python xx.py`的时候并不会进行测试
unittest.main()


image.png

相关文章
|
1天前
|
开发者 Python
Python入门:8.Python中的函数
### 引言 在编写程序时,函数是一种强大的工具。它们可以将代码逻辑模块化,减少重复代码的编写,并提高程序的可读性和可维护性。无论是初学者还是资深开发者,深入理解函数的使用和设计都是编写高质量代码的基础。本文将从基础概念开始,逐步讲解 Python 中的函数及其高级特性。
Python入门:8.Python中的函数
|
1天前
|
存储 索引 Python
Python入门:6.深入解析Python中的序列
在 Python 中,**序列**是一种有序的数据结构,广泛应用于数据存储、操作和处理。序列的一个显著特点是支持通过**索引**访问数据。常见的序列类型包括字符串(`str`)、列表(`list`)和元组(`tuple`)。这些序列各有特点,既可以存储简单的字符,也可以存储复杂的对象。 为了帮助初学者掌握 Python 中的序列操作,本文将围绕**字符串**、**列表**和**元组**这三种序列类型,详细介绍其定义、常用方法和具体示例。
Python入门:6.深入解析Python中的序列
|
1天前
|
程序员 UED Python
Python入门:3.Python的输入和输出格式化
在 Python 编程中,输入与输出是程序与用户交互的核心部分。而输出格式化更是对程序表达能力的极大增强,可以让结果以清晰、美观且易读的方式呈现给用户。本文将深入探讨 Python 的输入与输出操作,特别是如何使用格式化方法来提升代码质量和可读性。
Python入门:3.Python的输入和输出格式化
|
1天前
|
机器学习/深度学习 人工智能 算法框架/工具
Python入门:1.Python介绍
Python是一种功能强大、易于学习和运行的解释型高级语言。由**Guido van Rossum**于1991年创建,Python以其简洁、易读和十分工程化的设计而带来了庞大的用户群体和丰富的应用场景。这个语言在全球范围内都被认为是**创新和效率的重要工具**。
Python入门:1.Python介绍
|
1天前
|
缓存 算法 数据处理
Python入门:9.递归函数和高阶函数
在 Python 编程中,函数是核心组成部分之一。递归函数和高阶函数是 Python 中两个非常重要的特性。递归函数帮助我们以更直观的方式处理重复性问题,而高阶函数通过函数作为参数或返回值,为代码增添了极大的灵活性和优雅性。无论是实现复杂的算法还是处理数据流,这些工具都在开发者的工具箱中扮演着重要角色。本文将从概念入手,逐步带你掌握递归函数、匿名函数(lambda)以及高阶函数的核心要领和应用技巧。
Python入门:9.递归函数和高阶函数
|
1天前
|
存储 SQL 索引
Python入门:7.Pythond的内置容器
Python 提供了强大的内置容器(container)类型,用于存储和操作数据。容器是 Python 数据结构的核心部分,理解它们对于写出高效、可读的代码至关重要。在这篇博客中,我们将详细介绍 Python 的五种主要内置容器:字符串(str)、列表(list)、元组(tuple)、字典(dict)和集合(set)。
Python入门:7.Pythond的内置容器
|
1天前
|
存储 Linux iOS开发
Python入门:2.注释与变量的全面解析
在学习Python编程的过程中,注释和变量是必须掌握的两个基础概念。注释帮助我们理解代码的意图,而变量则是用于存储和操作数据的核心工具。熟练掌握这两者,不仅能提高代码的可读性和维护性,还能为后续学习复杂编程概念打下坚实的基础。
Python入门:2.注释与变量的全面解析
|
23天前
|
存储 缓存 Java
Python高性能编程:五种核心优化技术的原理与Python代码
Python在高性能应用场景中常因执行速度不及C、C++等编译型语言而受质疑,但通过合理利用标准库的优化特性,如`__slots__`机制、列表推导式、`@lru_cache`装饰器和生成器等,可以显著提升代码效率。本文详细介绍了这些实用的性能优化技术,帮助开发者在不牺牲代码质量的前提下提高程序性能。实验数据表明,这些优化方法能在内存使用和计算效率方面带来显著改进,适用于大规模数据处理、递归计算等场景。
58 5
Python高性能编程:五种核心优化技术的原理与Python代码
|
1天前
|
Python
python pandas学习(一)
该代码段展示了四个主要操作:1) 删除指定列名,如商品id;2) 使用正则表达式模糊匹配并删除列,例如匹配订单商品名称1的列;3) 将毫秒级时间戳转换为带有时区调整的日期时间格式,并增加8小时以适应本地时区;4) 将列表转换为DataFrame后保存为Excel文件,文件路径和名称根据变量拼接而成。
12 3
|
1天前
|
知识图谱 Python
Python入门:4.Python中的运算符
Python是一间强大而且便捷的编程语言,支持多种类型的运算符。在Python中,运算符被分为算术运算符、赋值运算符、复合赋值运算符、比较运算符和逻辑运算符等。本文将从基础到进阶进行分析,并通过一个综合案例展示其实际应用。

热门文章

最新文章

推荐镜像

更多