Python常见问题详解1

本文详细讲解了Python中字典的键值类型、None和布尔值的判断、迭代器与生成器的区别,以及try-except-finally与return的关系。还介绍了for和while循环的区别,以及Python主要数据类型及其定义。

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)二者区别

  1. 迭代器是访问容器的一种方式,也就是说容器已经出现。我们是从已有元素拓印出一份副本,只为我们此次迭代使用。而生成器则是,而生成器则是自己生成元素的。也就是前者是从有到有的复制,而后者则是从无到有的生成。
  2. 在用法上生成器只需要简单函数写法,配合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()innot in7、集合中的元素可以使用数字、字符、字符串。
  • 字典{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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

花开盛夏^.^

道阻且长,行者将至!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值