Python 基础学习

2023.08.14

起因

由于十分不喜欢 Python 的代码风格,所以自从本科的 Python 选修课结束之后,就再也没有碰过 Python 了,现在对它的一些知识也可以说是忘得差不多了。但由于后续学习需要用到 Pyhton,所以这才需要捡起关于 Python 的知识点

环境安装

考虑到以后扩展和管理的方便,就没有单独安装 Python,而是选择安装 Anaconda,而 Anaconda 的安装也十分的方便,选择好位置,直接下一步就行。但其中注意的是,Anaconda 并不默认添加到 Path,也就是系统的环境变量中,需要在安装过程中勾选 ”添加到 Path“ 中,如果没有勾选,解决办法有两个:一是重新安装;二是手动添加系统环境变量。

手动添加环境变量,需要添加以下四个新的条目(... 是 anaconda3 安装位置)

txt
...\anaconda3
...\anaconda3\Scripts
...\anaconda3\Library\bin
...\anaconda3\Library\mingw-w64\bin

数据类型

一般类型

字符串

Python 中的字符串是用双引号 " 或者单引号 ' 包括起来的字符,可以混用,但是得注意范围,

python
message = "I'll get your trail." # 这是正确的
message = "He say:"Hello"" # 错误
字符串的方法
  • 去除空格(这里的空格包含了空白字符、制表符、换行符)
    • lstrip() 去除首部空格
    • rstrip() 去除尾部空格
    • strip() 去除首位空格
  • 设置格式
    • title() 标题格式
    • lower() 全小写
    • upper() 全大写
    • center() 指定长度,将字符串放中间
    • ljust() 指定长度,将字符串放左边
    • rjust() 指定长度,将字符串放右边
    • zfill() 指定长度,在字符串前面填充 0(处理数字)

数字

数字分为整数和浮点数,只要带小数点的就是浮点数,数字类型可以进行加减乘除运算,如果想要类似用 + 拼接字符串就需要用到 str()将数字类型转换为字符串类型。

布尔值

只有两个值 : TrueFalse ,可以使用 bool() 方法将其他类型变量转换为布尔值

派生类型

列表

[] 来创建一个列表,列表中可以是不同类型的变量。

python
foo = [ 1, 'a', 1.2]
# 添加
foo.append('b')
foo.insert(0,'a')
# 删除
del foo[0] # 不会返回删除的值
foo.pop() # 会返回删除的值
foo.remove() # 不会返回删除的值
# 修改
foo[0] = 100
# 查看
print(foo[1])

如果想要遍历列表:

python
for fo in foo:
    ptrint(fo)

如果想要删除列表中的指定变量:

python
while "a" in foo:
    foo.remove("a")

元组

() 表示一个元组,元组内的变量在元组声明之后,元组内的变量便无法改变,但是你可以直接改这个元组。

字典

{} 表示一个字典,也可以通过 dict() 方法来创建一个空字典,字典是以键值对方式来存储的,类似于其他语言的图(Map)。

python
a_map = {
    "key1": "value1",
    "key2": "value2",
}
# 添加
a_map['key3'] = "value3"
# 删除
del a_map['key1']
# 修改
a_map['key2'] = "value4"
# 访问
print(a_map['key3'])

字典遍历:

python
# 遍历所有的键
for key in a_map.keys():
    print(key)
# 遍历所有值
for value in a_map.values():
    print(values)
# 遍历所有键值对
for key, value in a_map.items():
    print(key + value)

流程控制

用户输入

input() 接收用户在终端中输入的信息,不管输入的是字符串或是数字 Python 都会视为是字符串。如果需要提示用户输入信息的类型那么在 input() 中输入提示信息即可。

条件语句

Python 中的条件语句就只有 if elseif elif else 。对于输入的条件,可以是布尔值,也可以是逻辑表达式,但是逻辑表达式在某种程度上,逻辑表达式也算是布尔值。

python
num = 10
if num < 0:
    print("负数")
elif num = 0:
    print("零")
else:
    print("正数")

循环语句

Python 中的循环就只有 whilefor in

指定次数循环:

python
count = 0
while count < 5:
    print(count)
    count += 1
for i in range(1, 5):
    print(i)

循环控制:

在循环中通过 break continue return 关键词就可以对正在进行的循环进行控制;continue 关键词表示跳出这次循环,直接进行下次循环;breakreturn 则是直接退出循环,不同的是,return 会直接返回数据。

函数

Python 通过 def 关键字声明函数:

python
def function_name(var_name, default_var='default', *vars):
    return_value = var_name + default_var
    for var in vars:
        return_value += var
    return return_value

其中 var_namedefault_var 是形式参数,'default' 是为 default_var 赋予的默认实参。*vars 前的 * 表示这是任意数量的参数。如果形参前面是 ** 则表示这是任意数量的关键字实参,类似于向函数传递一个字典变量。

Python 通过 class 关键词来声明类

python
class MyClass:
    def __init__(self, name):
        self.name = name
  
    def say_hello(self):
        print("Hello " + self.name)

Python 中没有访问控制机制,也就是说实例化的类中,所有的变量都是可以由外部进行访问的,但是如同常量一样,对于私有成员,Python 中也有约定俗成的语法,就是在变量前加上下划线,如:self._private。这种属性不推荐在实例外部操作,而是调用实例的内部方法来操作这个属性。

继承

对于类的继承,就非常简单:

python
class ChildClass(MyClass):
    def __init__(self, name, age):
        self.super(self, name)
        self.age = age
    # 重写父类方法
    def say_hello(self):
        print(self.age, "Hello " + self.name)

测试

Python 中测试的话都需要用到 unittest 这个模块,下面我们定义一个方法:

python
def func_1(name){
    return str(name).title()
}

如果我们想要测试这个方法,就需要自定义一个类来继承 unittest.TestCase 类:

python
class MyTest(unittest.TestCase):
    def test_func_1(self):
        self.assertEqual("J00ane", func_1("j00ane"))

运行测试:

python
if __name__ == "__main__":
    unitest.main()

如果我们想要对一个类的所有成员方法进行单独的测试,那么每个测试都可能需要新建一个实例,这样做起来很麻烦,所以我们需要用到 SetUp 方法

首先,新建一个类:

python
class MyClass:
    def __init__(self, name, age):
        self.name = name
        self.age = age
    def show_name(self):
        return self.name.title()
    def show_age(self):
        return str(self.age)

在我们的测试类中,可以这样写:

python
class MyClassTest(unittest.TestCase):
    def SetUp(self):
        self.my_class = MyClass("j00ane", 10)
        self.right_name = "J00ane"
        self.right_age = "10"
    def test_show_name(self):
        self.assertEqual(self.right_name, self.my_class.show_name())
    def test_show_age(self):
        self.assertEqual(self.right_age, self.my_class.show_age())

运行测试,可以看到所有测试都能通过。

除了 assertEqual 断言,还有 assertNotEuqal;判断布尔值:assertTrue assertFalse;判断列表: assertIn(item, list) assertNotIn(item, list)

异常处理

异常处理非常像分支语句,也就是 if else。它的 语法是这样的:

python
try:
    # 语句
except XXXError:
    # XXXError 的处理语句
except XXError:
    # XXError 的处理语句
else:
    # 无错误的处理语句

Python 中要求你写的错误类型非常精确,如果不知道错误类型的话,可以先运行一遍错误的,看看编译器的报错类型,复制过去就行了。

本文最后更新于 2023 年 8 月 31 日