3个看似简单的Python问题是什么

技术3个看似简单的Python问题是什么本篇内容主要讲解“3个看似简单的Python问题是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“3个看似简单的Python问题是什

本文主要解释“看似简单的三个Python问题是什么?”感兴趣的朋友不妨看看。本文介绍的方法简单、快速、实用。让边肖带你学习“看似简单的三个Python问题是什么?”!

问题1

假设我们有几个变量:

X=1y=2l=[x,y] x=5a=[1] b=[2] s=[a,b] a .追加(5)l和s的打印结果是什么?

跳到解决方案。

问题2

让我们定义一个简单的函数:

F (x,s=set ()) :s。添加(x)个打印如果您决定:

f(7)f(6,{4,5})f(2)?跳到解决方案。

问题3

让我们定义两个简单的函数:

F () :l=[1] defenner (x) :l。append(x)returnlrturninnerdefg():y=1 definer(x):y=xreturnyretunner以下命令将产生什么?

ff _ inner=f()print(f _ inner(2))gg _ inner=g()print(g _ inner(2))跳转到解。

你对自己的回答有多自信?让我们看看你是否正确。

解决问题1

Print (l) [1,2] print (s) [[1,5],[2]]为什么第二个列表对第一个元素a.append(5)的变化有反应,而第一个列表完全忽略了x=5的类似变化?

解决问题2

让我们看看发生了什么:

F (7) {7} F (6,{4,5}) {4,5,6} F (2) {2,7}等等,最后的输出不是{2}吗?

解决问题3

输出如下:

FF _ INNER=F()print(F _ INNER(2))[1,2]GG _ INNER=G()print(g_inner(2))unboundlocalrerror 3360赋值的局部变量‘Y’引用为什么G _ INNER(2)不输出3?f()的内部函数怎么能记住它的外部范围,而g()的内部函数却不能?他们其实是一样的!

说明

如果我告诉你这些奇怪的事情。

异的行为与Python中可变对象和不可变对象之间的区别有关怎么办?

诸如列表,集合或字典之类的可变对象可以在适当位置进行更改(变异)。 不变的对象(如整数,字符串和元组)不能—此类对象的"更改"会导致创建新对象。

问题1的说明

x = 1 y = 2 l = [x, y] x += 5 a = [1] b = [2] s = [a, b] a.append(5) >>print(l) [1, 2] >>print(s) [[1, 5], [2]]

由于x是不可变的,因此操作x + = 5不会更改原始对象,而是创建一个新对象。 列表的第一个元素仍指向原始对象,因此其值保持不变。

对于可变对象a,a.append(5)更改原始对象,因此list s"看到"更改。

问题2的解释

def f(x, s=set()):     s.add(x)     print(s) >>f(7) {7} >>f(6, {4, 5}) {4, 5, 6} >>f(2) {2, 7}

前两个输出完全有意义:首先将值7添加到默认空集中,得到{7},然后将值6添加到一组{4,5}中,得到{4,5,6 }。

但是随后发生了一件奇怪的事情:将值2添加到默认的空集而不是添加到{7}的集。 为什么?  可选参数s的默认值仅被评估一次-仅在第一次调用s期间将被初始化为空集。 由于s在调用f(7)之后是可变的,因此就地进行了修改。  第二个调用f(6,{4,5})不会影响默认参数-提供的集合{4,5}将其遮蔽,换句话说,{4,5}是一个不同的变量。  第三次调用f(2)使用的是与第一次调用相同的s变量,但是s未作为空集重新初始化-使用了其先前的值{7}。

这就是为什么您不应该使用可变的默认参数的原因。 在这种情况下,应按以下方式修改功能:

def f(x, s=None):     if s is None:         s = set()     s.add(x)     print(s)

问题3的解释

def f():     l = [1]     def inner(x):         l.append(x)         return l     return inner def g():     y = 1     def inner(x):         y += x         return y     return inner >>ff_inner = f() >>print(f_inner(2)) [1, 2] >>gg_inner = g() >>print(g_inner(2)) UnboundLocalError: local variable ‘y’ referenced before assignment

在这个问题中,我们处理闭包-内部函数记住定义时它们的封闭名称空间的外观。 或至少应该如此-第二个功能保持扑克面孔,就像从未听说过其外部作用域一样。

这是为什么? 当我们执行l.append(x)时,在定义时创建的可变对象被修改,但是变量l仍然指向内存中的相同地址。 但是,尝试更改第二个函数y + =  x中的不可变变量会导致y指向内存中与以前不同的地址-原始y将不再被记住,因此导致UnboundLocalError。

到此,相信大家对“3个看似简单的Python问题是什么”有了更深的了解,不妨来实际操作一番吧!这里是网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

内容来源网络,如有侵权,联系删除,本文地址:https://www.230890.com/zhan/64474.html

(0)

相关推荐

  • 如何停止weblogicserver应用(weblogicserver是什么)

    技术新部署的WebLogicServer无法访问怎么解决本篇内容主要讲解“新部署的WebLogicServer无法访问怎么解决”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“新

    攻略 2021年12月21日
  • 如何理解JavaScript预解析及对象

    技术如何理解JavaScript预解析及对象本篇文章为大家展示了如何理解JavaScript预解析及对象,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。一、预解析1、变量预解析和函

    攻略 2021年11月9日
  • 前端开发之JQuery入门基础操作

    技术前端开发之JQuery入门基础操作 前端开发之JQuery入门基础操作下载JQuery
    目前jQuery有三个大版本:
    1.x:兼容ie678,使用最为广泛的,官方只做BUG维护,功能不再新增。因此

    礼包 2021年11月1日
  • 助学贷款提前还款,国家助学贷款可以提前还款吗

    技术助学贷款提前还款,国家助学贷款可以提前还款吗国家助学贷款经办银行应允许有条件的借款学生提前偿还贷款,借款学生可通过手机银行、网上银行完成提前偿还贷款操作,也可通过经办银行申请办理助学贷款提前还款。对提前偿还的贷款部分

    生活 2021年10月21日
  • 圣诞节送女朋友什么礼物好,圣诞节送女朋友什么礼物好

    技术圣诞节送女朋友什么礼物好,圣诞节送女朋友什么礼物好很多朋友可能会觉得送一些时尚、劲爆的礼物会比较好,但其实流行因素在每个人心中的定位都是不一样的,小编认为,送最适宜对方的礼物就是最好的礼物。▲ 如何包装礼物,礼物包装

    生活 2021年10月24日
  • 老公英文怎么写简称,NBA各球队的英文和简称怎么写

    技术老公英文怎么写简称,NBA各球队的英文和简称怎么写大 西 洋 赛 区Boston Celtics波士顿凯尔特人
    New Jersey Nets
    新泽西网
    New York Knicks
    纽约尼克斯
    Philadelp

    生活 2021年10月23日