本文转载自Python的编程时光(ID:Python-Time)

小明在日常Code中遇到一些好玩,冷门的事情,通常都会记录下来。

从上一篇的分享来看,仍然有不少 Pythoner 对这些冷知识存在盲区,所以今天迎来第二篇。

如果上篇你还没来得及查看,可以点击下方传送门直接进入。

谈谈 Python 那些不为人知的冷知识(一)

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

函数的参数分三种

  • 可变参数

  • 默认参数

  • 关键字参数

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

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

先来看一个示例

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 会与这个内存地址绑定。

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

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

访问类中的私有方法

大家都知道,类中可供直接调用的方法,只有公有方法(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()

时有时无的切片异常

这是个简单例子:

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:])

哪些情况下不需要续行符

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

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

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

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

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

  • 类,和函数的定义。

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

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

(本文为 AI科技大本营转载文章,转载请微信联系原作者

精彩推荐

推荐阅读

  • 《权力的游戏》最终季上线!谁是你最喜爱的演员?这里有一份Python教程 | 附源码

  • 63万张!技术头条

  • 史上第一张黑洞照片是用Python合成的?

  • Python的10个“秘籍”,这些技术专家全都告诉你了

  • 但见高通笑,哪闻英特尔哭?

  • 下过富士康工厂、做过华为外包,这位程序员是如何花 6 年逆袭成为技术大佬的?

  • 微服务落地,我们在考虑什么?| 技术头条

  • 爆料! 18张图、55个链接, 证据都在这了, 你还说自己是中本聪?

  • 程序员为什么都爱穿冲锋衣?(最全总结)

❤点击“阅读原文”,查看更多精彩文章。

谈谈Python那些不为人知的冷知识(二)相关推荐

  1. 谈谈Python那些不为人知的冷知识(一)

    本文转载自公众号Python编程时光(ID:Python-Time) 小明在日常Code中遇到一些好玩,冷门的事情,通常都会记录下来.现在已经积攒了一些了,最近打算整理一波,发出来给大家补补.一篇只分 ...

  2. Python那些不为人知的冷知识!(建议收藏)

    01. 省略号也是对象 ... 这是省略号,在Python中,一切皆对象.它也不例外. 在 Python 中,它叫做 Ellipsis . 在 Python 3 中你可以直接写-来得到这玩意. > ...

  3. 那些让你惊掉下巴到肚皮上的python冷知识(二)

    目录 一. 解释器前缀提示还能修改? 二.奇怪的字典 三.增量赋值的秘密 四.我的方法已经return了!它却还再继续执行!! 觉得分享的不错小伙伴们可以三连一波!!

  4. 链式比较、奇怪的字母、有趣的import...Python冷知识(六)

    本文转载自Python编程时光(ID:Python-Time) 冷知识系列,已经更新至第六篇. 谈谈 Python 那些不为人知的冷知识(一) 谈谈 Python 那些不为人知的冷知识(二) 谈谈 P ...

  5. 空字符串计数、让字典可排序...Python冷知识(五)

    本文转载自Python编程时光(ID: Python-Time) 冷知识系列,直至今日,已经更新至第五篇.前四篇给你准备好了,还没阅读的可以学习一下. 谈谈 Python 那些不为人知的冷知识(一) ...

  6. 反转字符串/列表、改变递归次数限制、else用法...Python 冷知识(四)

    本文转载自Python编程时光(ID:Python-Time) 冷知识系列,已经更新至第四篇.前三篇传送门在此,还没阅读的可以学习一下. 谈谈 Python 那些不为人知的冷知识(一) 谈谈 Pyth ...

  7. for死循环、怪异字符串、两次return……Python冷知识(三)

    本文转载自Python编程时光(ID:Python-Time) 冷知识系列,已经更新至第三篇.前两篇传送门小明给你准备好了,还没阅读的可以学习一下. 谈谈 Python 那些不为人知的冷知识(一) 谈 ...

  8. 【科普】千字解读自动驾驶的十个实用冷知识

    自动驾驶如今究竟发展到什么阶段了?下一个风口在哪?万亿市场的背后存在着多少不为人知的博弈? 在驭势科技首期自动驾驶线上知识分享课堂,驭势科技联合创始人.董事长吴甘沙先生,通过讲述十个实用的冷知识,拉近 ...

  9. 左撇子的人怎么使用计算机,小漫画讲述冷知识,左撇子很苦恼,电脑自动弹窗发明者是谁?...

    原标题:小漫画讲述冷知识,左撇子很苦恼,电脑自动弹窗发明者是谁? 这个世界上仍旧隐藏着很多不为人知的冷知识,因为这些知识的领域太过于偏僻而不为大众所熟知. 外国画师将一些被人类忽视或者是无从得知的冷知 ...

最新文章

  1. nginx linux 安装
  2. 使用dom4j解析XML例子
  3. ​赠书:面向对象的两大迷思,再给你们解答一次
  4. java map 排序_java集合框架面试题大集合
  5. c/c++ / printf 实现
  6. c# 中Stopwatch 类的运用
  7. 『ACM-算法-lowbit』算法竞赛进阶指南--lowbit运算,找到二进制下所有是1的位
  8. 五一小长假|不得不说的一些话
  9. MVC模型与FishiGUI应用层MVC型号
  10. 关系型数据库和主键外键
  11. 关于redis (error) CLUSTERDOWN Hash slot not served
  12. 您必须拥有这台计算机上的终端服务器用户访问权限的解决方案
  13. python中梅花数_梅花易数中的“数字”
  14. 怎么批量在多个文件夹名称后面加上数字序号或者日期时间序号?
  15. 使用宏定义写出swap(x,y)
  16. 打印机不能正常打印怎么办
  17. 更换cpu后 unraid 无法启动web,提示PTE Read access is not set
  18. Python requests HTTP验证登录实现流程
  19. STM32系统时钟树分析
  20. FPU与VFP最全面解释

热门文章

  1. fgets()用法笔记
  2. 模板方法模式与策略模式的区别
  3. Linux下多播的配置【十全十美】
  4. linux 环境配置 安装jdk
  5. Effective Java:对于全部对象都通用的方法
  6. request.getSession()
  7. 纯css3代码写下拉菜单效果
  8. 存货的计划属性设置(ATO模型和PTO模型)
  9. MSDN Visual系列:创建Feature扩展SharePoint列表项或文档的操作菜单项
  10. 徐韬:CCF - 个贷违约预测Baseline