学习
实践
活动
专区
工具
TVP
写文章

Python教程:谈谈 Python 那些不为人知的冷知识

还是老规矩,一篇只分享五个,有时间了就整理。不想错过的,千万记得关注一下。希望大家有其他冷知识,可以向我投稿。有小红包奖励噢。

01

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

函数的参数分三种

可变参数

默认参数

关键字参数

很多人学习python,不知道从何学起。

很多人学习python,掌握了基本语法过后,不知道在哪里寻找案例上手。

很多已经做案例的人,却不知道如何去学习更加高深的知识。

那么针对这三类人

这三者的具体区别,和使用方法在 廖雪峰的教程 里会详细的解释。这里就不搬运了。

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

先来看一个示例

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

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

对于参数中提供了初始值的参数,由于 Python 中的函数参数传递的是对象,也可以认为是传地址,在第一次初始化 def 的时候,会先生成这个可变对象的内存地址,然后将这个默认参数 item_list 会与这个内存地址绑定。

在后面的函数调用中,如果调用方指定了新的默认值,就会将原来的默认值覆盖。如果调用方没有指定新的默认值,那就会使用原来的默认值。

个人理解的记忆方法,不代表官方,点击查看大图

02

访问类中的私有方法

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

这里先看一下例子

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

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

# 调用私有方法,以下两种等价

ins._Kls__private()

ins.call_private()

03

时有时无的切片异常

这是个简单例子

my_list = [1, 2, 3, 4, 5]

print(my_list[5])

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

Traceback (most recentcalllast):

File"F:/Python Script/test.py", line2,in

print(my_list[5])

IndexError:listindexoutofrange

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

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

my_list = [1, 2, 3]

print(my_list[5:])

04

哪些情况下不需要续行符

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

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

>>> 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'''

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

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

类,和函数的定义。

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

05

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")

  • 发表于:
  • 原文链接https://kuaibao.qq.com/s/20191012A0BY1X00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

关注

腾讯云开发者公众号
10元无门槛代金券
洞察腾讯核心技术
剖析业界实践案例
腾讯云开发者公众号二维码

扫码关注腾讯云开发者

领取腾讯云代金券