Python中一些糟糕的语法!你遇到过吗?还知道那些?
Python是一门语法优雅,功能强大,开发效率高,应用领域广泛的解释性语言。
其有非常多的优点,但是也并不是完美的,除了大家都知道的执行速度不够快,Python2和Python3的兼容问题,以及GIL锁,在其语法上也有一些特点(是否是缺点见仁见智啦):
1. 使用可变对象作为函数默认值
代码如下:
在Python中,字典,集合,列表等等对象不适合作为函数默认值。因为这个默认值在函数创建时就会生成, 每次调用都调用了这个对象的”缓存”。
2. bool是int的子类 我们可以用以下代码来测试:
我们在来看看bool的类型:
3.‘==’ 和 is 的区别 ”Is”是判断两个对象是否是同一个对象, “==“是判断两个对象的值,但我们通过以下代码来测试:
上边我们四段代码,我们可以想象出python的内存管理,缓存了-5——256的对象。 最后一段,因为float(‘nan’)的类型就是nan,“==”代表值相同,而nan并不是一个值nan和nan的比较关系只能是nan != nan,就如同我们说,负无穷不可能等于负无穷一样。
4. lambda在闭包中会保存局部变量
代码如下:
原因是当赋值给myList,lambda表达式就执行了循环,直到 i =4结束,i被保留。
5.列表取值超出索引数
我们可以这样写一段代码:
但如果我们这样写:
6. 缩进的问题见仁见智。
如果考虑“在网络上传播代码片段”这个问题,强制的换行和缩进可能是一个障碍。
换句话说,python代码无法像Lua、JS那样压缩到一行,在复制粘贴、分享给别人时可能会很麻烦。
你还遇到过哪些?欢迎评论分享!
Python中一些糟糕的语法!你遇到过吗?还知道那些?的更多相关文章
- Python中的相对导入语法
Python中支持相对导入语法,即可以相对于某一个package进行导入,具体语法如下: # 导入"./dir2/spam.py", .表示当前目录 from .dir2 impo ...
- 简单探讨python中的语句和语法
python程序结构 python"一切皆对象",这是接触python听到最多的总结了.在python中最基层的单位应该就是对象了,对象需要靠表达式建立处理,而表达式往往存在于语句 ...
- Python中import的as语法
在Python中,如果import的语句比较长,导致后续引用不方便,可以使用as语法,比如: import dir1.dir2.mod # 那么,后续对mod的引用,都必须是dir1.dir2.mod ...
- Python中package的导入语法
在Python中,一个目录被称为一个package.import和from语法除了导入module文件之外,还可以导入package,语法如下: # import语法 import dir1.dir2 ...
- 简单介绍下python中函数的基础语法
python 函数 定义 函数是指将一组语句的集合通过一个名字(函数名)封装起来,要想执行这个函数,只需调用其函数名即可. 特性 减少代码重复 使程序变得可扩展 使程序变得易于维护 函数的创建 pyt ...
- Python中from module import *语法
from module import *的语法在Python 3.X和Python 2.X中的使用稍有区别: 在Python 3.X中,from module import *无法在函数里面使用,而在 ...
- python中装饰器(语法糖)概念
“”“” 什么是装饰器? """ 还是通过一个例子来慢慢说明 先看下面的例子 def func_1(x): return x*2 def fun_2(x): return ...
- Python中的一些小语法
目录: 生成随机数 将一个字符串变为datetime类型,并且获取星期几 1.生成随机数 假设我们要操作的list如下: >>> import random >>> ...
- Python 中的isinstance函数
解释: Python 中的isinstance函数,isinstance是Python中的一个内建函数 语法: isinstance(object, classinfo) 如果参数object是cla ...
随机推荐
- php面试重要知识点,面试题
1.什么是引用变量,用什么符号定义引用变量? 概念:用不同的名称引用同一个变量的内容:用&符号定义. 例如: $a = range(0,100); $b = &$a; $b = ran ...
- 利用arduino给PCB800099液晶驱动板烧录程序
某宝上购买了一块PCB800099液晶驱动板, 卖家出货的时候刷的驱动不对,遂需要重新烧录程序 可是苦于没有编程器,寻遍网络后找到几种解决方案: arduino刷,树莓派I2C口刷,linux下用vg ...
- sendmail启动报错
sendmail启动不了,报错如下: 解决方法: 在/etc/mail/sendmail.cf 配置文件中查找 Dj$w,并在此行下面增加这一行. Dj$w. 在/etc/hosts 增加一行 192 ...
- PAT——1018. 锤子剪刀布
大家应该都会玩“锤子剪刀布”的游戏:两人同时给出手势,胜负规则如图所示: 现给出两人的交锋记录,请统计双方的胜.平.负次数,并且给出双方分别出什么手势的胜算最大. 输入格式: 输入第1行给出正整数N( ...
- 使用nuget过程中一些问题总结
更新System.Web.Http组件以及其相关依赖项使用以下命令更新: Update-Package Microsoft.AspNet.WebApi –reinstall 如果没有这个引用,则先添加 ...
- oracle 数据库密码生产同步模拟环境 ,随记常用命令
1.查看当前open用户 select username,account_status,expiry_date,profile from dba_users; 2.查看目前的密码过期策略 select ...
- iOS小知识点
1.子视图超出frame的部分不显示 view.clipsToBounds 设置为YES; UIScrollview的clipsToBounds默认就是YES 2.UIImage 有一个属性叫s ...
- MySQL常用参数说明(持续更新)
##innodb correlate innodb_flush_log_at_trx_commit value: 0,[1],2 effect: control the flush opera ...
- Jmeter的实例应用
目标: 获取城市的天气数据: 第一步: 发送request 获取城市的城市代号http://toy1.weather.com.cn/search?cityname=上海 从这个请求的response ...
- 使用Letsencrypt做SSL certificate
为什么要使用Letsencrypt做SSL certificate? 最简单直接的原因是免费.但是免费存在是否靠谱的问题,尤其是对安全要求比较高的网站,需要考虑使用letsencrypt的安全性是否符 ...