一些你不知道的 Python Tips
前言
这篇文章是我基于「Daily Python Tip」(@python_tip)这个Twitter账号里面的内容整理的一些关于Python的有意思的小例子,另外我也基于我的知识对其进行了扩展。
dict更新
更新字典的键值需要使用update方法:
也就是update方法的参数也是一个dict。「@python_tip」提到了这么一个写法:
也就是说直接传入包含 (k,v)
这样的2项元组的列表也可以,但是如果列表中有只有单个元素的项,不能更新成功,但是不影响其他正常的项,如上面的4,5已经被更新进去了。
btw,看过我博客的同学是不是对那篇Python元组的赋值谜题有印象?
我立刻对update方法产生了浓厚的兴趣,看一下方法签名:
也就是说除了字典还可以接收 可迭代对象 或者 关键字参数 作为参数。且可以混用:
另外看方法签名说明可以知道,只要传入的参数或者其中的项有 keys
方法就可以:
隐式的字符串连接
工作中写代码经常遇到很长的字符串(如写SQL语句时),可能会超过单行长度限制,我一般用隐式的字符串连接:
但是「隐式」也可能给你带来非常隐蔽的错误:
由于b和c之前没有加逗号,会被隐式的拼在一起。这可能会让开发者调试很久才发现是逗号的问题
print的妙用
作为一个Python 2时代过来的开发者,我对Python 3强制把print作为函数特别不适应,所以当时还特别去学习和理解为什么作为函数更好。我觉得改成函数最好的地方是支持灵活的参数,实现更多样的打印效果,举几个例子:
上面 print(*lst,sep=', ')
我得额外说一点,大家应该这样写过代码:
如果要被join的列表项有非字符串的会抛错误,需要手动把数字转成字符串,在print函数中不用担心这点:
print还支持file参数,可以直接把内容打印到文件中:
print还支持flush参数,我们直接看下面这个例子就能理解了:
大家可以执行一下。会发现sleep了3秒,一次把全部内容都打印出来,没有倒计时的效果。这需要每次迭代都要强制刷新流,改成 print(countdown,end='...',flush=True)
就好了。
具体解释可以看延伸阅读链接1
另外print在Python2是关键字,而在Python3中可以直接替换掉:
__hello__
和 __phello__
Python有2个隐藏模块:
它们主要用于CPython的测试,是由freeze工具生成的,主要用于CPython的测试,完全没有实际用处,具体源码可以参考延伸阅读链接2。
Python3打印emoji表情
在Python 3中可以直接通过CLDR(Unicode Common Locale Data Repository)中的 shortname
打印emoji表情,
格式是 '\N{CLDR_SHORT_NAME}'
,这样非常方便,原来需要安装emoji包才可以用。
不过emoji字符串用起来要注意:
全部的emoji可以在延伸阅读链接3中找到
延伸阅读
-
https://realpython.com/python-print/
-
https://github.com/python/cpython/blob/8c77b8cb9188165a123f2512026e3629bf03dc9b/Python/frozen.c#L39-L43
-
https://unicode.org/emoji/charts/full-emoji-list.html