今天,咱们就来聊聊Python里那些面试常客。像什么变量、数据类型、条件语句、循环这些基础知识,肯定得掌握牢固。还有像函数、类、对象、模块这些进阶一点的,也得心里有数。 还会讲讲异常处理,文件操作,列表推导式这些能让你的代码更简洁更高效的"小技巧"。准备好了吗?Let's go!# 变量和数据类型:Python的基石
变量,你可以把它想象成一个贴着标签的盒子,用来存放各种东西。在Python里,你不需要事先声明变量的类型,直接赋值就行。
x = 10# 整数
name = "Alice"# 字符串
is_valid = True# 布尔值
price = 99.99# 浮点数
print(x)
print(name)
print(is_valid)
print(price)
上面这段代码,x、name、is_valid、price都是变量,它们分别存储了整数、字符串、布尔值和浮点数。这些就是Python里最常用的数据类型。
记住一点:Python是动态类型语言,变量类型是根据赋给它的值来决定的。
# 条件语句:让程序会思考
条件语句,简单来说就是if...else...。它可以让程序根据不同的条件,执行不同的代码块。
age = 20
if age >= 18:
print("你已经成年了")
print("可以开始享受你的自由啦")
else:
print("你还未成年")
print("等你长大再说吧")
这个例子里,如果age大于等于18,就输出"你已经成年了",否则就输出"你还未成年"。
温馨提示:if后面要加冒号:,代码块要缩进。这是Python的语法规则,必须遵守哦。而且要对齐,不然会报错!
# 循环:重复执行的利器
循环,就是让一段代码重复执行多次。Python里有两种循环:for循环和while循环。
for循环通常用于遍历一个序列(比如列表、元组、字符串)。
fruits = ["apple", "banana", "cherry"]
for fruit in fruits:
print(fruit)
这段代码会依次输出"apple"、"banana"、"cherry"。
while循环则是在满足某个条件的情况下,一直执行下去。
count = 0
while count < 5:
print(count)
count += 1
这段代码会输出0到4。
注意:使用while循环时,要确保循环条件最终会变成False,否则会陷入无限循环。
# 函数:代码的打包神器
函数,就是把一段具有特定功能的代码打包起来,方便重复使用。
defgreet(name):
print("Hello, " + name + "!")
greet("Bob") # 输出 Hello, Bob!
greet("Alice") # 输出 Hello, Alice!
def关键字用来定义函数,greet是函数名,name是参数。函数可以有返回值,也可以没有。
温馨提示:函数可以提高代码的复用性和可读性。一个函数只做一件事,并且把它做好。
# 类和对象:面向对象编程的基石
类,可以看作是创建对象的模板。对象,则是类的实例。类定义了对象的属性(数据)和方法(行为)。 有点抽象是吧? 举个例子:
classDog:
def__init__(self, name, breed):
self.name = name
self.breed = breed
defbark(self):
print("Woof!")
my_dog = Dog("Buddy", "Golden Retriever")
print(my_dog.name) # 输出 Buddy
my_dog.bark() # 输出 Woof!
Dog是一个类,它有两个属性:name和breed,以及一个方法bark。my_dog是Dog类的一个对象,我们可以通过my_dog.name访问它的属性,通过my_dog.bark()调用它的方法。
__init__方法是一个特殊的方法,叫做构造函数。它在创建对象时被自动调用,用来初始化对象的属性。
# 模块:代码的积木
模块,就是把一些相关的函数、类、变量放在一个文件里,方便组织和管理代码。
你可以把模块想象成一个个积木,你可以把它们组合起来,搭建出各种各样的东西。
# my_module.py
defadd(x, y):
return x + y
然后,在另一个文件里,你可以这样使用这个模块:
import my_module
result = my_module.add(5, 3)
print(result) # 输出 8
import关键字用来导入模块。你可以使用模块名.函数名的方式来调用模块里的函数。
Python有大量的内置模块,比如math、os、datetime等等,可以帮助你完成各种各样的任务。
# 异常处理:让程序更健壮
异常处理,就是处理程序在运行时可能出现的错误。
try:
result = 10 / 0
except ZeroDivisionError:
print("除数不能为0")
这段代码会抛出一个ZeroDivisionError异常,因为除数不能为0。try...except...语句可以捕获这个异常,并执行相应的处理代码。
通过异常处理,你可以让程序在遇到错误时,不会崩溃,而是能够优雅地处理错误,并继续运行下去。
# 文件操作:和硬盘打交道
文件操作,就是读写文件。
# 写入文件
withopen("my_file.txt", "w") as f:
f.write("Hello, world!")
# 读取文件
withopen("my_file.txt", "r") as f:
content = f.read()
print(content) # 输出 Hello, world!
open函数用来打开文件,第一个参数是文件名,第二个参数是打开模式。"w"表示写入模式,"r"表示读取模式。
with语句可以确保文件在使用完毕后,会被自动关闭。
# 列表推导式:代码的浓缩精华
列表推导式,是一种简洁的创建列表的方式。
numbers = [1, 2, 3, 4, 5]
squares = [x**2for x in numbers]
print(squares) # 输出 [1, 4, 9, 16, 25]
这段代码使用列表推导式,快速地创建了一个包含numbers列表中每个元素的平方的新列表squares。
列表推导式可以让你用一行代码,完成很多 complex 的操作。
# 装饰器:给函数穿上新衣
装饰器,是一种特殊的函数,可以用来修改其他函数的功能。
defmy_decorator(func):
defwrapper():
print("Before calling the function.")
func()
print("After calling the function.")
return wrapper
@my_decorator
defsay_hello():
print("Hello!")
say_hello()
@my_decorator 相当于 say_hello = my_decorator(say_hello)。
装饰器可以在不修改原函数代码的情况下,给函数添加新的功能,比如日志记录、性能测试等等。
# 生成器:节省内存的神器
生成器,是一种特殊的迭代器,可以逐个生成值,而不是一次性生成所有值。
defmy_generator(n):
for i inrange(n):
yield i
my_gen = my_generator(5)
for num in my_gen:
print(num) # 输出 0, 1, 2, 3, 4
yield关键字用来生成值。生成器可以节省大量的内存,特别是当处理大量数据时。
# Lambda函数:简洁的匿名函数
Lambda函数,是一种简洁的匿名函数。
add = lambda x, y: x + y
print(add(3, 5)) # 输出 8
Lambda函数通常用于简单的函数,比如作为map、filter等函数的参数。
# 递归:函数自己调用自己
递归,就是函数自己调用自己。
deffactorial(n):
if n == 0:
return1
else:
return n * factorial(n-1)
print(factorial(5)) # 输出 120
递归函数需要有一个明确的结束条件,否则会陷入无限循环。递归在处理一些树形结构或者分治算法时,非常有用。