一、面向过程程序设计
在Python中,面向过程编程就是把程序看作一系列的函数或过程,每个函数或过程都有特定的任务,函数可以被其他函数调用,也可以调用其他函数。这种编程方式非常直观和易于理解,特别适合于解决一些简单的问题。
例子:定义一个名为greet的函数,它接受一个参数name
,并打印出问候语。然后调用这个函数,传入一个字符串"Alice"作为参数。
def greet(name):
print("Hello, " + name + "!")
greet("Alice")
>>>Hello, Alice!
然而,面向过程编程也有一些局限性。例如,它很难处理复杂的数据结构和大型的项目。在这种情况下,面向对象编程就更加适合。在Python中,面向对象编程是通过定义类和对象来实现的。
二、面向对象程序设计
面向对象程序设计(Object-Oriented Programming, OOP)是另外一种程序设计模型,OOP的一条基本原则是计算机程序由单个能够起到子程序作用的单元或对象组合而成。其中核心概念是类和对象。具有重用性、灵活性和扩展性特点。下面是一些关于Python面向对象编程的基本概念:
-
类(Class):类是创建对象的模板,定义了对象的属性和方法。例如,我们可以定义一个“汽车”类,包含属性如颜色、型号、制造商,以及方法如启动、加速、减速等。
class Car: def __init__(self, color, model, manufacturer): self.color = color self.model = model self.manufacturer = manufacturer def start(self): print("The car is starting!") def accelerate(self): print("The car is accelerating!") def decelerate(self): print("The car is decelerating!")
-
对象(Object):对象是类的实例。我们可以创建一个“汽车”类的实例,然后使用这个实例进行操作。
my_car = Car('blue', 'byd', 'build your dreams')
-
方法(Method):方法是类中的函数。它们在类中定义,并可以在类的实例上调用。
-
继承(Inheritance):继承是面向对象编程中的一个重要概念,它允许我们创建一个新的类,继承现有类的属性和方法。
-
封装(Encapsulation):封装指的是隐藏对象的内部状态和实现细节,只暴露必要的接口。在Python中,可以通过将类的属性设置为私有的(即名称以双下划线开头)来实现封装。
-
多态性(Polymorphism):多态性是指子类可以重写父类的方法,使得父类方法的行为可以根据子类的需要进行修改。这是面向对象编程中一个非常重要的概念。
-
抽象(Abstraction):抽象是指只暴露对象的必要接口,隐藏其实现细节。这可以通过定义抽象基类和抽象方法来实现。在Python中,抽象基类可以通过
abc
模块定义,抽象方法通过@abstractmethod
装饰器定义。
函数:关键词def
# 定义函数:
def 函数名(参数列表):
函数体
return 参数返回值 # 可以没有return返回值
类:关键词class
另外,self作为类自己的一个索引,在定义类的时候,想要获取这个类的什么属性或功能,都可以通过self获取。
#定义类
class Classname:
def __init__(self, 参数值1, 参数值2): # __init__ 是构造函数:用于初始化对象
self.参数1 = 参数值1
self.参数2 = 参数值2
def 函数1:
...
def 函数2:
...
模块(Modules):具体指的是一个包含所有你定义的函数和变量的文件,其文件后缀名是.py。
举个例子:
# file.py文件
def create_filename():
return "new_file"
# me.py新建一个新的.py文件
import file as f1 # 导入file模块,并给file重命名为f1(注意:实际导入模块时,要注意模块路径的问题)
print("f1:",f1.create_filename())
#输出为:f1:new_file
三、学习随记
1.标识符和关键字
- Python 是一种区分大小写的语言;
- Python标识符是一个用来标识变量、函数、类、模块或其他对象的名称;
- 创建标识符的规则如下:
- 以字母或下划线开头,不能以数字开头;
- 后跟0个或多个字母、下划线和数字;
- 关键字不能作标识符。
- 除了 False None True 以大写字母开头外,其他关键字均为小写;
- global关键词:用于声明全局变量 ;
- assert:断言,若不满足条件,代码则会报错。举个例子:
assert 0<= a <1 # 用断言来确保 a 的取值在0~1之间,若不满足此条件,将会触发Assertion Error
2.numpy库的随机数生成器
improt numpy as np # 导入numpy包
np.random.seed(seed)
np.random.seed(seed)是numpy库中的一个函数,用于设置随机生成器的种子。种子值决定了随机数生成器的顺序。通过设置固定的种子,可以确保每次运行过程,产生相同的结果。
seed可以是任何整数值,若数值为None,那么numpy会将当前系统时间作为种子。
3.numpy库的切片功能
numpy库的切片功能可以用来提取特定的数据,用于处理多维数组,可以选择数组的子集,而不用编写复杂的索引计算。切片的语法基于冒号( : )操作符,他可以选择特定维度上的元素。
- 在numpy中,切片有以下形式:array[ start : end : step ]
(切片选择从start开始到end结束(不包括end),每次移动step个元素 - 举例:
import numpy as np
# 创建一个2x3的数组
a = np.array([[1, 2, 3], [4, 5, 6], [7, 8, 9]])
# 注意:行列式中序号是从0开始的
# 选择第一行(不包括end)
a[:1, :] = [10, 11, 12] # 此处为二维数组,逗号前的冒号表示行,切片操作无步长
print(a)
# 结果:[[10 11 12]
# [4 5 6 ]
# [7 8 9 ]]
# 选择从第二列开始的所有列(包括第二列)
a[:, 1:] = [[13, 14], [15, 16], [17, 18]] # 逗号前只有冒号表示选取所有行,逗号后面选取列
print(a)
# 结果:[[10 13 14]
# [ 4 15 16]
# [ 7 17 18]]
# 有二维数组X_train
X_train = X_train[ : , 0 : -1]
# 上行代码表示对X_train进行切片操作,删除最后一列
4.四种小数取整方式
import math
# 1.四舍五入:1.5678 → 1.57
round_value = round(1.5678, 2) # 2表示取整位数
# 2.向下取整: 1.5678 → 1
floored_value = math.floor(1.5678)
# 3.向上取整: 1.5678 → 2
ceiled_value = math.ceil(1.5678)
# 4.截断取整(直接转换数值类型为int型): 1.5678 → 1
truncated_value = int(1.5678)
5.pandas库series中的unique方法:唯一值
y_best = min(dataset_opt[y_col].unique())
# 这行代码的目的是找到二维数组dataset_opt中名为y_col的列中的最小值,并将其存储在变量y_best 中
# dataset_opt[y_col].unique()将返回列 y_col 中所有唯一值的数组
# min()是Python的内置函数,用于返回传入参数中的最小值,返回dataset_opt[y_col].unique()数组中的最小值
上述是最近学习Python过程中随记的笔记,其中多是有关机器学习和数据处理的,仅供参考!