广告
返回顶部
首页 > 资讯 > 后端开发 > Python >python 经典五悉
  • 370
分享到

python 经典五悉

经典python 2023-01-31 02:01:58 370人浏览 八月长安

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

摘要

问题一:以下的代码的输出将是什么? 说出你的答案并解释。class Parent(object):     x = 1 class Child1(Parent):     pass class Child2(Parent):     pas

问题一:以下的代码的输出将是什么? 说出你的答案并解释。


class Parent(object):
    x = 1
class Child1(Parent):
    pass
class Child2(Parent):
    pass
    
print Parent.x, Child1.x, Child2.x
Child1.x = 2
print Parent.x, Child1.x, Child2.x
Parent.x = 3
print Parent.x, Child1.x, Child2.x

以上代码的输出是:

1 1 1
1 2 1
3 2 3

python 中,类变量在内部是作为字典处理的。如果一个变量的名字没有在当前类的字典中发现,将搜索祖先类(比如父类)直到被引用的变量名被找到(如果这个被引用的变量名既没有在自己所在的类又没有在祖先类中找到,会引发一个AttributeError 异常 )


在父类中设置 x = 1 会使得类变量 X 在引用该类和其任何子类中的值为 1。如果任何它的子类重写了该值(例如,我们执行语句 Child1.x = 2),然后,该值仅仅在子类中被改变。


如果该值在父类中被改变(例如,我们执行语句 Parent.x = 3),这个改变会影响到任何未重写该值的子类当中的值(在这个示例中被影响的子类是 Child2



问题二:以下的代码的输出将是什么? 说出你的答案并解释?

def div1(x,y):
    print("%s/%s = %s" % (x, y, x/y))
    
def div2(x,y):
    print("%s//%s = %s" % (x, y, x//y))

div1(5,2)
div1(5.,2)
div2(5,2)
div2(5.,2.)


这个答案实际依赖于你使用的是 Python 2 还是 Python 3。

在 Python 3 中,期望的输出是:

5/2 = 2.5
5.0/2 = 2.5
5//2 = 2
5.0//2.0 = 2.0

在 Python 2 中,尽管如此,以上代码的输出将是:

5/2 = 2
5.0/2 = 2.5
5//2 = 2
5.0//2.0 = 2.0

默认,如果两个操作数都是整数,Python 2 自动执行整型计算。结果,5/2 值为 2,然而 5./2 值为 ```2.5``。

注意,尽管如此,你可以在 Python 2 中重载这一行为(比如达到你想在 Python 3 中的同样结果),通过添加以下导入:

from __future__ import division

也需要注意的是“双划线”(//)操作符将一直执行整除,而不管操作数的类型,这就是为什么 5.0//2.0 值为 2.0


注: 在 Python 3 中,/ 操作符是做浮点除法,而 // 是做整除(即商没有余数,比如 10 // 3 其结果就为 3,余数会被截除掉,而 (-7) // 3 的结果却是 -3。这个算法与其它很多编程语言不一样,需要注意,它们的整除运算会向0的方向取值。而在 Python 2 中,/ 就是整除,即和 Python 3 中的 // 操作符一样,)



问题三:以下代码将输出什么?

list = ['a', 'b', 'c', 'd', 'e']

print list[10:]

答案

以上代码将输出 [],并且不会导致一个 IndexError

正如人们所期望的,试图访问一个超过列表索引值的成员将导致 IndexError(比如访问以上列表的 list[10])。尽管如此,试图访问一个列表的以超出列表成员数作为开始索引的切片将不会导致 IndexError,并且将仅仅返回一个空列表。

一个讨厌的小问题是它会导致出现 bug ,并且这个问题是难以追踪的,因为它在运行时不会引发错误。

问题四:以下的代码的输出将是什么? 说出你的答案并解释?

def multipliers():

    return [lambda x : i * x for i in range(4)]

    print [m(2) for m in multipliers()]

答案

以上代码的输出是 [6, 6, 6, 6] (而不是 [0, 2, 4, 6])。

这个的原因是 Python 的闭包的后期绑定导致的 late binding,这意味着在闭包中的变量是在内部函数被调用的时候被查找。所以结果是,当任何 multipliers() 返回的函数被调用,在那时,i 的值是在它被调用时的周围作用域中查找,到那时,无论哪个返回的函数被调用,for 循环都已经完成了,i 最后的值是 3,因此,每个返回的函数 multiplies 的值都是 3。因此一个等于 2 的值被传递进以上代码,它们将返回一个值 6 (比如: 3 x 2)。

(顺便说下,正如在 The Hitchhiker’s Guide to Python 中指出的,这里有一点普遍的误解,是关于 lambda 表达式的一些东西。一个lambda 表达式创建的函数不是特殊的,和使用一个普通的 def 创建的函数展示的表现是一样的。)

这里有两种方法解决这个问题。

最普遍的解决方案是创建一个闭包,通过使用默认参数立即绑定它的参数。例如:

def multipliers():
    return [lambda x, i=i : i * x for i in range(4)]

另外一个选择是,你可以使用 functools.partial 函数:

from functools import partial
from operator import mul

def multipliers():

    return [partial(mul, i) for i in range(4)]



问题五:以下的代码的输出将是什么? 说出你的答案并解释?

def extendList(val, list=[]):
    list.append(val)
    return list

list1 = extendList(10)
list2 = extendList(123,[])
list3 = extendList('a')

print "list1 = %s" % list1
print "list2 = %s" % list2
print "list3 = %s" % list3

以上代码的输出为:

list1 = [10, 'a']
list2 = [123]
list3 = [10, 'a']

许多人会错误的认为 list1 应该等于 [10] 以及 list3 应该等于 ['a']。认为 list 的参数会在 extendList 每次被调用的时候会被设置成它的默认值 []

尽管如此,实际发生的事情是,新的默认列表仅仅只在函数被定义时创建一次。随后当 extendList 没有被指定的列表参数调用的时候,其使用的是同一个列表。这就是为什么当函数被定义的时候,表达式是用默认参数被计算,而不是它被调用的时候。

因此,list1 和 list3 是操作的相同的列表。而 ````list2是操作的它创建的独立的列表(通过传递它自己的空列表作为list``` 参数的值)。

extendList 函数的定义可以做如下修改,但,当没有新的 list 参数被指定的时候,会总是开始一个新列表,这更加可能是一直期望的行为。

def extendList(val, list=None):
    if list is None:
        list = []
    list.append(val)
    return list

使用这个改进的实现,输出将是:

list1 = [10]
list2 = [123]
list3 = ['a']





本文出处:https://segmentfault.com/a/1190000000618513

--结束END--

本文标题: python 经典五悉

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

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

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

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

下载Word文档
猜你喜欢
  • python 经典五悉
    问题一:以下的代码的输出将是什么 说出你的答案并解释。class Parent(object):     x = 1 class Child1(Parent):     pass class Child2(Parent):     pass...
    99+
    2023-01-31
    经典 python
  • Python Pygame实战之五款童年经典游戏合集
    目录一、推箱子1)代码展示2)效果展示二、滑雪1)代码展示2)效果展示​三、声控把音符1)代码展示2)效果展示四、保卫萝卜1)代码展示2)效果展示​五、飞机大战1)代码展示2)效果展...
    99+
    2022-11-10
  • Java+Swing实现经典五子棋游戏
    目录前言主要需求主要设计功能截图代码实现总结前言 五子棋是世界智力运动会竞技项目之一,是一种两人对弈的纯策略型棋类游戏,是世界智力运动会竞技项目之一,通常双方分别使用黑白两色的棋子,...
    99+
    2022-11-13
  • Python经典面试题
    #1.字符串最后一个单词的长度 题目描述:计算字符串最后一个单词的长度,单词以空格隔开。 输入描述: 一行字符串,非空,长度小于5000。输出描述: 整数N,最后一个单词的长度。 示例1:输入:hello world输出:5参考代码一:...
    99+
    2023-01-31
    面试题 经典 Python
  • python入门经典.pdf
    链接:https://pan.baidu.com/s/1KwslINNbBHA0ADul2Np0Fw密码:z4n9 ...
    99+
    2023-01-31
    入门 经典 python
  • Python练手经典100例
    本博文转载自:http://blog.csdn.net/dajiangtai007/article/details/65632987 100个Python练手小程序,学习python的很好的资料,覆盖了python中的每一部分...
    99+
    2023-01-31
    经典 Python
  • python经典书记必读:Python编
    所属网站分类: 资源下载 > python电子书 作者:熊猫烧香 链接:http://www.pythonheidong.com/blog/article/69/ 来源:python黑洞网,专注python资源,python...
    99+
    2023-01-31
    书记 经典 python
  • python经典书籍推荐:Python核
    作者:熊猫烧香 链接:www.pythonheidong.com/blog/article/27/ 来源:python黑洞网   对《Python核心编程》的褒奖 “ The long-awaited second edition of ...
    99+
    2023-01-31
    书籍 经典 python
  • python经典书籍:Python编程实
    Python编程实战主要关注了四个方面 即:优雅编码设计模式、通过并发和编译后的Python(Cython)使处理速度更快、高层联网和图像。书中展示了在Python中已经过验证有用的设计模式,用专家级的代码阐释了这些设计模式,并解释了...
    99+
    2023-01-31
    书籍 经典 python
  • Python入门经典案例一
    # 有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少? 1 sum = 0 2 values = range(1, 5) 3 for i in values: 4 for j in values: 5 ...
    99+
    2023-01-30
    入门 案例 经典
  • 49个python经典电子书
    49个python经典电子书本文转自:http://blog.sina.com.cn/s/blog_5bce66f00102vgqv.html Python 语法简捷而清晰,具有丰富和强大的类库。它常被昵称为胶水语言,它能够很轻松的把用其他...
    99+
    2023-01-31
    电子书 经典 python
  • 100道python经典练习题
    链接:https://pan.baidu.com/s/1K0iuZKJukLoGQ8OBy7xq1Q 提取码:2s6q 链接长期有效,如有疑问,欢迎评论区交流。 ...
    99+
    2023-01-31
    练习题 经典 python
  • Python入门教程(十五)Python的字典
    目录字典(Dictionary)访问项目更改值遍历字典检查键是否存在字典长度删除项目复制字典嵌套字典dict() 构造函数字典方法字典(Dictionary) 字典是一个无序、可变和...
    99+
    2023-05-16
    Python Python字典
  • 五个经典链表OJ题带你进阶C++链表篇
    目录反转单链表返回链表中间节点的位置合并两个有序链表判断链表中是否有环判断环形链表进入的节点反转单链表 题目1:给你单链表的头节点 head ,请你反转链表,并返...
    99+
    2022-11-13
  • 用python爬取猫眼top100电影,我发现经典永远是经典
    前言想必大家在无聊的时候,都想找一部口碑的好电影,而自己又没看过的,这个其实可以参考猫眼top100的上排名,因为排名是靠评分升上去,想排名第一的《霸王别姬》,“哥哥”在里面的出色表演,让人惊叹下面来看看实现的过程...
    99+
    2023-06-02
  • 总结10个Python经典案例
    本篇内容主要讲解“总结10个Python经典案例”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“总结10个Python经典案例”吧!1.NLP自然语言分析情感分析情感分析是各个领域中最流行的Pyt...
    99+
    2023-06-15
  • Python 经典算法100及解析
    1:找出字符串s="aaabbbccceeefff111144444"中,字符出现次数最多的字符 (1)考虑去重,首先将字符串进行过滤去重,这样在根据这些字符进行循环查询时,将会减少循环次数,提升效率。但是本人写的代码较为臃肿,有更好的希望...
    99+
    2023-01-31
    算法 经典 Python
  • python游戏库pygame经典教程
    目录 一.Pygame程序基本搭建过程         1.初始化化程序         2.创建Surface对象         3.事件监听         4.游戏循环  二.Pygame Display显示模块详解        ...
    99+
    2023-08-31
    python pygame 游戏
  • Python基本语法经典教程
    本文讲述了Python基本语法。分享给大家供大家参考,具体如下: 概述: 这里主要讲述以下内容: ① 缩进 ② 流程控制语句 ③ 表达式 ④ 函数 ⑤ 对象的方法 ⑥ 类型 ⑦ 数学运算 1. 缩进 Pyt...
    99+
    2022-06-04
    语法 教程 经典
  • Python 编写几个经典例子
    #九九乘法表 for i in range(1, 10): for j in range(1, i+1): print("%d*%d=%d\t" % (j, i, i*j), end="") ...
    99+
    2023-01-31
    几个 例子 经典
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作