首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

27 个问题,告诉Python为什么这么设计

为什么Python没有switch或case语句? 难道不能在解释器中模拟线程,而非得依赖特定操作系统线程实现吗? 为什么lambda表达式不能包含语句?...如果在绑定到字符串名称上允许使用这些方法,则没有逻辑上理由使其文字上不可用。 第二个异议通常是这样:“实际上是告诉序列使用字符串常量将其成员连接在一起”。遗憾是并非如此。...如果没有这样前缀,如果值来自不受信任源,攻击者将能够调用对象任何方法。 难道不能在解释器中模拟线程,而非得依赖特定操作系统线程实现吗?...与其他语言中添加功能lambda表单不同,Python lambdas只是一种速记符号,如果您懒得定义函数的话。 函数已经是Python第一对象,可以本地范围内声明。...这没有,因为作为可变对象列表可以包含对自身引用,然后复制代码将进入无限循环。 允许列表作为键,但告诉用户不要修改它们。当你意外忘记或修改列表时,这将产生程序中难以跟踪错误。

6.6K11

27 个问题,告诉Python为什么这么设计?

函数体中赋值那些变量(并且没有明确声明为全局)赋值,就必须以某种方式告诉解释器一个赋值是为了分配一个实例变量而不是一个局部变量,它最好是通过语法实现(出于效率原因)。...如果在绑定到字符串名称上允许使用这些方法,则没有逻辑上理由使其文字上不可用。 第二个异议通常是这样:“实际上是告诉序列使用字符串常量将其成员连接在一起”。遗憾是并非如此。...如果没有这样前缀,如果值来自不受信任源,攻击者将能够调用对象任何方法。 难道不能在解释器中模拟线程,而非得依赖特定操作系统线程实现吗?...与其他语言中添加功能lambda表单不同,Python lambdas只是一种速记符号,如果您懒得定义函数的话。 函数已经是Python第一对象,可以本地范围内声明。...这没有,因为作为可变对象列表可以包含对自身引用,然后复制代码将进入无限循环。 允许列表作为键,但告诉用户不要修改它们。当你意外忘记或修改列表时,这将产生程序中难以跟踪错误。

3.1K20
您找到你想要的搜索结果了吗?
是的
没有找到

Python官方二十七问,你知道个啥?

函数体中赋值那些变量(并且没有明确声明为全局)赋值,就必须以某种方式告诉解释器一个赋值是为了分配一个实例变量而不是一个局部变量,它最好是通过语法实现(出于效率原因)。...如果在绑定到字符串名称上允许使用这些方法,则没有逻辑上理由使其文字上不可用。 第二个异议通常是这样:“实际上是告诉序列使用字符串常量将其成员连接在一起”。遗憾是并非如此。...如果没有这样前缀,如果值来自不受信任源,攻击者将能够调用对象任何方法。 11. 难道不能在解释器中模拟线程,而非得依赖特定操作系统线程实现吗?...与其他语言中添加功能 lambda 表单不同,Python lambdas 只是一种速记符号,如果您懒得定义函数的话。 函数已经是 Python第一对象,可以本地范围内声明。...这没有,因为作为可变对象列表可以包含对自身引用,然后复制代码将进入无限循环。 允许列表作为键,但告诉用户不要修改它们。当你意外忘记或修改列表时,这将产生程序中难以跟踪错误。

2.5K20

干货 | 27 个问题,告诉Python 为什么如此设计?

函数体中赋值那些变量(并且没有明确声明为全局)赋值,就必须以某种方式告诉解释器一个赋值是为了分配一个实例变量而不是一个局部变量,它最好是通过语法实现(出于效率原因)。...如果在绑定到字符串名称上允许使用这些方法,则没有逻辑上理由使其文字上不可用。 第二个异议通常是这样:“实际上是告诉序列使用字符串常量将其成员连接在一起”。遗憾是并非如此。...如果没有这样前缀,如果值来自不受信任源,攻击者将能够调用对象任何方法。 11. 难道不能在解释器中模拟线程,而非得依赖特定操作系统线程实现吗?...与其他语言中添加功能 lambda 表单不同,Python lambdas 只是一种速记符号,如果您懒得定义函数的话。 函数已经是 Python第一对象,可以本地范围内声明。...这没有,因为作为可变对象列表可以包含对自身引用,然后复制代码将进入无限循环。 允许列表作为键,但告诉用户不要修改它们。当你意外忘记或修改列表时,这将产生程序中难以跟踪错误。

2.7K10

Python 核心设计理念27个问题及解答

函数体中赋值那些变量(并且没有明确声明为全局)赋值,就必须以某种方式告诉解释器一个赋值是为了分配一个实例变量而不是一个局部变量,它最好是通过语法实现(出于效率原因)。...如果在绑定到字符串名称上允许使用这些方法,则没有逻辑上理由使其文字上不可用。 第二个异议通常是这样:“实际上是告诉序列使用字符串常量将其成员连接在一起”。遗憾是并非如此。...如果没有这样前缀,如果值来自不受信任源,攻击者将能够调用对象任何方法。 11. 难道不能在解释器中模拟线程,而非得依赖特定操作系统线程实现吗?...与其他语言中添加功能 lambda 表单不同,Python lambdas 只是一种速记符号,如果您懒得定义函数的话。 函数已经是 Python第一对象,可以本地范围内声明。...这没有,因为作为可变对象列表可以包含对自身引用,然后复制代码将进入无限循环。 允许列表作为键,但告诉用户不要修改它们。当你意外忘记或修改列表时,这将产生程序中难以跟踪错误。

3.3K21

干货 | 27 个问题,告诉Python 为什么如此设计?

函数体中赋值那些变量(并且没有明确声明为全局)赋值,就必须以某种方式告诉解释器一个赋值是为了分配一个实例变量而不是一个局部变量,它最好是通过语法实现(出于效率原因)。...如果在绑定到字符串名称上允许使用这些方法,则没有逻辑上理由使其文字上不可用。 第二个异议通常是这样:“实际上是告诉序列使用字符串常量将其成员连接在一起”。遗憾是并非如此。...如果没有这样前缀,如果值来自不受信任源,攻击者将能够调用对象任何方法。 11. 难道不能在解释器中模拟线程,而非得依赖特定操作系统线程实现吗?...与其他语言中添加功能 lambda 表单不同,Python lambdas 只是一种速记符号,如果您懒得定义函数的话。 函数已经是 Python第一对象,可以本地范围内声明。...这没有,因为作为可变对象列表可以包含对自身引用,然后复制代码将进入无限循环。 允许列表作为键,但告诉用户不要修改它们。当你意外忘记或修改列表时,这将产生程序中难以跟踪错误。

2.6K20

来自Kenneth Reitz大神建议:避免不必要面向对象编程

Kenneth Reitz大神建议 Python 有时被描述为一种面向对象编程语言。这可能对大家有些误导,需要加以澄清。 Python 中,所有东西都视为一个对象,并且可以按对象处理。...按这种理解, Python一种面向对象语言。 但是,与 Java 不同, Python没有将面向对象编程作为主要编程范例来实施。...Python 项目不采用面向对象方式是完全可行,即不使用或很少使用定义、继承或特定于面向对象编程任何其他机制。...此外,从 模块 部分可以看出, Python 处理模块和名称空间方式为开发人员提供了一种自然方法来确保抽象层封装和分离,这两者都是使用面向对象最常见原因。...总之,针对某些体系结构,由于没有上下文或副作用,纯函数是比对象更有效构建块 。

71540

len(x) 击败 x.len(),从内置函数Python 设计思想

Python 内置函数不与特定绑定,它们是一级对象。而 Java 函数”则无法脱离而存在,它们只是附属品。 从直观角度来看,Python 表达似乎是更优。...我们可以简单地把公式 x*(a + b) 重写成 x*a + x*b ,但同样事,以原生面向对象方式实现,就比较笨拙。 当读到 len(x) 时,就 知道 这是求某对象长度。...它告诉了两点:返回值是一个整数,参数是某种容器。但当读到 x.len() 时,必须事先知道某种容器 x,它实现了一个接口,或者继承了一个拥有标准 len() 方法。...不同类型数(整数、浮点数、有理数、无理数...)共用同一个操作符,不必为每类数据实现一种求分数操作。 优雅易懂是 Python 奉行设计哲学 ,len() 函数前缀表达方式是最好体现。...所以,想说,len(x) 击败 x.len(),这还体现了 Python 对世界本质洞察 。 求某个对象长度,这种操作独立于对象之外而存在,并不是该对象内部所有的一种属性或功能。

50420

Java开发者Python快速进修指南:面向对象

当我深入学习了面向对象编程之后,首先感受到是代码编写自由度大幅提升。不同于Java中严格结构和约束,Python面向对象实现中展现出更加灵活和自由特性。...它使用了一些独特关键字,如self和cls,这些不仅增强了代码可读性,还提供了对和实例明确引用。正如Java,Python也依赖于对象概念,允许我们通过定义来创建和操作对象。...对象继承 Python继承是一种用于创建新机制,新可以继承一个或多个父特性。面向对象编程中,和Java一样继承提供了代码复用强大工具。...这时,pass 就像是一个灵巧小助手,默默地站在那里,告诉Python解释器:“嘿,在这里,但你可以暂时忽略。”...关于封装功能,Python与Java大致相同,但写法略有不同,因为Python没有修饰符。而对于反射来说,认为它比Java简单得多,不需要频繁地获取方法和属性,而是有专门方法来实现。

33640

每个Python程序员都应该知道10个缩写

学习Python时,摸会逐渐熟悉它数据结构,控制流,函数和其他基本知识。有趣Python各种首字母缩写词,我们时常会遇到。本文将回顾十个这样缩写。...这个想法非常直观-我们用特定对象包装数据。更具体地说,对象可以保存数据(例如,属性)并且可以操作数据(例如,方法)。例如,如果我们开发一个赛车游戏。...我们可以构建汽车对象,每个对象都可以具有特定属性,例如颜色,最大速度和重量。此外,这些对象还可以进行制动和加速等操作。这些数据逻辑组织以对象(汽车)为中心。 让我们看一下Python一个示例。...与上面讨论LEGB规则关注是解决变量不同,MRO关注对象以及对象方法调用或特定属性获取如何解决。MRO主要是多继承上下文中讨论-从多个(即超)和/或多层继承继承(即子类)。...因为Python一种动态编程语言,所以在运行时可以对现有的实例对象或模块进行实现和修改。因此假定特殊属性或功能可用情况下编写代码。

80710

Python教程第6章 | Python面向对象

fun1 是 fun2 是 fun3 三、方法 1、方法如何调用类属性 通过上面我们已经会定义了,那么这里讲一下同一个里,方法如何调用类属性。...看着这个结构,提一个问题,如何修改类属性,也就是里面的变量? 从结构来看,我们可以猜测,从方法来修改,也就是从内部来修改和增加类属性。...2、从外部增加和修改类属性 我们刚刚看了通过方法来修改属性,这时我们看下从外部如何修改和增加类属性。... 多继承有一点需要注意:若是父中有相同方法名,而在子类使用时未指定,python 圆括号中父顺序,从左至右搜索 , 即方法子类中未找到时,从左到右查找父中是否包含方法...那么 Python 中有没有属性访问控制呢? 一般情况下,我们会使用 __private_attrs 两个下划线开头,声明该属性为私有,不能在地外部被使用或直接访问。

17810

python核心编程(psyco)

基本上,其全部内容就是告诉 Psyco 模块哪个函数/方法要“专门化”。任何 Python 函数本身代码都不需进行更改。 有几种方法可以指定 Psyco 应该做什么。...第二行( Python 2.2 及以上版本中)告诉 Psyco 对方法执行相同操作。...主要是要明白 Psyco 对于处理多次循环块是很有用,而且它知道如何优化涉及整数和浮点数操作。对于非循环函数和其它类型对象操作,Psyco 多半只会增加其分析和内部编译开销。...使用了一段时间后,建立了有关 Psyco 用法一些详细信息。对于这种只有少量函数应用程序,使用即时绑定还是目标绑定没有太大区别。...,尤其是程序中有大量循环操作时。

96610

分享 10 个高频 Python 面试题

它可以帮助我们很多场景中避免嵌套循环。 三、 方法和静态方法 面试官: Python 中,方法和静态方法有什么区别? 回答: 方法是 Python 第一个参数是本身方法。...方法不仅可以由实例调用,也可以由直接调用。 静态方法是 Python 没有或实例参数方法。 因为静态方法不包含有关特定或实例参数。...五、抽象 面试官: 面向对象编程中,有一个概念叫做抽象Python 也支持抽象吗? 回答: 支持。Python 标准库有个模块 abc,它为抽象提供功能。...对象分为可变对象和不可变对象,不可变对象就是不可修改对象,例如:数字、字符串、元组,不可变对象自增操作会新创建一个对象。...回答: Python 使用一种称为引用计数方法来决定何时需要在内存中收集对象。 简单来说,Python 会计算每个对象引用计数,当一个对象没有引用时,会自动收集。

66610

R语言好与坏丨讲座中字视频丨附讲座PDF

R是一种用于分析数据领域特定语言。为什么数据分析需要自己领域特定语言(DSL) ? R语言擅长些什么,不擅长什么?开发人员该如何利用R语言优势并减轻其弱点?...各自国家公映版本中,为对方语言部分配音。所以我说不好了,你们就当我在说意大利语然后用英语为配音就好。 接下来是一些关于我背景介绍,从哪儿来,一些观点,如何开始使用R语言。...对于某些Python编程,这么说是对。但用Python做统计运算,就没有自带电池了。...当我文档中看到0或1,并不意味没有或有一个变速器,它表明所看到是两个类别。 绘图程序中,想要绘制重量每加仑英里数上图。数据集中mtcars,想要用颜色区分数据,然后用点来表示。...就像哈利波特中一句台词,当中哈利说"我会呆在房间里,保持安静,假装不存在"。 因此如果文本中,看到空值函数会忽略它,好像它不存在。但如果你看到缺失值,这取决于你告诉如何做。

1.7K90

【干货】27种主流编程语言分类及优劣

作为这个世界上最流行编程语言之一合作设计者,经常遇到一种令人非常沮丧行为( Python 社区和其它领域中都存在)就是社区中有影响力的人尝试去在其它开源社区中灌输对于”缺失“恐惧感,并以此驱动别人对本社区做出贡献...Python原生设计上就可以直接使用面向对象特性,而不需要一上来先学习如何编写自己。不是每种语言都才有这样方式 – 对于本节列出这些语言,学习面向对象设计思想是使用这些语言前提。...(同时,Eiffel 也告诉对于大多数软件开发,并没有以“正确可信”为设计目标,这是因为正确可信软件确实无法妥善处理不确定情况。...动态元程序设计: Hy,Ruby 像 C、C++、C#、Java 这样编程语言给 Python 带来一个有点让人不安特性是“代码即数据”:类似函数都是运行时对象,可以被其他对象操作。...(还没找到什么编程语言有助于了解 Python (metaclass),如果有人有好建议,可以评论里告诉

5K100

Python和其它27种编程语言

经常遇到一种令人非常沮丧行为( Python 社区和其它领域中都存在)就是社区中有影响力的人尝试去在其它开源社区中灌输对于”缺失“恐惧感,并以此驱动别人对本社区做出贡献(自己偶尔也会做出这样不当行为...Python原生设计上就可以直接使用面向对象特性,而不需要一上来先学习如何编写自己。不是每种语言都才有这样方式 – 对于本节列出这些语言,学习面向对象设计思想是使用这些语言前提。...(同时,Eiffel 也告诉对于大多数软件开发,并没有以“正确可信”为设计目标,这是因为正确可信软件确实无法妥善处理不确定情况。...动态元程序设计: Hy,Ruby 像 C、C++、C#、Java 这样编程语言给 Python 带来一个有点让人不安特性是“代码即数据”:类似函数都是运行时对象,可以被其他对象操作。...(还没找到什么编程语言有助于了解 Python (metaclass),如果有人有好建议,可以评论里告诉

1.7K20

帮你提升 Python 27 种编程语言

经常遇到一种令人非常沮丧行为( Python 社区和其它领域中都存在)就是社区中有影响力的人尝试去在其它开源社区中灌输对于”缺失“恐惧感,并以此驱动别人对本社区做出贡献(自己偶尔也会做出这样不当行为...Python原生设计上就可以直接使用面向对象特性,而不需要一上来先学习如何编写自己。不是每种语言都才有这样方式 – 对于本节列出这些语言,学习面向对象设计思想是使用这些语言前提。...(同时,Eiffel 也告诉对于大多数软件开发,并没有以“正确可信”为设计目标,这是因为正确可信软件确实无法妥善处理不确定情况。...动态元程序设计: Hy,Ruby 像 C、C++、C#、Java 这样编程语言给 Python 带来一个有点让人不安特性是“代码即数据”:类似函数都是运行时对象,可以被其他对象操作。...(还没找到什么编程语言有助于了解 Python (metaclass),如果有人有好建议,可以评论里告诉

91380

len(x) 击败 x.len(),从内置函数Python 设计思想

Python 内置函数不与特定绑定,它们是一级对象。而 Java 函数”则无法脱离而存在,它们只是附属品。 从直观角度来看,Python 表达似乎是更优。...它告诉了两点:返回值是一个整数,参数是某种容器。但当读到 x.len() 时,必须事先知道某种容器 x,它实现了一个接口,或者继承了一个拥有标准 len() 方法。...不同类型数(整数、浮点数、有理数、无理数…)共用同一个操作符,不必为每类数据实现一种求分数操作。 优雅易懂是 Python 奉行设计哲学 ,len() 函数前缀表达方式是最好体现。...所以,想说,len(x) 击败 x.len(),这还体现了 Python 对世界本质洞察 。 求某个对象长度,这种操作独立于对象之外而存在,并不是该对象内部所有的一种属性或功能。...从这个角度理解,我们能够明白,为什么 Python 要设计出内置函数? 内置函数其实是对世界本质一种捕捉。 这些见微知著发现,足够使我们爱上这门语言了。人生苦短,Python

56220

帮你提升 Python 27 种编程语言

经常遇到一种令人非常沮丧行为( Python 社区和其它领域中都存在)就是社区中有影响力的人尝试去在其它开源社区中灌输对于”缺失“恐惧感,并以此驱动别人对本社区做出贡献(自己偶尔也会做出这样不当行为...Python原生设计上就可以直接使用面向对象特性,而不需要一上来先学习如何编写自己。不是每种语言都才有这样方式 – 对于本节列出这些语言,学习面向对象设计思想是使用这些语言前提。...(同时,Eiffel 也告诉对于大多数软件开发,并没有以“正确可信”为设计目标,这是因为正确可信软件确实无法妥善处理不确定情况。...动态元程序设计: Hy,Ruby 像 C、C++、C#、Java 这样编程语言给 Python 带来一个有点让人不安特性是“代码即数据”:类似函数都是运行时对象,可以被其他对象操作。...(还没找到什么编程语言有助于了解 Python (metaclass),如果有人有好建议,可以评论里告诉

1.1K60

len(x) 击败 x.len(),从内置函数Python 设计思想

Python 内置函数不与特定绑定,它们是一级对象。而 Java 函数”则无法脱离而存在,它们只是附属品。 从直观角度来看,Python 表达似乎是更优。...它告诉了两点:返回值是一个整数,参数是某种容器。但当读到 x.len() 时,必须事先知道某种容器 x,它实现了一个接口,或者继承了一个拥有标准 len() 方法。...不同类型数(整数、浮点数、有理数、无理数…)共用同一个操作符,不必为每类数据实现一种求分数操作。 优雅易懂是 Python 奉行设计哲学 ,len() 函数前缀表达方式是最好体现。...所以,想说,len(x) 击败 x.len(),这还体现了 Python 对世界本质洞察 。 求某个对象长度,这种操作独立于对象之外而存在,并不是该对象内部所有的一种属性或功能。...从这个角度理解,我们能够明白,为什么 Python 要设计出内置函数? 内置函数其实是对世界本质一种捕捉。 这些见微知著发现,足够使我们爱上这门语言了。人生苦短,Python

58820
领券