人生苦短,我也要用Python
写在前面
已经学过C语言的我,还是非常坚定的想要入Python的坑。
简单说说C语言和Python的区别吧~
动态类型:Python是妥妥的动态类型语言,这意味着在编程时无需声明变量的数据类型。
相比之下,C语言是一种静态类型的语言,需要在编程时显式地声明变量的数据类型。
简洁的语法:Python的语法非常简洁,代码量相比于C语言要少得多。例如,Python中的代码块使用缩进来表示,而C语言中使用花括号。这使得Python代码更易读、易写、易维护。
自动内存管理:Python有一个垃圾回收机制,可以自动管理内存。
程序员不需要手动分配和释放内存,减少了程序出现内存泄漏和野指针等问题的可能性。支持多种编程范式:Python支持面向对象编程、函数式编程和命令式编程等多种编程范式。相比之下,C语言主要是一种命令式编程语言,虽然也可以实现面向对象编程和函数式编程,但是相对麻烦。
Python拥有丰富的标准库,其中包含了大量的模块和函数,可以帮助程序员更快地编写Python程序。
相比之下,C语言的标准库相对较小,需要依赖于第三方库来实现更多的功能。
好了,好处说完了,Python也有一些缺点,例如运行速度相对较慢,对于某些需要高性能的场景可能不太适合。
Python语法笔记
Python的动态特性
当谈到Python的动态特性时,我们通常指的是Python语言在运行时动态执行代码的能力,这种能力称为动态语言特性。Python作为一种动态语言,具有许多特性,例如:
动态类型
Python是一种动态类型语言,即在声明变量时无需指定其类型。变量的类型是在运行时动态推断的。例如,以下代码在Python中是合法的:
1 |
|
这种特性使得Python更加灵活和易于使用,但也增加了类型相关的错误和性能开销。
动态绑定
Python允许在运行时动态绑定属性和方法。例如,以下代码创建一个新的类,并在运行时向该类添加新的属性和方法:
1 |
|
在此示例中,我们创建了一个名为MyClass的类,并将其实例化为obj对象。我们在运行时向该对象动态添加了一个名为name的属性和一个名为say_hello的方法。最后,我们调用了对象的say_hello方法,并打印了一条问候语。
动态导入
Python允许在运行时动态导入模块。例如,以下代码动态导入了Python的内置模块math,并使用其sin函数计算正弦值:
1 |
|
在此示例中,我们使用Python的importlib模块动态导入了Python的内置模块math,并使用其sin函数计算正弦值。这种动态导入特性使得Python更加灵活和可扩展。
条件控制与循环
条件控制
最常用的条件控制语句是if语句。if语句用于根据某个条件来执行不同的代码块。例如:
1 |
|
循环
Python中的循环有两种类型:for循环和while循环。for循环用于迭代遍历序列(如列表、元组、字符串)中的每个元素,而while循环则用于在满足条件的情况下重复执行代码块。
以下是一个使用for循环打印列表中所有元素的示例:
1 |
|
在此示例中,我们使用for循环遍历了一个名为fruits的列表,并打印了其中的每个元素。
以下是一个使用while循环计算数字的示例:
1 |
|
使用while循环计算了从1到10的整数之和,并输出了结果。
子程序设计
函数
在Python中,我们使用def关键字来定义一个函数,函数的主体被缩进,并在函数名后面跟着一对括号和一个冒号。以下是一个使用函数打印乘法表的示例:
1 |
|
我们定义了一个名为multiplication_table的函数,该函数接受一个整数n作为参数,并打印1到n的乘法表。
递归
递归是一种常用于解决分治问题的算法,它将问题分解为较小的子问题,并使用相同的算法递归地解决它们,直到子问题变得足够简单,可以直接求解。
以下是一个使用递归计算阶乘的示例:
1 |
|
我们定义了一个名为factorial的递归函数,该函数接受一个正整数n作为参数,并使用递归的方式计算n的阶乘
面向对象编程
Python是一种面向对象的编程语言,支持封装、继承和多态等面向对象的概念。以下是一个简单的Python面向对象编程的栗子:
1 |
|
在此示例中,我们定义了一个名为Animal的基类(也称为父类或超类),以及两个名为Dog和Cat的子类(也称为派生类或子类)。每个类都具有自己的属性和方法,可以在实例化对象时进行初始化和访问。
我们使用super()函数调用父类的构造函数,使用子类的构造函数来初始化子类的属性。在这个例子中,Dog类具有属性breed,而Cat类具有属性color。两个子类都实现了一个名为speak()的方法,该方法返回相应的动物声音。
在主程序中,我们实例化了一个Dog对象和一个Cat对象,并使用它们的属性和方法来打印它们的信息。
面向对象编程特点
- 可以更好地组织和管理代码
- 程序更加灵活和易于扩展
异常处理
在Python中,异常处理是一种非常重要的技术,可以帮助我们在程序出现错误时优雅地处理它们,而不会使程序崩溃或停止运行。以下是一个简单的Python异常处理的示例:
1 |
|
在此示例中,我们使用try…except语句来捕获程序可能出现的异常。首先,我们尝试将用户输入的字符串转换为整数,并计算两个整数的商。如果程序出现异常,则程序将跳转到相应的except块,并输出错误信息。如果没有出现异常,则程序将继续执行,并输出结果。无论程序是否出现异常,finally块中的代码都将始终执行。
在本示例中,我们定义了三个except块来处理可能出现的异常:ValueError(输入不是整数)、ZeroDivisionError(除数为0)和通用异常(其他类型的异常)。通过使用不同的except块,我们可以根据具体情况选择不同的处理方式。
Python异常处理是一种非常强大和灵活的技术,可以帮助我们更好地处理程序中的错误,避免程序崩溃或停止运行,并提高程序的可靠性和稳定性。
赋值、浅拷贝与深拷贝
1 |
|
用简单赋值将列表a赋值给变量b,然后修改变量b的第一个元素。由于变量b只是变量a的引用,因此变量a和b都将被修改。这种方式被称为浅复制,因为新变量只是原始变量的一个浅层副本。
1 |
|
使用copy()函数进行浅拷贝,将列表c复制到变量d中。然后,我们修改变量d中的嵌套列表的第一个元素。由于d是c的浅层副本,所以嵌套列表也被修改了。这种方式也被称为浅拷贝,因为它只复制了原始变量的顶层元素,而不是嵌套元素。
1 |
|
使用deepcopy()函数进行深拷贝,将列表e复制到变量f中。然后,我们修改变量f中的嵌套列表的第一个元素。由于f是e的深层副本,所以嵌套列表不会被修改。这种方式被称为深拷贝,因为它复制了整个对象及其嵌套元素。
常用容器
列表
列表是Python中最常用的数据结构之一,用于存储一组有序的元素。列表使用数组实现,底层数据结构为动态数组。动态数组是指在数组大小可变的情况下,动态地调整内部数组的大小。列表可以存储任何类型的数据,包括整数、浮点数、字符串和其他对象。
举例:使用列表来存储一组数字,并对它们进行排序。
1 |
|
集合
集合是Python中的另一种常用数据结构,用于存储一组无序的元素。集合使用哈希表实现,底层数据结构为哈希表。哈希表是一种使用哈希函数将键映射到存储位置的数据结构。集合中的元素必须是可哈希的,包括数字、字符串和元组等不可变类型。
举例来说,我们可以使用集合来去重一组数字:
1 |
|
字典
字典是Python中的另一种重要数据结构,用于存储一组键值对。字典使用哈希表实现,底层数据结构为哈希表。字典中的键必须是可哈希的,包括数字、字符串和元组等不可变类型。值可以是任何类型的数据,包括数字、字符串、列表、集合和其他对象。
举例来说,我们可以使用字典来存储一组单词及其对应的解释:
1 |
|
Python:AI时代的胶水语言
为何称为胶水语言?
- Python可以方便地将不同的编程语言、框架和库进行结合,从而实现更加复杂的应用程序。
- Python拥有大量的第三方库和工具,这些库和工具可以轻松地集成到Python程序中,并与其他编程语言和系统进行交互。
Python与数据科学的关系:
- Python是一种功能强大的通用编程语言,具有易于学习、易于阅读和易于编写的特点。
- Python拥有大量的数据科学库和工具,包括NumPy、Pandas、Matplotlib、Scikit-learn和TensorFlow等,这些库可以用于数据分析、机器学习、深度学习和人工智能等领域。
Python语言的简洁性、易读性、扩展性和丰富的库资源,使其成为数据科学的流行语言之一。Python能够轻松地读取、处理和可视化数据,使得它成为数据科学家、研究人员和工程师的首选语言。同时,Python社区也非常活跃,拥有庞大的开发者和用户社群,为数据科学的应用和创新提供了强大的支持。