Python常见问题详解1
1.python字典键值都是哪些类型?
由于dict是按 key 查找,所以在一个dict中,key不能重复Key键的唯一性。
键可以用字符串、数字、布尔值、元组(不可变的数据类型)(可以hash)表示,但不可以用列表、集合(可以变的数据类型)表示.
值没有要求,可以保存任意类型的数据。
2. None、0判断布尔值是False,还有哪些是False?
还有,空的字符串、列表、字典、集合。
3. python迭代器与生成器?
(1)什么是迭代?
迭代是可以通过遍历的方式依次把某个对象中的元素取出的方法,在python中,迭代是通过使用for…in…语句完成的。
(2)迭代器
在python中,可以被next函数调用并不断返回下一个值的对象被称为迭代器(iterator),我们也可以通过isinstance函数对其进行判断。
迭代是Python最强大的功能之一,是访问集合元素的一种方式。 迭代器是一个可以记住遍历的位置的对象。 迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。 迭代器有两个基本的方法:iter() 和 next()。 字符串,列表或元组对象都可用于创建迭代器。
(3)生成器
在python中,生成器(generator)也是用在迭代操作中,其本质上可以理解为一个特殊的迭代器,生成器具有和迭代器一样的特性。但是它们在实现方式上不一样。我们可以通过两种方式创建生成器:生成器表达式,生成器函数。
(4)二者区别
- 迭代器是访问容器的一种方式,也就是说容器已经出现。我们是从已有元素拓印出一份副本,只为我们此次迭代使用。而生成器则是,而生成器则是自己生成元素的。也就是前者是从有到有的复制,而后者则是从无到有的生成。
- 在用法上生成器只需要简单函数写法,配合yield就能实现。而迭代器真正开发中很难使用到。我们可以把生成器看做,python给我们提供的特殊接口实现的迭代器。
4. try、except和finally与return的关系?
(1)在 try 中 raise一个异常,就立刻转入 except 中执行,在except 中遇到 return 时,就强制转到 finally中执行, 在 finally 中遇到 return 时就返回。
def test1():
try:
print('to return in try')
return 'try'
except Exception:
print('to return in except')
return 'except'
finally:
print('to return in finally')
return 'finally'
test2Return = test1()
print('test1Return : ' + test1Return)
输出:
to return in try
to return in finally
test2Return : finally
这里在 try 中没有抛出异常,因此不会转到 except 中,但是在try 中遇到return时,也会立即强制转到finally中执行,并在finally中返回。
(2)在except和try中遇到return时,会锁定return的值,然后跳转到finally中,如果finally中没有return语句,则finally执行完毕之后仍返回原return点,将之前锁定的值返回(即finally中的动作不影响返回值),如果finally中有return语句,则执行finally中的return语句。
def test2():
i = 0
try:
i += 1
return i
finally:
i += 1
print ('i in finally : %s'%i )
print('test4Return : %s' % test4())
5. for循环与while循环?
for循环特点:
for循环主要用于对一个集合进行循环(序列或者其他可迭代的对象),每次循环,会从集合中取得一个元素,并执行一次代码块,直到集合中的所有元素都被枚举(获得集合中的每一个元素的过程成为枚举),for循环才结束(退出循环)。
语法格式:
for 变量 in 可迭代对象:
循环体语句
扩展:for循环加else?
如果for循环正常结束,else中语句执行。如果是break的,则不执行。
展开说:当迭代的对象迭代完并为空时,位于else的子句将执行,而如果在for循环中含有break时则直接终止循环,并不会执行else子句;如果在for循环中含有continue,则循环执行到continue语句后跳过套件的其余部分,并继续下一次的循环,如果没有下一个项,则执行else子句。
ls = [30,47,89,101,165]
for i in ls:
if i == 101:
print(“找到数值{}”.format(i)) # 所有for循环执行完成后,执行else子句;
# continue # 终止本次for循环,继续下一次for循环,所有for循环执行完成后,执行else子句;
break # 终止整个循环体,else语句不会被执行
else: # for 和 else 构成一个循环体;
print(“没有找到数值101”)
while循环特点:
使用 while 循环,只要条件为真,就可以执行一组语句。
语法格式:
while 条件表达式:
循环体语句
continue和break联系与区别:
- continue和break都用于for循环和while循环中。
- 执行break语句,会使得break语句所属层次的循环提前结束。【跳出当前循环】
- 执行continue语句,作用是提前结束本次循环,提前进入下一次循环。【跳出本次循环,继续下一次循环。】
二者区别:
- for循环用于确定的次数,这样会比while循环更加简洁比如我要循环代码多少次,次数明确,适合用for。
- while循环多用于不确定的次数,比如我们的案例游戏:猜数字游戏,我们不知道循环几次才能够猜到正确数字,所以用while循环比较合适。
6.python数据类型的定义?
-
元组(tuple):
不可变序列,一旦建立不能修改元组中的元素。 -
列表[list]:
可变序列,可以添加和删除其中的元素。 -
集合{set}:
集合是一个可变无序集合,没有重复元素。支持数学中的集合运算,如并集、交集、差集等。
列表list表示符号为“[ ]”,元组tuple表示符号为“( )”,集合set表示符号为“{ }”。
集合set特点:
1、无序,不可用切片。
2、集合具有不可重复性,即{1,1,2,2,3,3} = = {1,2,3}。
3、集合取并集符号“|”作用为{1,2,3} | {4,5,6} = = {1,2,3,4,5,6}。
4、集合取交集符合“&”作用为{1,2,3} & {2,3,4} = = {2,3}。
5、定义空集表示方法:set()。
6、集合支持使用 len(),max(),min(),in,not in。
7、集合中的元素可以使用数字、字符、字符串。
- 字典{dict}:
字典也是可变容器,使用键-值对(key:value)存储,key是唯一的,value不需要唯一。 (相当于其它语言中的Map)。
空元组:()、tuple() # 正常定义:(1,1.2,true,redhat)
空列表:[]、list()
空集合: set() # 使用花括号{}或者 set()函数创建集合。但是,创建空的集合必须使用 set(),因为花括号是用于创建字典(Dictionary)的。
空字典:{}、dict()
引用
[1]https://blog.csdn.net/u012878945/article/details/103645355
[2]https://blog.csdn.net/weixin_55954259/article/details/122729276
[3]https://blog.csdn.net/weixin_27298377/article/details/112928689
[4]https://www.cnblogs.com/YMWH/p/16520965.html
[5]https://blog.csdn.net/weixin_44706915/article/details/116702292
[6]https://www.jb51.net/article/156435.htm
本文详细讲解了Python中字典的键值类型、None和布尔值的判断、迭代器与生成器的区别,以及try-except-finally与return的关系。还介绍了for和while循环的区别,以及Python主要数据类型及其定义。

1199

被折叠的 条评论
为什么被折叠?



