一、Python是什么?
Python是一种高级、通用、解释型的编程语言,由Guido van Rossum于1991年创建。它以简洁、易读的语法和强大的功能而闻名,有以下特点:
-
动态类型:Python是动态类型的语言,这意味着变量无需预先声明类型,并且在程序运行过程中类型可以改变。
-
缩进风格:Python是缩进敏感的语言,代码块的开始和结束通过缩进来表示,而不是像其他语言那样使用大括号,所以缩进的空格数需要保持一致,一般为4个空格。
-
面向对象:Python支持面向对象编程,可以创建类和对象,实现封装、继承和多态等特性。
-
高级特性:Python具有许多高级特性,如列表解析、生成器表达式、装饰器等,可以简化代码并提高效率。
-
模块化:Python支持模块化编程,可以将功能封装到模块中,方便代码重用和维护。
-
开放源代码:Python属于开放源代码软件,可以免费获取和使用,同时拥有强大的社区支持和丰富的第三方库。
-
跨平台:Python是跨平台的,可以在不同的操作系统上运行,具有良好的可移植性。
-
解释性:Python是一种解释性语言,代码不需要预编译,可以直接运行在解释器上。
-
丰富的库和工具:Python拥有大量的标准库和第三方库,涵盖了各种领域的功能,可以大大提高开发效率
二、Python的基本语法要点:
1、注释 :用#
符号表示注释,可以在代码中添加说明或注解
python
# 这是一个注释
print("Hello, World!") # 这也是一个注释
2、变量:变量赋值非常简单,不需要显式声明类型,只需要直接给变量赋值即可
python
x = 10 # 整数
2y = "Hello, World!" # 字符串
3z = [1, 2, 3] # 列表
3、数据类型:常见的数据类型包括整数(int)、浮点数(float)、字符串(str)、布尔值(bool)、列表(list)、元组(tuple)、集合(set)、字典(dict)等。
python
x = 5 # int
y = 3.14 # float
z = "Hello" # str
is_valid = True # bool
my_list = [1, 2, 3] # list
my_tuple = (1, 2, 3) # tuple
my_set = {1, 2, 3} # set
my_dict = {"name": "Alice", "age": 30} # dict
4、条件语句:Python使用关键字if、elif和else实现条件判断:
python
x = 5
if x > 0:
print("x 是正数")
elif x == 0:
print("x 是零")
else:
print("x 是负数")
5、**循环结构:**主要有两种循环结构:for循环和while循环
- for循环常用于遍历序列或其他可迭代对象:
python
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
- while循环基于条件重复执行一段代码:
python
count = 0
while count < 5:
print(count)
count += 1
6、函数定义:Python中定义函数使用def关键字:
特别提醒:在Python中,函数名前加单个下划线 _ 是一种命名约定,意味着这个函数主要是给内部使用的,对外部来说是"半私有"的。它不会阻止你访问或调用这个函数,但暗示着:"嘿,这个函数主要是给自己模块内部用的,外部最好别直接动它。"
python
def greet(name):
print(f"Hello, {name}!")
greet("Alice") # 输出 "Hello, Alice!"
7、模块导入 :使用import
关键字导入模块,以便使用其中的功能。
python
import math
print(math.pi)
8、 异常处理 :try-except-finally
结构处理异常。
python
try:
x = 1 / 0 # 除以零会引发ZeroDivisionError
except ZeroDivisionError:
print("除数不能为零")
finally:
print("无论是否出现异常,都会执行这部分代码")
三、Python中类的继承、封装和多态特性以及它们与Java和C++的不同之处:
Python类的继承、封装和多态等特性与Java和C++类似,但语法上更为简洁直观。
1、继承:
- 继承是指一个类(称为子类或派生类)可以继承另一个类(称为父类或基类)的属性和方法。在Python中,可以通过在类定义时在括号中指定要继承的父类来实现继承。
- 在Python中,类也可以多继承 ,即一个子类可以同时继承多个父类。这种多继承的特性在Java和C++中也存在,但在Python中更加灵活。
python
# 父类1
class Animal:
def __init__(self, name):
self.name = name
def make_sound(self):
pass
# 父类2
class Pet:
def __init__(self, owner):
self.owner = owner
# 子类继承自父类1和父类2,实现多继承
class Dog(Animal, Pet):
def make_sound(self):
return "Woof!"
# 实例化对象,传入不同参数
dog = Dog("Buddy", "Alice")
# 输出对象的属性和方法
print(f"{dog.name} belongs to {dog.owner}")
print(f"{dog.name} says: {dog.make_sound()}")
2、封装:
Python并没有像Java或C++那样有严格的访问修饰符(public、private、protected),但是它提供了另一种形式的封装。在Python中,通常约定以单个下划线 _var 或双下划线 __var 开头的变量被视为非公开或者私有:
- 单下划线开头的变量或方法虽然不是真正的私有,但按照PEP8编码规范,这暗示着这是一个内部使用的变量或方法,外部应该尽量避免直接访问。
- 双下划线 __var 会在运行时发生名称重整(name mangling),使得外部直接访问变得更加困难(变成 _ClassName__var 的形式),从而达到某种程度上的"私有化"。
尽管如此,Python的封装仍然是基于约定而非强制,任何内部属性都可以通过直接引用方式访问到。
为了更精确地控制属性访问,Python引入了属性描述符,允许程序员在访问属性时执行特定的操作(如读取、设置或删除属性时触发函数)。
python
class MyClass:
def __init__(self):
self._internal_value = None # 私有变量
@property
def value(self):
return self._internal_value
@value.setter
def value(self, new_value):
if isinstance(new_value, int):
self._internal_value = new_value
else:
raise ValueError("Value must be an integer")
# 使用
obj = MyClass()
obj.value = 42 # 通过属性描述符设置值
print(obj.value) # 通过属性描述符获取值
例子中:第5行的@property装饰器将value方法转换为一个只读属性。这意味着当你尝试读取obj.value时,实际上会调用第7行定义的方法,而无需显式调用方法名(如obj.value())。第9行的@value.setter装饰器定义了一个设置器方法,当尝试给obj.value赋值时(如obj.value = 42),会调用这里的代码块。在这个例子中,它检查赋值的新值是否为整数,如果是,则更新内部的_internal_value,否则抛出错误。
3、多态:
多态意味着子类可以重写或扩展父类的方法,使得同一个接口可以有不同的实现。
- 在Python中,多态是动态类型语言的特性,即对象的类型是在运行时确定的(即"如果它走起路来像鸭子,叫起来也像鸭子,那么它就是鸭子"),可以实现同一个方法在不同子类中有不同的实现。
- Python的多态性是基于动态类型的,而Java和C++的多态是基于静态类型的。在Java和C++中,多态性通过继承和接口来实现,需要在编译时确定对象的类型。
python
# 多态示例
class Shape:
def area(self):
raise NotImplementedError("Subclasses should implement this!")
class Square(Shape):
def __init__(self, side):
self.side = side
def area(self):
return self.side ** 2
class Circle(Shape):
def __init__(self, radius):
self.radius = radius
def area(self):
import math
return math.pi * self.radius ** 2
shapes = [Square(4), Circle(3)]
for shape in shapes:
print(shape.area()) # 多态性:每个shape对象调用area方法时,会执行各自子类的实现
4、总结:
虽然Python、Java和C++都支持类的继承、封装和多态这些面向对象编程的特性,但它们之间在实现方式和特性上存在一些不同。Python作为一种动态类型语言,更加灵活和简洁,而Java和C++作为静态类型语言,在编译时类型检查更加严格。