前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >Python|精辟冷知识(二)

Python|精辟冷知识(二)

作者头像
数据山谷
发布2021-01-08 15:16:08
3860
发布2021-01-08 15:16:08
举报
文章被收录于专栏:数据山谷数据山谷
超级冷门的Python知识点,来给大家更文了,准备好的快来收听啦~

1

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

先来给大家科普一下,回顾一下知识点,函数的参数分为四种,包括: • 默认参数 • 可变参数 • 关键字参数 • 命名关键字参数 这四者的具体区别和它们的使用方法在廖雪峰(廖大神)的教程里会详细的解释。对这里感兴趣的话,大家可以自行去浏览观看一下。

现在我们要说的是在传递默认参数的时候,很容易踩雷的一个坑。现在接着往下观看一下。

先来看一个示例:

代码语言:javascript
复制
def func(item, item_list=[]):
    item_list.append(item)
    print (item_list)
#1
func('iphone')   #------>['iphone']

#2
func('xiaomi', item_list=['oppo', 'vivo','honor'])
#------->['oppo', 'vivo', 'honor', 'xiaomi']

#3
func('huawei,one_plus')
#------->['iphone', 'huawei,one_plus']

如果你不知道3的输出的原因,马上来为大家揭晓,反之,大家则可以跳过或者忽略哦~

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

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

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

如上示例的内存地址理解如下: 第一次调用时,会执行初始化,生成[]的内存地址是2177344721608; 第二次调用时,制定了新的默认对象(2177344734728),将原来的覆盖,就像“压栈”一样,在函数结束后,会将这个“栈”弹出。 第三次调用时,item_list的默认参数还是指向2177344721608(因为上一次调用已经将新对象的引用弹出来了)

2

空字符串计数

在一个字符串里,求某个字符(串)出现的次数。在Python中我们通常使用 count() 函数,就可以轻松实现获取出现的次数。

代码语言:javascript
复制
'aabbccdd'.count('a') #----->2

'aabbccdd'.count('b') #----->2

'aabbccdd'.count('c') #----->2

'aabbccdd'.count('ab') #----->1

但是如果使用空字符串呢,我们想一下,会是怎么样的结果?得出的答案可能是你想象不到出来的。

代码语言:javascript
复制
'aabbccdd'.count('') #----->9

我们拿空字符串来实验检测一下:

代码语言:javascript
复制
'' in ''         #----->True
'' in 'aabbccdd' #----->True

我们通过空字符串实验检测证明的解释是:字母与字母之间存在“缝隙”。

总结:续接上次的Python冷知识内容我们又介绍了2条,分别是默认参数最好不为可变对象和空字符串计数等的具体介绍,大家慢慢了解一下即可。冷门知识点到此就完美谢幕了。感谢大家观看!

好啦,今天我们这次的Python冷知识分享到此就完美结束啦~~~欢迎大家进行探讨并学习!!!

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-12-31,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 数据山谷 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档