广告
返回顶部
首页 > 资讯 > 后端开发 > Python >3个看似简单的Python问题是什么
  • 248
分享到

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

2023-06-16 11:06:10 248人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

本篇内容主要讲解“3个看似简单的python问题是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“3个看似简单的Python问题是什么”吧!问题1假设我们有几个变量:x = 

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

问题1

假设我们有几个变量:

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

l和s的打印结果是什么?

跳到解决方案

问题2

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

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

如果您决定,将会发生什么:

>>f(7)  >>f(6, {4, 5})  >>f(2)  ?

跳到解决方案

问题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)) >>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))  UnboundLocalError: local variable 'y' referenced before assignment

为什么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问题是什么”有了更深的了解,不妨来实际操作一番吧!这里是编程网网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

--结束END--

本文标题: 3个看似简单的Python问题是什么

本文链接: https://www.lsjlt.com/news/283388.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • 3个看似简单的Python问题是什么
    本篇内容主要讲解“3个看似简单的Python问题是什么”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“3个看似简单的Python问题是什么”吧!问题1假设我们有几个变量:x = ...
    99+
    2023-06-16
  • 优化MySQL的3个简单小调整分别是什么
    本篇文章为大家展示了优化MySQL的3个简单小调整分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如果你不改变 MySQL 的缺省配置,你的服务器的性能就像...
    99+
    2022-10-19
  • 五个帮你解决系统性能问题的Linux简单命令是什么
    这篇文章将为大家详细讲解有关五个帮你解决系统性能问题的Linux简单命令是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。事实上,利用一些简单的Linux命令,可以发现许多管理主机的细节问...
    99+
    2023-06-13
  • 7个简单但棘手的JavaScript面试问题是怎样
    本篇文章为大家展示了7个简单但棘手的JavaScript面试问题是怎样,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。如果您符合高级开发人员的资格,其工作涉及Java...
    99+
    2022-10-19
  • Python的16个高频面试问题是什么
    本篇内容介绍了“Python的16个高频面试问题是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!(一)Python 是如何进行内存管理的...
    99+
    2023-06-29
  • Redis的八个经典问题是什么
    本篇内容介绍了“Redis的八个经典问题是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!1、为什么使用...
    99+
    2022-10-19
  • python简单数值运算的方法是什么
    Python中进行简单数值运算的方法包括使用算术运算符、使用内置数学函数和使用第三方数学库。1. 使用算术运算符:- 加法:`+`-...
    99+
    2023-10-10
    python
  • python简单程序的编写方法是什么
    这篇文章主要介绍“python简单程序的编写方法是什么”,在日常操作中,相信很多人在python简单程序的编写方法是什么问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”python简单程序的编写方法是什么”的疑...
    99+
    2023-06-17
  • python lambda表达式的简单用法是什么
    python lambda表达式的简单用法是什么,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。python lambda表达式简单用法习条件运算时,对于简单的 if els...
    99+
    2023-06-04
  • 网站常见的四个问题是什么
    这篇文章主要介绍了网站常见的四个问题是什么,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。  一、网站定位  1、网站设计定位站在了自己角度而非游览者(潜在客户)角度,如下图导...
    99+
    2023-06-10
  • 使用Python加速数据分析的10个简单技巧分别是什么
    这期内容当中小编将会给大家带来有关使用Python加速数据分析的10个简单技巧分别是什么,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。提示和技巧,尤其是在编程领域,可能是非常有用的。有时,一个小技巧可以节...
    99+
    2023-06-16
  • Golang三个常见的编程问题是什么
    这篇文章主要讲解了“Golang三个常见的编程问题是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“Golang三个常见的编程问题是什么”吧!问题1:我需要维护一组"物品&quo...
    99+
    2023-06-16
  • Python列表最常见的问题是什么
    Python列表最常见的问题是什么,相信很多没有经验的人对此束手无策,为此本文总结了问题出现的原因和解决方法,通过这篇文章希望你能解决这个问题。列表是Python中使用最多的一种数据结果,如何高效操作列表是提高代码运行效率的关键,本文总结了...
    99+
    2023-06-02
  • Python中简单易用的并行加速技巧是什么
    本文小编为大家详细介绍“Python中简单易用的并行加速技巧是什么”,内容详细,步骤清晰,细节处理妥当,希望这篇“Python中简单易用的并行加速技巧是什么”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。使用job...
    99+
    2023-07-06
  • 解决Kubernetes Pod故障的5个简单技巧分别是什么
    本篇文章为大家展示了解决Kubernetes Pod故障的5个简单技巧分别是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。在很多情况下,你可能会发现Kubernetes中的应用程序没有正确地部署...
    99+
    2023-06-16
  • Javascript基础中的十个重要问题分别是什么
    Javascript基础中的十个重要问题分别是什么,很多新手对此不是很清楚,为了帮助大家解决这个难题,下面小编将为大家详细讲解,有这方面需求的人可以来学习下,希望你能有所收获。1.什么是Javascript?Javascript是一种用于W...
    99+
    2023-06-22
  • 学习用Python编程时要避免的3个错误分别是什么
    这篇文章将为大家详细讲解有关学习用Python编程时要避免的3个错误分别是什么,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。这些错误会造成很麻烦的问题,需要数小时才能解决。当你做错事时,承认...
    99+
    2023-06-17
  • 为什么 Linux 环境下使用 NumPy 是 Python 容器中的一个重要问题?
    Python 是一种高级编程语言,它在科学计算、数据分析和机器学习等领域都有着广泛的应用。而 NumPy 则是 Python 中一个重要的科学计算库,它提供了高效的多维数组操作和数学函数,是 Python 生态系统中重要的一部分。尤其是在...
    99+
    2023-10-04
    容器 numy linux
  • 优化SQL SELECT语句性能的6个简单技巧分别是什么
    本篇文章给大家分享的是有关优化SQL SELECT语句性能的6个简单技巧分别是什么,小编觉得挺实用的,因此分享给大家学习,希望大家阅读完这篇文章后可以有所收获,话不多说,跟着小编一起来看看吧。SELECT语...
    99+
    2022-10-19
  • 每个web程序员必须解决的5个编程问题是什么
    本篇内容介绍了“每个web程序员必须解决的5个编程问题是什么”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!每次我发布软件工程师的岗位工作要求...
    99+
    2023-06-17
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作