1. Python中的模块之间循环引用问题
在Python中,如果两个模块互相导入(循环引用),可能会导致ImportError
。这是因为Python在加载模块时,如果模块还未完全初始化就被另一个模块引用,就会出错。
解决方法:
- 尽量避免循环引用,调整代码结构。
- 将导入语句放到函数内部,延迟加载。
示例:
python
# a.py
import b
def func_a():
b.func_b()
# b.py
import a
def func_b():
a.func_a()
# 解决方法:在函数内导入
# a.py
def func_a():
import b
b.func_b()
2. pass语句是什么作用?
pass
是一个空操作语句,用作占位符。当语法上需要一个语句但你不想执行任何操作时,可以使用它。
示例:
python
for i in range(5):
if i < 3:
pass # 什么也不做
else:
print(i)
# 输出: 3 4
3. 模块和包是什么?
- 模块 :一个包含Python代码的单个
.py
文件,可以被导入。 - 包 :一个包含
__init__.py
文件的文件夹,里面可以有多个模块。
示例:
python
# my_module.py
def say_hello():
print("Hello!")
# 导入模块
import my_module
my_module.say_hello() # 输出: Hello!
# 包结构
# my_package/__init__.py
# my_package/sub_module.py
from my_package import sub_module
4. range和xrange
range()
:Python 3中返回一个range对象,生成一系列数字,内存占用少。xrange()
:Python 2中的函数,返回一个迭代器,Python 3中已移除,用range()
替代。
示例:
python
for i in range(5): # 生成 0, 1, 2, 3, 4
print(i)
5. dict和items和iteritems的区别
dict
:字典本身。items()
:返回字典的键值对视图(Python 3)。iteritems()
:Python 2中返回键值对迭代器,Python 3中已移除。
示例:
python
d = {'a': 1, 'b': 2}
print(d.items()) # 输出: dict_items([('a', 1), ('b', 2)])
for k, v in d.items():
print(k, v)
# 输出:
# a 1
# b 2
6. is和==有什么区别
is
:检查两个对象是否是同一个对象(内存地址相同)。==
:检查两个对象的值是否相等。
示例:
python
a = [1, 2]
b = [1, 2]
c = a
print(a == b) # True,值相等
print(a is b) # False,不是同一个对象
print(a is c) # True,同一个对象
7. func和func()有什么区别
func
:函数对象本身,可以作为变量传递。func()
:调用函数,执行其中的代码。
示例:
python
def func():
print("Hello")
print(func) # 输出: <function func at ...>
func() # 输出: Hello
8. any()和all()有什么区别
any()
:如果可迭代对象中任意一个元素为True,返回True。all()
:如果可迭代对象中所有元素为True,返回True。
示例:
python
lst = [True, False, True]
print(any(lst)) # True
print(all(lst)) # False
9. 如何检查列表中是否存在值?
可以使用in
操作符或list.count()
方法。
示例:
python
lst = [1, 2, 3]
print(2 in lst) # True
print(lst.count(2)) # 1(出现次数)
10. 讲讲排序吧
Python中对不同数据结构的排序方法不同,常用内置函数sorted()
或列表的.sort()
方法。
- 对list排序 :
sort()
:原地排序,修改原列表。sorted()
:返回新排序列表,不改原列表。
- 对set排序:set无序,不能直接排序,需转为list。
- 对元组排序 :元组不可变,不能用
.sort()
,需用sorted()
转为list。 - 依赖的包:无需额外包,内置支持。
示例:
python
# list排序
lst = [3, 1, 2]
lst.sort() # 原地排序
print(lst) # [1, 2, 3]
new_lst = sorted(lst, reverse=True) # 新列表,降序
print(new_lst) # [3, 2, 1]
# set排序
s = {3, 1, 2}
sorted_s = sorted(s) # 转为list排序
print(sorted_s) # [1, 2, 3]
# 元组排序
t = (3, 1, 2)
sorted_t = sorted(t) # 转为list排序
print(sorted_t) # [1, 2, 3]