面对洋洋洒洒的知识点,我往往 “一看就会,一写就废”,为了更有针对性的加深知识点的印象,我将以做题的形式继续总结 Python 系列,每篇 10 道问答,以下是本篇目录:
Python 系列总结都是我自己平时的学习笔记,如果有不正确的地方,希望各位佬儿哥指正纠偏
答:
增
l.insert(idx, value) ---指定索引位置增加
l.append(value) ---在末尾追加
l.extend(iterable) ---取出可迭代对象的值,追加到列表末尾
l1 = [1,2,3,3,4,5]
l1.extend([1,[2]])
print(l1)
--------------------------
[1, 2, 3, 3, 4, 5, 1, [2]]
删
del l[idx] ---删除索引处元素,索引超出会报错:IndexError: list assignment index out of range
del l ---彻底删除列表
l.pop(idx) ---删除索引处元素,索引超出会报错:IndexError: pop index out of range
l.pop() ---删除列表最后一个元素,列表为空会报错:IndexError: pop from empty list
l.remove(value) ---删除列表中第一个出现 value 的元素,值不在会报错:ValueError: list.remove(x): x not in list
l.clear() --清除列表中的所有元素
查
l[idx]
l.count(value) ---统计列表中指定元素出现次数,指定元素不在列表中会返回:0
l.index(value) ---返回列表中第一个指定元素的索引,指定元素不在列表中会报错:ValueError: 11 is not in list
改
l[idx] = value
答:
增
d[new_key] = value ---如果 key 已存在则是更新操作
d.update({key: value}) ---如果 key 存在则是更新操作
d = dict.fromkeys(keys, value) ---dict.fromkeys(keys, value) 方法用于创建一个新字典,其中包含指定的键,并将所有键的值设置为相同的值
d.setdefault(key, default_value) ---如果 key 已存在,则返回对应的 value,若 key 不存在,则返回 default_value,并在原字典中新增键值对 key: default_value
# 可用setdefault()统计每个单词的出现次数
text = "Hello world! Hello python! Hello chatbot!"
word_list = text.split()
word_count = {}
for word in word_list:
word_count[word] = word_count.setdefault(word, 0) + 1
print(word_count)
--------------------------------------------------------------------------------------------
{'Hello': 3, 'world!': 1, 'python!': 1, 'chatbot!': 1}
删
d.pop(key) ---key 不存在会报错:KeyError: 'addr'
d.popitem() ---随机删除一个键值对,因为字典无序,所以是随机删除,字典为空则报错:KeyError: 'popitem(): dictionary is empty'
del d[key] ---删除指定 key,若 key 不存在则报错:KeyError: 'addr'
del d ---彻底删除字典
d.clear ---清空字典
查
d[key] ---若 key 不存在则报错:KeyError: 'addr'
d.get(key) ---若 key 不存在则返回 None
d.keys() ---以列表形式返回字典的所有 key
d.values() ---以列表的形式返回字典的所有 value
d.items() --以列表的形式返回字典的所有键值对,每一组键值对是一组元祖
d1 = {'name': 'Tom', 'age': 25}
print(d1.keys())
print(type(d1.keys()))
print()
print(d1.values())
print(type(d1.values()))
print()
print(d1.items())
print(type(d1.items()))
------------------------------------------------
dict_keys(['name', 'age'])
<class 'dict_keys'>
dict_values(['Tom', 25])
<class 'dict_values'>
dict_items([('name', 'Tom'), ('age', 25)])
<class 'dict_items'>
d[key] = value
d1.update(d2) ---将 d2 更新到 d1 中,相同的 key 则更改 d1 中的 value
答:
因为元祖是不可变数据类型,所以不能不能在原元祖新增
t = (1,2,'hello')
t2 = (2,3,'world')
print(id(t))
t += t2
print(t)
print(id(t))
-------------------------
2049302192960
(1, 2, 'hello', 2, 3, 'world')
2049302145920
del t ---不能 del t[idx],否则报错:TypeError: 'tuple' object doesn't support item deletion
t[idx] ---idx 不能越界,否则报错:IndexError: tuple index out of range
可遍历元祖
for _ in t:
print(_)
t.count(value) ---返回元祖中 value 的个数,value 不存在返回 0
t.index(value) ---返回元祖中首个 value 的索引,value 不存在则报错:ValueError: tuple.index(x): x not in tuple
元组是不可变的,因此不能修改元组中的任何元素。
答:整形-int-不可变、浮点型-float-不可变、字符型-str-不可变、列表-list-可变、元祖-tuple-不可变、字典-dict-可变;
答:
在 for.else 循环结构中,当循环提全部循环完毕后,没有 break 或者 return 的情况下,会执行 else 代码段;
在异常处理中,try 下的代码段没有出现异常的情况下,会执行 else 代码段;
条件分支语句用 else 来表示"否则执行某件事"
答:
1.位置参数:根据参数在函数定义中的位置来确定。
2.默认参数:在函数定义中指定的参数值。
3.关键字参数:在调用函数时指定参数名称和对应的值。
4.星号参数:在函数定义中使用来捕获剩余的参数。
5.双星号参数:在函数定义中使用* 来捕获剩余的关键字参数。
答:
==比较的是两个对象的值,is 比较的是两个对象的内存地址。
不能用 is 替代==,仅当你需要判断某个对象是否是 None、False、True 时,使用 is,其他情况下请使用==。
a = [1,2,3]
b = [1,2,3]
print(id(a))
print(id(b))
print(a == b)
print(a is b)
--------------------
2278285654592
2278285654272
True
False
a = [1,2,3]
b = a
print(id(a))
print(id(b))
print(a == b)
print(a is b)
---------------------
2021576555072
2021576555072
True
True
额外:关于赋值或者复制后 id() 是否异同的知识点,结论:除了'='赋值,其余的 id() 都不一样,直接举例:
import copy
a = [1,2,3]
b = a
c = a.copy()
d = copy.copy(a)
e = copy.deepcopy(a)
f = a[:]
print(id(a))
print(id(b))
print(id(c))
print(id(d))
print(id(e))
print(id(f))
------------------
1927143455168
1927143455168
1927140937408
1927140937152
1927143557824
1927143558528
答:在函数局部要重新赋值全局变量之前,需要使用 global 关键字声明全局变量。
答:在 Python 中,当一个模块被执行时,if name == 'main':语句块会被执行。此语句块可以用来测试模块的代码,而不会影响模块的其他功能。
如果模块被其他模块导入,则name的值为该模块的名称,而不是main。如果该模块是主程序,则name的值为main,此时该语句块会被执行。
这样的语句使得可以在模块被其他模块导入时忽略测试代码,并且只在模块被独立运行时执行测试代码。
答:
封装:隐藏内部状态和实现细节,仅提供必要的接口给外部使用。
继承:允许创建新的对象类型,并基于现有的对象类型派生,从而继承其行为和状态。
多态:允许不同类型的对象对相同消息做出不同的响应。