python 覆盖list_【Python妙招】gt;gt;gt;看腻了能不能换成别的啊……当然可以啦:)...

ce8a834e69883a48be971879a9109d57.gif

原文作者:站在两个世界边缘  & 小象

编辑:VL

今天给大家介绍几个Python里(可能没那么广为人知的)小知识,希望能给大家带来帮助,让编程更有乐趣。

1.如何修改解释器提示符

    正常情况下,我们在终端下执行Python 命令是这样的。

>>> for i in range(2):...     print (i)...01

你是否想过 >>> 和 ... 这两个提示符也是可以修改的呢?

sys.ps1 sys.ps2 是指定解释器的主要和辅助提示的字符串。仅在解释器处于交互模式时才定义这些。在这种情况下,它们的初始值是和。如果将非字符串对象分配给任一变量,则每次解释器准备读取新的交互式命令时都会重新评估该变量。这可以用来实现动态提示。’>>> ”… ‘str()

>>> import sys                      >>> sys.ps1                          >>>                                >>> sys.ps2                          ...                                >>>                                 
>>> sys.ps2 =  ................                  >>> sys.ps1 =  Python编程时光>>>        
Python编程时光>>>for i in range(2):     
................    print (i)                    
................                                 0                                   1         

2. 类首字母不一定是大写

在正常情况下,我们所编写的所见到的代码,好像都默许了类名首字母大写,而实例用小写的这一准则。但这并不是强制性的,即使你反过来的也没有关系。

但有一些内置的类,首字母都是小写,而实例都是大写。

比如 bool 是类名,而 True,False 是其实例;
比如 ellipsis 是类名,Ellipsis是实例;
还有 int,string,float,list,tuple,dict 等一系列数据类型都是类名,它们都是小写。

3. 增量赋值的性能更好

诸如 += 和 *= 这些运算符,叫做 增量赋值运算符。

这里使用用 += 举例,以下两种写法,在效果上是等价的。

# 第一种a = 1 ; a += 1
# 第二种a = 1; a = a + 1

+= 其背后使用的魔法方法是 __iadd__,如果没有实现这个方法则会退而求其次,使用 __add__ 。

这两种写法有什么区别呢?

用列表举例 a += b,使用 __iadd__ 的话就像是使用了a.extend(b),如果使用 __add__ 的话,则是 a = a+b,前者是直接在原列表上进行扩展,而后者是先从原列表中取出值,在一个新的列表中进行扩展,然后再将新的列表对象返回给变量,显然后者的消耗要大些。

所以在能使用增量赋值的时候尽量使用它。

4. and 和 or 的取值顺序

and 和 or 是我们再熟悉不过的两个逻辑运算符。而我们通常只用它来做判断,很少用它来取值。

如果一个or表达式中所有值都为真,Python会选择第一个值,而and表达式则会选择第二个。

5. 省略号也是对象

... 这是省略号,在Python中,一切皆对象。它也不例外。

在 Python 中,它叫做 Ellipsis 。

在 Python 3 中你可以直接写…来得到这玩意。

>>> ...
Ellipsis>>> type(...)
<class  ellipsis >

而在 2 中没有…这个语法,只能直接写Ellipsis来获取。

>>> Ellipsis
Ellipsis>>> type(Ellipsis) ellipsis >>>>

它转为布尔值时为真

>>> bool(...)
True

最后,这东西是一个单例。

>>> id(...)4362672336>>> id(...)4362672336

这东西有啥用呢?据说它是Numpy的语法糖,不玩Numpy的人,可以说是没啥用的。

在网上只看到这个 用 ... 代替 pass ,稍微有点用,但又不是必须使用的。

try:1/0except ZeroDivisionError:
    ...

6. 默认参数最好不为可变对象

函数的参数分三种

  • 可变参数

  • 默认参数

  • 关键字参数

这里要说的是传递默认参数时,新手很容易踩雷的一个坑。

先来看一个示例

def func(item, item_list=[]):
    item_list.append(item)
    print(item_list)
func( iphone )
func( xiaomi , item_list=[ oppo , vivo ])
func( huawei )

在这里,你可以暂停一下,思考一下会输出什么?

思考过后,你的答案是否和下面的一致呢

[ iphone ]
[ oppo ,  vivo ,  xiaomi ]
[ iphone ,  huawei ]

如果是,那你可以跳过这部分内容,如果不是,请接着往下看,这里来分析一下。

Python 中的 def 语句在每次执行的时候都初始化一个函数对象,这个函数对象就是我们要调用的函数,可以把它当成一个一般的对象,只不过这个对象拥有一个可执行的方法和部分属性。

对于参数中提供了初始值的参数,由于 Python 中的函数参数传递的是对象,也可以认为是传地址,在第一次初始化 def 的时候,会先生成这个可变对象的内存地址,然后将这个默认参数 item_list 会与这个内存地址绑定。在后面的函数调用中,如果调用方指定了新的默认值,就会将原来的默认值覆盖。如果调用方没有指定新的默认值,那就会使用原来的默认值。

fdc1a2c87d5c7b5a9f0ea1d1f40b45a1.png

07. 访问类中的私有方法

大家都知道,类中可供直接调用的方法,只有公有方法(protected类型的方法也可以,但是不建议)。也就是说,类的私有方法是无法直接调用的。

这里先看一下例子

class Kls():def public(self):
        print( Hello public world! )def __private(self):
        print( Hello private world! )def call_private(self):self.__private()
ins = Kls()# 调用公有方法,没问题
ins.public()# 直接调用私有方法,不行
ins.__private()# 但你可以通过内部公有方法,进行代理
ins.call_private()

既然都是方法,那我们真的没有方法可以直接调用吗?

当然有啦,只是建议你千万不要这样弄,这里只是普及,让你了解一下。

# 调用私有方法,以下两种等价ins._Kls__private()ins.call_private()    

08. 时有时无的切片异常

这是个简单例子

my_list = [1, 2, 3, 4, 5]
print(my_list[5])   

执行一下,和我们预期的一样,会抛出索引异常。

Traceback (most recent call last):File "F:/Python Script/test.py", line 2, in <module>
    print(my_list[5])
IndexError: list index out of range   

但是今天要说的肯定不是这个,而是一个你可能会不知道的冷知识。

来看看,如下这种写法就不会报索引异常,执行my_list[5:],会返回一个新list:[]。

my_list = [1, 2, 3]print(my_list[5:]) 

09. 哪些情况下不需要续行符

在写代码时,为了代码的可读性,代码的排版是尤为重要的。

为了实现高可读性的代码,我们常常使用到的就是续行符 。

>>> a =  talk is cheap,
...      show me the code. >>>
>>> print(a)
talk is cheap,show me the code.

那有些情况下,是不需要写续行符的呢?

经过总结,在这些符号中间的代码换行可以省略掉续行符:[],(),{}

>>> my_list=[1,2,3,
...          4,5,6]>>> my_tuple=(1,2,3,
...           4,5,6)>>> my_dict={"name": "MING",
...          "gender": "male"}

另外还有,在多行文本注释中   ,续行符也是可以不写的。

>>> text =  talk is cheap,
...           show me the code

上面只举了一些简单的例子。

但你要学会举一反三。一样的,在以下这些场景也同样适用

  • 类,和函数的定义。

  • 列表推导式,字典推导式,集合推导式,生成器表达式

10. Py2 也可以使用 print()

我相信应该有不少人,思维定式,觉得只有 Py3 才可以使用 print(),而 Py2 只能使用print   。

今天,小明要为 Py2 正名一次。

在Python 2.6之前,只支持

print "hello"

在Python 2.6和2.7中,可以支持如下三种

print "hello"
print("hello")print ("hello")

在Python3.x中,可以支持如下两种

print("hello")print ("hello")

▼往期精彩回顾▼【Python应用】素质自动修正-thef***为什么要学编程?让她们给你答案……【Python妙招】如何去除Django警告信息

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/512569.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

阿里云IoT Studio升级版新增解决方案引擎 大幅提升方案交付效率

简介&#xff1a; 8月25日&#xff0c;阿里云发布IoT Studio升级版&#xff0c;新增了解决方案引擎&#xff0c;让设备方案商复用之前搭建的解决方案模板进行简单的定制化修改&#xff0c;即可交付。使整个物联网解决方案的交付过程由几个月&#xff0c;缩短到几小时&#xff0…

如何用 Nacos 构建服务网格生态

简介&#xff1a; Nacos 在阿里巴巴起源于 2008 年五彩石项目&#xff08;该项目完成微服务拆分和业务中台建设&#xff09;&#xff0c;成长于十年的阿里双十一峰值考验&#xff0c;这一阶段主要帮助业务解决微服务的扩展性和高可用问题&#xff0c;解决了百万实例扩展性问题&…

华为oj题目c语言,华为OJ机试题目——24点游戏算法

对于这种题用程序实现只能是穷举的思想&#xff0c;而做法各异&#xff0c;如下代码是利用符号的不断变化&#xff0c;利用4个数计算值&#xff0c;默认是4个数字a,b,c,d是按顺序计算的&#xff0c;即默认是加了括号的&#xff0c;即(((a op1 b)op2 c)op3 d)。而4个数字要组合顺…

性能提升一个数量级,大杀器来了!| 文内福利

经过多年的演进&#xff0c;Java语言的功能和性能都在不断地发展和提高&#xff0c;但是冷启动开销较大的问题长期存在&#xff0c;难以从根本上解决。本文先讨论冷启动问题的根本原因&#xff0c;然后介绍一种新近提出的彻底解决Java冷启动问题的技术方案——Java静态编译技术…

快手基于 Flink 构建实时数仓场景化实践

简介&#xff1a; 一文了解快手基于 Flink 构建的实时数仓架构&#xff0c;以及一些难题的解决方案。 本文整理自快手数据技术专家李天朔在 5 月 22 日北京站 Flink Meetup 分享的议题《快手基于 Flink 构建实时数仓场景化实践》&#xff0c;内容包括&#xff1a; 快手实时计算…

PyFlink 开发环境利器:Zeppelin Notebook

简介&#xff1a; 在 Zeppelin notebook 里利用 Conda 来创建 Python env 自动部署到 Yarn 集群中。 PyFlink 作为 Flink 的 Python 语言入口&#xff0c;其 Python 语言的确很简单易学&#xff0c;但是 PyFlink 的开发环境却不容易搭建&#xff0c;稍有不慎&#xff0c;PyFlin…

Android自动化打包工具,利用Jenkins实现Android自动化打包

Jenkins简介What is Jenkins?Jenkins is a self-contained, open source automation server which can be used to automate all sorts of tasks related to building, testing, and delivering or deploying software.Jenkins can be installed through native system packag…

为什么简单的删除集合中的元素竟然报错了?

作者 | 七十一来源 | 程序员巴士前言什么是快速失败&#xff1a;fail-fast 机制是java集合(Collection)中的一种错误机制。它只能被用来检测错误&#xff0c;因为JDK并不保证fail-fast机制一定会发生。当多个线程对同一个集合的内容进行操作时&#xff0c;就可能会产生fail-fas…

一文详解Redis中BigKey、HotKey的发现与处理

简介&#xff1a; 在Redis的使用过程中&#xff0c;我们经常会遇到BigKey&#xff08;下文将其称为“大key”&#xff09;及HotKey&#xff08;下文将其称为“热key”&#xff09;。大Key与热Key如果未能及时发现并进行处理&#xff0c;很可能会使服务性能下降、用户体验变差&a…

阿里云CDN操控2.0版本正式发布

简介&#xff1a; 2021年8月&#xff0c;阿里云边缘云CDN完成过去3年来最大的一次版本升级。 2021年8月&#xff0c;阿里云边缘云CDN完成过去3年来最大的一次版本升级。本次升级根据上万企业客户的使用反馈和行业应用特征&#xff0c;从简单开通到个性化定制&#xff0c;从内容…

向xxxhub发了一个数据包,发现了···

作者 | 轩辕之风来源 | 编程技术宇宙那天&#xff0c;我突然想到一个问题&#xff1a;当我访问那个让万千宅男程序员为之着迷的GitHub时&#xff0c;我电脑发出的数据包是如何抵达大洋彼岸的GitHub服务器的呢&#xff0c;这中间又要经过哪些节点呢&#xff1f;让我们一起来探究…

使用 Flink Hudi 构建流式数据湖

简介&#xff1a; 本文介绍了 Flink Hudi 通过流计算对原有基于 mini-batch 的增量计算模型的不断优化演进。 本文介绍了 Flink Hudi 通过流计算对原有基于 mini-batch 的增量计算模型不断优化演进。用户可以通过 Flink SQL 将 CDC 数据实时写入 Hudi 存储&#xff0c;且在即将…

android获取版本号报错,Android开发:获取安卓App版本号的方法步骤

在Android开发过程中&#xff0c;想要开发一个完整功能的App&#xff0c;各个地方的内容都要涉及到&#xff0c;比如获取App的系统版本号就是必须要有的功能。Android的App版本号相关内容比iOS的App版本号内容要多&#xff0c;而且iOS版的App版本信息跟Android的还不一样。本篇…

运营也用的起来的数据分析工具:Quick BI即席分析详解

简介&#xff1a; 数据部门是一个容易被投诉的“高危”部门&#xff0c;需求响应慢、数据准确性不高会影响业务的发展。 然而数据分析师每周动辄就有几十个需求在手&#xff0c;无限的加班也无法解决所有问题&#xff0c;到底怎样才能改变BI分析师的需求响应问题呢&#xff1f;…

【产品动态】解读Dataphin流批一体的实时研发

简介&#xff1a; Dataphin作为一款企业级智能数据构建与管理产品&#xff0c;具备全链路实时研发能力&#xff0c;从2019年开始就支撑可集团天猫双11的实时计算需求&#xff0c;文章将详细介绍Dataphin实时计算的能力。 背景 每当双11全球购物狂欢节钟声响起&#xff0c;上千…

Aruba与中国电信国际有限公司达成战略合作 助力中国企业扬帆出海

2022年1月12日&#xff0c;慧与科技公司 (NYSE: HPE) 旗下Aruba日前宣布&#xff0c;与中国电信国际有限公司&#xff08;CTG&#xff09;签署MSP&#xff08;托管服务运营商&#xff09;战略合作伙伴协议&#xff0c;Aruba的产品将纳入中国电信国际有限公司的主营产品线。协议…

模仿Spring实现一个类管理容器

简介&#xff1a; 项目的初衷是独立作出一个成熟的有特色的IOC容器,但由于过程参考Spring太多,而且也无法作出太多改进,于是目的变为以此项目作为理解Spring的一个跳板,与网上的一些模仿Spring的框架不同,本项目主要是针对注解形式 概述 项目的初衷是独立作出一个成熟的有特色…

湖仓一体化的路,很多人都只走了一半

2022已至&#xff0c;如果回看2021&#xff0c;这一年无疑是数据的价值进一步体现的一年。数据应用场景不断丰富&#xff0c;从工业、交通、金融到制造&#xff0c;几乎无处不在。当然&#xff0c;数据价值的迅速提升也给开发者和相关企业带来了新的问题。数据量的爆发让存储成…

学术顶会再突破!计算平台MaxCompute论文入选国际顶会VLDB 2021

简介&#xff1a; VLDB 2021上&#xff0c;阿里云计算平台MaxCompute参与的论文入选&#xff0c;核心分布式调度执行引擎Fangorn、基于TVR Cost模型的通用增量计算优化器框架Tempura等分别被Industry Track、Research Track录取。 一、顶会概览 VLDB 2021上&#xff0c;阿里云…

技术干货 | 应用性能提升 70%,探究 mPaaS 全链路压测的实现原理和实施路径

简介&#xff1a; 全链路压测方案下&#xff0c;非加密场景下至少有 70% 的性能提升&#xff0c;加密场景下 10%的性能提升&#xff0c;并在 MGS 扩容完成后可实现大幅的性能提升&#xff0c;调优的结果远超预期。 业务背景 随着移动开发行业的步入存量时代&#xff0c;App 整…