人生苦短,我也要用Python

写在前面

已经学过C语言的我,还是非常坚定的想要入Python的坑。

简单说说C语言和Python的区别吧~

  1. 动态类型:Python是妥妥的动态类型语言,这意味着在编程时无需声明变量的数据类型。

    相比之下,C语言是一种静态类型的语言,需要在编程时显式地声明变量的数据类型。

  2. 简洁的语法:Python的语法非常简洁,代码量相比于C语言要少得多。例如,Python中的代码块使用缩进来表示,而C语言中使用花括号。这使得Python代码更易读、易写、易维护。

  3. 自动内存管理:Python有一个垃圾回收机制,可以自动管理内存。
    程序员不需要手动分配和释放内存,减少了程序出现内存泄漏和野指针等问题的可能性。

  4. 支持多种编程范式:Python支持面向对象编程、函数式编程和命令式编程等多种编程范式。相比之下,C语言主要是一种命令式编程语言,虽然也可以实现面向对象编程和函数式编程,但是相对麻烦。

  5. Python拥有丰富的标准库,其中包含了大量的模块和函数,可以帮助程序员更快地编写Python程序。
    相比之下,C语言的标准库相对较小,需要依赖于第三方库来实现更多的功能。

好了,好处说完了,Python也有一些缺点,例如运行速度相对较慢,对于某些需要高性能的场景可能不太适合。

Python语法笔记

Python的动态特性

当谈到Python的动态特性时,我们通常指的是Python语言在运行时动态执行代码的能力,这种能力称为动态语言特性。Python作为一种动态语言,具有许多特性,例如:

动态类型

Python是一种动态类型语言,即在声明变量时无需指定其类型。变量的类型是在运行时动态推断的。例如,以下代码在Python中是合法的:

1
2
a = 5
a = "Hello, World!"

这种特性使得Python更加灵活和易于使用,但也增加了类型相关的错误和性能开销。

动态绑定

Python允许在运行时动态绑定属性和方法。例如,以下代码创建一个新的类,并在运行时向该类添加新的属性和方法:

1
2
3
4
5
6
7
8
9
10
11
12
class MyClass:
pass

obj = MyClass()
obj.name = "Tom"

def say_hello(self):
print("Hello, " + self.name)

MyClass.say_hello = say_hello

obj.say_hello()

在此示例中,我们创建了一个名为MyClass的类,并将其实例化为obj对象。我们在运行时向该对象动态添加了一个名为name的属性和一个名为say_hello的方法。最后,我们调用了对象的say_hello方法,并打印了一条问候语。

动态导入

Python允许在运行时动态导入模块。例如,以下代码动态导入了Python的内置模块math,并使用其sin函数计算正弦值:

1
2
3
4
5
6
7
8
9
import importlib

module_name = "math"
module = importlib.import_module(module_name)

angle = 45
sin_value = module.sin(angle)

print("The sin value of", angle, "degrees is", sin_value)

在此示例中,我们使用Python的importlib模块动态导入了Python的内置模块math,并使用其sin函数计算正弦值。这种动态导入特性使得Python更加灵活和可扩展。

条件控制与循环

条件控制

最常用的条件控制语句是if语句。if语句用于根据某个条件来执行不同的代码块。例如:

1
2
3
4
5
6
7
8
age = 25

if age < 18:
print("你还未成年,不得入内。")
elif age >= 18 and age < 21:
print("你已经成年,但还未达到饮酒年龄。")
else:
print("欢迎光临。")

循环

Python中的循环有两种类型:for循环和while循环。for循环用于迭代遍历序列(如列表、元组、字符串)中的每个元素,而while循环则用于在满足条件的情况下重复执行代码块。

以下是一个使用for循环打印列表中所有元素的示例:

1
2
3
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)

在此示例中,我们使用for循环遍历了一个名为fruits的列表,并打印了其中的每个元素。

以下是一个使用while循环计算数字的示例:

1
2
3
4
5
6
7
8
9
n = 10
sum = 0
i = 1

while i <= n:
sum += i
i += 1

print("1到%d的和为:%d" % (n, sum))

使用while循环计算了从1到10的整数之和,并输出了结果。

子程序设计

函数

在Python中,我们使用def关键字来定义一个函数,函数的主体被缩进,并在函数名后面跟着一对括号和一个冒号。以下是一个使用函数打印乘法表的示例:

1
2
3
4
5
6
7
def multiplication_table(n):
for i in range(1, n+1):
for j in range(1, i+1):
print("%d*%d=%d" % (i, j, i*j), end='\t')
print()

multiplication_table(9)

我们定义了一个名为multiplication_table的函数,该函数接受一个整数n作为参数,并打印1到n的乘法表。

递归

递归是一种常用于解决分治问题的算法,它将问题分解为较小的子问题,并使用相同的算法递归地解决它们,直到子问题变得足够简单,可以直接求解。

以下是一个使用递归计算阶乘的示例:

1
2
3
4
5
6
7
def factorial(n):
if n == 1:
return 1
else:
return n * factorial(n-1)

print(factorial(5))

我们定义了一个名为factorial的递归函数,该函数接受一个正整数n作为参数,并使用递归的方式计算n的阶乘

面向对象编程

Python是一种面向对象的编程语言,支持封装、继承和多态等面向对象的概念。以下是一个简单的Python面向对象编程的栗子:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
class Animal:
def __init__(self, name, age):
self.name = name
self.age = age

def speak(self):
pass

class Dog(Animal):
def __init__(self, name, age, breed):
super().__init__(name, age)
self.breed = breed

def speak(self):
return "汪汪!"

class Cat(Animal):
def __init__(self, name, age, color):
super().__init__(name, age)
self.color = color

def speak(self):
return "喵喵!"

dog = Dog("旺财", 3, "金毛")
cat = Cat("咪咪", 2, "白色")

print(dog.name, dog.age, dog.breed, dog.speak())
print(cat.name, cat.age, cat.color, cat.speak())

在此示例中,我们定义了一个名为Animal的基类(也称为父类或超类),以及两个名为Dog和Cat的子类(也称为派生类或子类)。每个类都具有自己的属性和方法,可以在实例化对象时进行初始化和访问。

我们使用super()函数调用父类的构造函数,使用子类的构造函数来初始化子类的属性。在这个例子中,Dog类具有属性breed,而Cat类具有属性color。两个子类都实现了一个名为speak()的方法,该方法返回相应的动物声音。

在主程序中,我们实例化了一个Dog对象和一个Cat对象,并使用它们的属性和方法来打印它们的信息。

面向对象编程特点

  • 可以更好地组织和管理代码
  • 程序更加灵活和易于扩展

异常处理

在Python中,异常处理是一种非常重要的技术,可以帮助我们在程序出现错误时优雅地处理它们,而不会使程序崩溃或停止运行。以下是一个简单的Python异常处理的示例:

1
2
3
4
5
6
7
8
9
10
11
12
13
try:
num1 = int(input("请输入第一个整数:"))
num2 = int(input("请输入第二个整数:"))
result = num1 / num2
print("结果为:", result)
except ValueError:
print("输入不合法,请输入整数!")
except ZeroDivisionError:
print("除数不能为0!")
except:
print("程序出现错误!")
finally:
print("感谢使用本程序!")

在此示例中,我们使用try…except语句来捕获程序可能出现的异常。首先,我们尝试将用户输入的字符串转换为整数,并计算两个整数的商。如果程序出现异常,则程序将跳转到相应的except块,并输出错误信息。如果没有出现异常,则程序将继续执行,并输出结果。无论程序是否出现异常,finally块中的代码都将始终执行。

在本示例中,我们定义了三个except块来处理可能出现的异常:ValueError(输入不是整数)、ZeroDivisionError(除数为0)和通用异常(其他类型的异常)。通过使用不同的except块,我们可以根据具体情况选择不同的处理方式。

Python异常处理是一种非常强大和灵活的技术,可以帮助我们更好地处理程序中的错误,避免程序崩溃或停止运行,并提高程序的可靠性和稳定性。

赋值、浅拷贝与深拷贝

1
2
3
4
5
6
# 简单赋值
a = [1, 2, 3]
b = a
b[0] = 4
print("a = ", a) # a = [4, 2, 3]
print("b = ", b) # b = [4, 2, 3]

用简单赋值将列表a赋值给变量b,然后修改变量b的第一个元素。由于变量b只是变量a的引用,因此变量a和b都将被修改。这种方式被称为浅复制,因为新变量只是原始变量的一个浅层副本。

1
2
3
4
5
6
# 浅拷贝
c = [1, 2, [3, 4]]
d = c.copy()
d[2][0] = 5
print("c = ", c) # c = [1, 2, [5, 4]]
print("d = ", d) # d = [1, 2, [5, 4]]

使用copy()函数进行浅拷贝,将列表c复制到变量d中。然后,我们修改变量d中的嵌套列表的第一个元素。由于d是c的浅层副本,所以嵌套列表也被修改了。这种方式也被称为浅拷贝,因为它只复制了原始变量的顶层元素,而不是嵌套元素。

1
2
3
4
5
6
7
# 深拷贝
import copy
e = [1, 2, [3, 4]]
f = copy.deepcopy(e)
f[2][0] = 5
print("e = ", e) # e = [1, 2, [3, 4]]
print("f = ", f) # f = [1, 2, [5, 4]]

使用deepcopy()函数进行深拷贝,将列表e复制到变量f中。然后,我们修改变量f中的嵌套列表的第一个元素。由于f是e的深层副本,所以嵌套列表不会被修改。这种方式被称为深拷贝,因为它复制了整个对象及其嵌套元素。

常用容器

列表

列表是Python中最常用的数据结构之一,用于存储一组有序的元素。列表使用数组实现,底层数据结构为动态数组。动态数组是指在数组大小可变的情况下,动态地调整内部数组的大小。列表可以存储任何类型的数据,包括整数、浮点数、字符串和其他对象。

举例:使用列表来存储一组数字,并对它们进行排序。

1
2
3
numbers = [3, 2, 1, 4, 5]
numbers.sort()
print(numbers) # [1, 2, 3, 4, 5]

集合

集合是Python中的另一种常用数据结构,用于存储一组无序的元素。集合使用哈希表实现,底层数据结构为哈希表。哈希表是一种使用哈希函数将键映射到存储位置的数据结构。集合中的元素必须是可哈希的,包括数字、字符串和元组等不可变类型。

举例来说,我们可以使用集合来去重一组数字:

1
2
3
numbers = [1, 2, 3, 3, 4, 4, 5]
unique_numbers = set(numbers)
print(unique_numbers) # {1, 2, 3, 4, 5}

字典

字典是Python中的另一种重要数据结构,用于存储一组键值对。字典使用哈希表实现,底层数据结构为哈希表。字典中的键必须是可哈希的,包括数字、字符串和元组等不可变类型。值可以是任何类型的数据,包括数字、字符串、列表、集合和其他对象。

举例来说,我们可以使用字典来存储一组单词及其对应的解释:

1
2
words = {'apple': 'a fruit', 'banana': 'a fruit', 'carrot': 'a vegetable'}
print(words['apple']) # 'a fruit'

Python:AI时代的胶水语言

为何称为胶水语言?

  • Python可以方便地将不同的编程语言、框架和库进行结合,从而实现更加复杂的应用程序。
  • Python拥有大量的第三方库和工具,这些库和工具可以轻松地集成到Python程序中,并与其他编程语言和系统进行交互。

Python与数据科学的关系:

  • Python是一种功能强大的通用编程语言,具有易于学习、易于阅读和易于编写的特点。
  • Python拥有大量的数据科学库和工具,包括NumPy、Pandas、Matplotlib、Scikit-learn和TensorFlow等,这些库可以用于数据分析、机器学习、深度学习和人工智能等领域。

Python语言的简洁性、易读性、扩展性和丰富的库资源,使其成为数据科学的流行语言之一。Python能够轻松地读取、处理和可视化数据,使得它成为数据科学家、研究人员和工程师的首选语言。同时,Python社区也非常活跃,拥有庞大的开发者和用户社群,为数据科学的应用和创新提供了强大的支持。


人生苦短,我也要用Python
https://liaoweiquan.github.io/2021/05/21/Python初见/
作者
泉泉
发布于
2021年5月21日
许可协议