在 Python 中,字典(dict
)常被类比为其他语言中的对象,而列表(list
)则类似于数组。
1. "Hello World" - Python入门
print('hello world')
2. 变量
2.1. 变量定义
变量名 = 变量值
a = 1b = 2c = 3
2.2. 变量运算
可以对变量进行各种算术运算。
print(a + b) # 加法print(a - b) # 减法print(a * b) # 乘法print(a / b) # 除法 (结果为浮点数)
2.3. 变量类型
Python 是动态类型语言,变量的类型是根据赋给它的值自动确定的。可以使用 type()
函数查看变量类型。
print(type(a)) # a 是整数 (int)print(type(b)) # b 是整数 (int)print(type(c)) # c 是整数 (int)
2.4. 变量类型转换
可以显式地转换变量的类型。
a_original = 1b_original = "2" # 假设 b 的初始值是字符串 "2" c_original = "3.0" # 假设 c 的初始值是字符串 "3.0"print(f"原始值: a={a_original}({type(a_original)}), b={b_original}({type(b_original)}), c={c_original}({type(c_original)})")a_converted_to_str = str(a_original)b_converted_to_int = int(b_original)c_converted_to_float = float(c_original)print(f"转换为字符串: a_converted_to_str = {a_converted_to_str} ({type(a_converted_to_str)})")print(f"转换为整数: b_converted_to_int = {b_converted_to_int} ({type(b_converted_to_int)})")print(f"转换为浮点数: c_converted_to_float = {c_converted_to_float} ({type(c_converted_to_float)})")
3. 字符串格式化
将变量的值嵌入到字符串中。
3.1. 使用 %
操作符 (旧式方法)
%s
: 将值转换为字符串
%d
: 格式化为整数
%f
: 格式化为浮点数
class_num = 57avg_score_total = 16781 # 假设这是总分,实际平均分应为 avg_score_total / class_num# message_percent = '班级人数是%s,班级平均分是:%s' % (class_num, avg_score_total) # 此处 avg_score_total 若直接用,语义上不是平均分actual_avg_score = avg_score_total / class_num if class_num > 0 else 0message_percent = '班级人数是%d, 班级平均分是:%.2f' % (class_num, actual_avg_score) # 使用 %d 和 %.2f (保留两位小数) 更合适print(message_percent)
3.2. 使用 f-string (格式化字符串字面值 - 推荐)
这是更现代且推荐的方式,代码更简洁易读。
class_num = 57avg_score_value = 85.5 # 假设平均分是浮点数message_fstring = f'班级人数是{class_num}, 班级平均分是:{avg_score_value}'print(message_fstring)
4. 控制流
4.1. if
语句 (条件判断)
age = 18if age >= 18: print('成年')elif age >= 12: # 隐含了 age < 18 print('上中学') elif age >= 5: print('上小学或幼儿园') else: # age < 5 print('其他 (年龄小于5岁)')
4.2. while
循环
只要条件为真,就重复执行代码块。
i = 0while i < 10: print(i) i += 1 # 等同于 i = i + 1
4.3. for
循环
遍历序列(如列表、元组、字符串)或可迭代对象。
range(stop)
: 生成从 0 到 stop-1
的整数序列。例:range(10)
-> 0, 1, ..., 9range(start, stop)
: 生成从 start
到 stop-1
的整数序列。例:range(1, 4)
-> 1, 2, 3range(start, stop, step)
: 生成从 start
到 stop-1
,步长为 step
的整数序列。例:range(1, 10, 2)
-> 1, 3, 5, 7, 9for i in range(1, 10, 2): print(i)
5. 函数
函数是可重用的代码块,用于执行特定任务。
5.1. 函数定义与调用
使用 def
关键字定义函数。
# 带有名称的函数def add(a, b): return a + b, 2 # 可以返回多个值,它们会组成一个元组# 调用函数result_sum, result_second_val = add(1, 2) # 解包元组返回值print(f"加法结果: {result_sum}, 第二个返回值: {result_second_val}")# 如果只需要部分返回值results_tuple = add(3, 4)print(f"返回的元组: {results_tuple}")print(f"仅获取加法结果: {results_tuple[0]}")
5.2. 匿名函数 (lambda
)
用于创建简单、单行的小函数。通常用在需要一个简单函数作为参数的地方。
multiply = lambda x, y: x * yprint(f"匿名函数计算 3 * 4 = {multiply(3, 4)}")
6. 数据结构
6.1. 列表 (list
)
有序、可变(可以修改)的元素集合。允许重复元素。
*注意:不建议使用 list
作为变量名,因为它会覆盖 Python 内置的 list()
函数。
my_list_example = [1, 2, "3", 4, 5]print(f"列表第三个元素 (索引2): {my_list_example[2]}") # 输出: "3"print(f"列表第四个元素 (索引3): {my_list_example[3]}") # 输出: 4# 列表的方法# 1.查询某元素下标 list.index("3")# 2.在列表中插入新元素 list.insert(0, "插入的内容")# 3.在列表中追加元素 list.append("追加的内容") list.extend(["追加的内容1", "追加的内容2"])# 4.删除列表中的元素 del list[0] list.pop(0) list.remove("3") list.clear()
6.2. 元组 (tuple
)
有序、不可变(一旦创建不能修改)的元素集合。允许重复元素。
my_tuple_example = (1, 2, 3, 4, 5)print(f"元组第四个元素 (索引3): {my_tuple_example[3]}") # 输出: 4# my_tuple_example[0] = 10 # 这行会报错 TypeError,因为元组不可修改print(f"元组示例: {my_tuple_example}")
6.3. 集合 (set
)
无序、不重复的元素集合。主要用于成员测试和消除重复项。
my_set_example = {1, 2, 3, 4, 5, 5, 4} # 重复的元素会自动去除print(f"集合示例 (顺序可能不同): {my_set_example}") # 输出可能是 {1, 2, 3, 4, 5}
6.4. 字典 (dict
)
无序(Python 3.7+ 中保持插入顺序)的键值对(key-value pair)集合。键必须是唯一的且通常是不可变类型(如字符串、数字、元组)。
关于“不支持while循环”的说明:字典本身可以直接用于 for
循环遍历其键、值或项。虽然不能直接 while my_dict:
这样用字典本身作为 while
循环的条件来遍历元素,但可以在 while
循环内部操作字典或基于字典的某些条件进行循环。
my_dict_example = {'name': '张三', 'age': 18}print(f"字典中 'name' 对应的值: {my_dict_example['name']}") # 输出: 张三# 字典的方法# 1.新增元素dict['gender'] = '男'# 2.删除del dict['name']# 3.清空dict.clear()# 4.获取全部keydict.keys()# 5.获取全部valuedict.values()# 6.获取全部key-valuedict.items()# 7.统计字典中的元素数量len(dict)
7. JSON 数据格式
JSON (JavaScript Object Notation) 是一种轻量级的数据交换格式,常用于不同语言或系统之间传递数据。Python 的 json
模块提供了处理 JSON 数据的功能。
7.1. Python 数据 -> JSON 字符串 (json.dumps
)
7.2. JSON 字符串 -> Python 数据 (json.loads
)
8. 类 (面向对象编程)
8.1. 类的定义和实例化
class Person: # 类型提示 (可选,但有助于代码可读性和静态分析) name: str age: int gender: str # 初始化方法:创建对象时自动调用 def __init__(self, name: str, age: int, gender: str): self.name = name # self.name 是实例变量 self.age = age self.gender = gender print(f"Person对象 '{self.name}' 已创建。") # 实例方法:对象可以调用的方法,第一个参数总是 self,代表实例本身 def say(self, msg: str): print(f'我叫{self.name}, 我今年{self.age}岁, 我是{self.gender}生。我说:“{msg}”')# 创建对象 (实例化类 Person)person_instance_1 = Person('张三', 18, '男')person_instance_2 = Person('王芳', 22, '女')# 访问对象的属性print(f"{person_instance_1.name}的年龄是: {person_instance_1.age}")# 调用对象的方法person_instance_1.say('你好,Python!')person_instance_2.say('很高兴认识你。')
9.2. 类的内置方法 (特殊方法/魔术方法)
这些方法以双下划线开头和结尾(例如 __init__
),它们在特定情况下由 Python 自动调用。
__str__(self)
: 把类的对象转换为字符串的形式
def __str__(self): return f'我叫{self.name},我今年{self.age}岁,我是{self.gender}生'
__lt__(self, other)
: 返回当前对象1和对象2的大小比较结果,return后面的是比较的依据
def __lt__(self, other): return self.age < other.age
__eq__(self, other)
: 返回当前对象1和对象2的相等比较结果,return后面的是比较的依据
def __eq__(self, other): return self.age == other.age
9.3. 私有成员 (名称修饰/Name Mangling)
在变量名或方法名前加双下划线 __
会使其成为“伪私有”的。只有类能使用,对象不可以用。
class Person: __name = '张三' __age = 18 __gender = '男' def __init__(self, name, age, gender): self.__name = name self.__age = age self.__gender = gender
9.4. 类的继承
继承允许一个类(子类/派生类)获取另一个类(父类/基类)的属性和方法,并可以添加新的或重写已有的。
单继承: 子类继承自一个父类。
class Sun(Person): pass
多继承: 子类可以继承自多个父类。子类将拥有所有父类的属性和方法。
教程中的 class Sun(Person, Person): pass
是一个无效的多继承示例,因为同一个类被列出了两次。多继承时,父类的顺序很重要,因为它影响方法解析顺序 (MRO)。
class Sun(Person, Person):pass
super()
: 是一个内置函数,用于调用父类(或在多继承中,MRO 指定的下一个类)的方法。它使得代码更易于维护,特别是在复杂的继承结构中。
10. 类型注解 (Type Hinting)
类型注解为代码提供了关于变量、函数参数和返回值的类型信息。它们主要用于静态分析工具(如 MyPy)进行类型检查,以及提高代码的可读性和可维护性。Python 解释器本身在运行时通常不强制执行类型检查(但某些库可能会利用它们)。
- 变量注解:
variable_name: type = value
函数参数注解: def func(param_name: type, ...)
函数返回值注解: def func(...) -> return_type:
Union[type1, type2]
: 表示可以是多种类型之一 (需要 from typing import Union
)Optional[type]
: 表示可以是 type
或 None
(等价于 Union[type, None]
, 需要 from typing import Optional
)from typing import Union, Optional, Listvar_annotated_1: int = 10var_annotated_2: str = "你好"var_annotated_3: Union[int, str] # 可以是整数或字符串var_annotated_4: Optional[float] = None # 可以是浮点数或 Nonedef create_greeting(name: str, age: Optional[int] = None) -> str: greeting = f"你好, {name}!" if age is not None: greeting += f" 你今年 {age} 岁。" return greetingdef sum_list_of_numbers(numbers: List[Union[int, float]]) -> float: total: float = 0.0 for num in numbers: total += num return totalprint(create_greeting("小张"))print(create_greeting("老王", 30))my_numbers: List[Union[int, float]] = [1, 2.5, 3, 4.0]print(f"数字列表的总和: {sum_list_of_numbers(my_numbers)}")var_annotated_3 = 100print(f"var_annotated_3 (int): {var_annotated_3}")var_annotated_3 = "世界"print(f"var_annotated_3 (str): {var_annotated_3}")