Python最容易掉进去的10个坑
原文:https://mp.weixin.qq.com/s/zG7ZKddn0Ez8DiCdPA3DWg 点击阅读原文可直达
相比于其他语言,Python的语法比较简单易学,但一旦不注意细节,刚入门的新手很容易就会掉进语法错误的坑里。
1. 忘记写冒号
在 if、elif、else、for、while、class、def 语句后面忘记添加“:”
if spam == 42
print('Hello!')
2. 误用 “=” 做等值比较
“=”是给变量赋值,“==”才是判断两个值是否相等:
score = 60
if score = 60:
print ('passed')
改正:
score = 60
if score == 60:
print ('passed')
3. 变量没有定义:
if age >= 18:
print ('adult')
print ('END')
会导致:NameError: name ‘age’ is not defined.
改正:
age = 20
if age >= 18:
print ('adult')
print ('END')
4. 字符串与非字符串连接
错误:
num = 12
print('I have ' + num+ ' apples.')
非字符串和字符串连接的时候,要将非字符串转换为字符串类型之后才能连接,改正:
num = 12
print('I have ' + str(num)+ ' apples.')
5. 列表的索引位置
习惯性地认为列表元素的位置是从1开始的:
spam = ['cat', 'dog', 'mouse']
print(spam[3])
列表元素的位置是从0开始的,所以第3个元素“mouse”的索引位置是2,改正:
spam = ['cat', 'dog', 'mouse']
print(spam[2])
6. 使用自增 “++” 自减 “—”
学过c语言或者Java的人会很习惯使用i++或者i—,但在Python中是没有自增自减操作符的:
spam = 0
spam++
这时可以使用 “+=” 来代替 “++”,改正:
spam = 0
spam += 1
7. 使用关键字命名变量
Python 3中一共33个关键字:
False,None,True,and,as,assert,break,class,continue,def,del,elif,else,except,finally,for,from,global,if,import,in,is,lambda,nonlocal,not,or,pass,raise,return,try,while,with,yield
自定义变量时,变量名不能和这些关键字重复。
8. 索引元素位置时忘记调用 len 方法
通过索引位置来获取列表元素时,忘记要先使用 len 函数来获取列表的长度:
fam = ['dad', 'mom', 'son']
for i in range(fam):
print(fam[i])
改正:
fam = ['dad', 'mom', 'son']
for i in range(len(fam)):
print(fam[i])
9. 函数中的局部变量赋值前被使用
num = 42
def myFunction():
print(num)
num = 100
myFunction()
第一行定义了一个全局变量num,同时函数myFunction( )也定义了一个同名的局部变量,但程序执行时是先查找局部变量的,所以在函数中找到num之后就不到外部查找了,此时就会出现print的时候变量num还没赋值的错误。
10. 缩进问题
和其他语言的语法最大的不同就是,Python不能用括号来表示语句块,也不能用开始或结束标志符来表示,而是靠缩进来区分代码块的。
常见的错误用法:
(1)
print('Hello')
print('World!')
错误是第二行的缩进会导致两个print语句是包含和被包含的关系,但他们两者是属于同一个代码块的,所以应该写成;
print('Hello')
print('World!')
(2)
if spam == 42:
print('Hello')
print('World!')
错误是第三行的缩进,改正的方法有两种,一是如果两个print语句是属于同一代码块的,应该改正为
if spam == 42:
print('Hello')
print('World!')
二是如果第三行的print语句是和if语句是同一级的,则改正为
if spam == 42:
print('Hello')
print('World!')
(3)在Python 3中,缩进的时候,不能Tab和空格混用,每个缩进层次应该选择只使用Tab或者只使用空格。
你在学习Python的过程中掉过哪些坑,欢迎留言参与讨论。
- CVE-2015-1641 Word 利用样本分析
- Cloudera Navigator介绍与安装
- [LeetCode]String主题系列{第5,6题}
- CDH内存调拨过度警告分析
- Ztorg:从 root 到 SMS
- [LeetCode]Math主题系列{第7,9,13,273题}
- 被忽视的攻击面:Python package 钓鱼
- [LeetCode]LinkedList主题系列{第2题}
- [LeetCode]HashTable主题系列{第3题}
- 如何使用Oozie API接口向Kerberos集群提交Java程序
- [LeetCode]Array主题系列{35,39,40,48题}
- 如何使用Sqoop2
- [LeetCode]Array主题系列{1,11,15,16,18,26,27,31,33,34题}
- Bwapp漏洞平台答案全解-A1(第三篇)
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法