注释
我们在文言文中经常会看到注释,注释可以帮助读者对文章的理解。代码中的注释也是一样,优秀的代码注释可以帮助读者对代码的理解。当然在代码编写过程中,注释的使用不一定只是描述一段代码,也可能的是对代码的调试。
Python注释一共有# 、''' ''' 、""" """三种方式。我们在编写代码中,一般用#进行单行注释,''' '''或""" """进行多行注释。如下代码所示:
# 这是一段注释
'''
这是多行注释,使用英文单引号。
这是多行注释,使用英文单引号。
这是多行注释,使用英文单引号。
'''
"""
这是多行注释,使用英文双引号。
这是多行注释,使用英文双引号。
这是多行注释,使用英文双引号。
"""
# 单行注释 这是一个加法
def add(a, b):
return a + b
# 先把print(add(1, 2))注释掉,下次如果用到print(add(1, 2))把#去掉
# print(add(1, 2))
我们右击运行,发现不会输出任何内容,虽然我们定义了一个add函数,但是并没有调用add函数,当我们把print(add(1, 2))的去掉时,再右击运行,打印台会输出3。关于函数的使用,会在后面内容进行介绍。
多行语句
一行语句在多行显示
print('快乐的\
一只\
小青蛙')
print([1,2,3,4,
5,6,7,
8.9])
a.在需要换行的地方加反斜杠(\),然后再换行
b.字典、列表、集合和元组等容器类型数据的字面量,在多行显示的时候可以直接换行
python中,一条语句结束,可以不写分号;但是如果一行中要写多条语句,那么每条语句中必须用分号分开
变量
变量的概念和数学方程式变量是一致的。比如一元一次方程 x+1>5 ,x就是一个变量。
在计算机程序中,变量不仅可以是数字,还可以是任意数据类型。变量在程序中用一个变量名表示,变量名必须是大小写英文、数字和_的组合,且不能用数字开头,不能使用关键字作为变量。如下代码所示:
a = [1, 'test', '你好', 1 + 2, False, [2, 3, 'CHINA']]
A = 1.1
b = '1'
B = 'test'
c = True
_C = False
d1 = 'test'
name = {'testDog', 'Jim', 'Mary', 'Jim', 'Jack', 'Rose'}
python对英文大小写敏感。
Python中关键字如下所示:
and | Exec | not |
---|---|---|
assert | Finally | or |
break | For | pass |
class | From | |
continue | Global | raise |
def | If | return |
del | Import | try |
elif | In | while |
else | Is | with |
except | lambda | yield |
缩进
一般当我们定义一个函数、使用if…else、while等时,第二行都必需要进行缩进。使用四个空格或键盘上的tab键表示缩进。如下代码所示:
def add(a, b):
return a + b
if 0 < 1:
print("True")
如果我们缩进位置不对时,运行下面这段代码一般会报IndentationError: expected an indented block错误。如下代码所示:
def add(a, b):
return a + b
print(add(1, 2))
input和print
input意思是等待用户输入,print我们之前也已经用过,表示打印的意思。我们运行下面这段代码,会发现Pycharm打印台需要我们输入2个数,当我们输入第一个数字时,按下Enter,会让我们输入第二个数,输完第二个数,按Enter,程序运行结束。当然下面这段代码是有Bug的,猜猜Bug在哪里呢?如下代码所示:
a = input("请输入第一个数:")
b = input("请输入第二个数:")
print("输入的2个数和为:", (a + b)
上面代码将输出如下内容:
请输入第一个数:1
请输入第二个数:2
输入的2个数和为:3
import与from...import
python 用 import 或者 from...import 来导入相应的模块。
将整个模块(somemodule)导入,格式为: import somemodule
从某个模块中导入某个函数,格式为: from somemodule import somefunction
从某个模块中导入多个函数,格式为:from somemodule import firstfunc, secondfunc, thirdfunc
将某个模块中的全部函数导入,格式为:from somemodule import *
import
import time
print(time.strftime('%Y.%m.%d',time.localtime(time.time())))
上面代码将输出如下内容:
2019.02.01
from...import
模块导入函数
from datetime import datetime
print(datetime.now())
上面代码将输出如下内容:
2019-02-01 10:14:45.614800
从.py文件导入
已知目录结构如下:
test1.py代码如下:
def add(a, b):
return a + b
test2.py代码如下:
from test1 import add
print(add(1,2))
运行test2.py打印如下内容:
3
注意,该目录结构有一个init.py文件,这个init.py文件声明该目录是一个python模块。小伙伴可以试试去掉init.py后是否可以执行。
定义一个函数
def 函数名(参数列表):
函数体
函数实例
def hello():
print("hello world")
创建一个类和对象
class People():
"""
定义一个人类
"""
def __init__(self, name):
self.name = name
def my_name(self):
print("我的名字是:"+self.name)
bobby = People('bobby') # 创建一个对象
bobby.my_name()
上面代码将输出如下内容:
我的名字是:bobby
注意:
- 第一种方法init()方法是一种特殊的方法,被称为类的构造函数或初始化方法,当创建了这个类的实例时就会调用该方法。
- self 代表类的实例,self 在定义类的方法时是必须有的,虽然在调用时不必传入相应的参数。
我们创建了一个People类,People类有一个构造函数,当我们创建一个People类的对象时需要传入一个参数,创建的对象可以调用People类中的方法
异常处理
我们在编写Python程序时,经常会因为一些错误导致剩下的代码无法执行,为了解决这个问题,Python内置了一套try...except...finally...的错误处理机制。我们先看一段会抛出异常的代码
a = 10
if a > 0:
b = a / 0
else:
b = a + 1
print(b)
上面代码将输出如下内容:
Traceback (most recent call last):
File "F:/新建文件夹/blogApiTest/test5.py", line 42, in
b = a/0
ZeroDivisionError: division by zero
上面代码比较简单,我们发现,我们的当a>0时,我们将执行 b = a / 0,除数为0。我们都知道除数不能为0,所以Python程序会 抛出异常,那么我们怎么才能接受这个异常并使程序继续执行下去呢?我们可以使用try...except...finally
. 如下代码所示:
try:
a = 10
if a > 0:
b = a / 0
else:
b = a + 1
print(b)
except ZeroDivisionError as e:
print(e)
finally:
print("end")
上面代码将输出如下内容:
division by zero
end
我们将我们的程序放在try里面,如果发生错误抛出ZeroDivisionError 异常,这里为了简便,把ZeroDivisionError 重命名为e,当然,我们也可以不使用finally,可以直接使用try...except
。这里有个问题,我是怎么知道会抛出ZeroDivisionError 异常的呢?我将给大家罗列一些常见异常,如下表格所示:
异常 | 描述 |
---|---|
AttributeError | 试图访问一个对象没有的树形,比如foo.x,但是foo没有属性x |
IOError | 输入/输出异常;基本上是无法打开文件 |
ImportError | 无法引入模块或包;基本上是路径问题或名称错误 |
IndentationError | 语法错误(的子类) ;代码没有正确对齐 |
IndexError | 下标索引超出序列边界,比如当x只有三个元素,却试图访问x[5] |
KeyError | 试图访问字典里不存在的键 |
NameError | 使用一个还未被赋予对象的变量 |
SyntaxError | 语法错误 |
TypeError | 传入对象类型与要求的不符合 |
ValueError | 传入一个调用者不期望的值,即使值的类型是正确的 |
当然如果我们不知道会抛出什么异常,我们可以使用BaseException
,因为所有的错误类型都继承自BaseException
,所以在使用except时需要注意的是,它不但捕获该类型的错误,还把其子类也“一网打尽”。比如:
try:
a = 10
if a > 0:
b = a / 0
else:
b = a + 1
print(b)
except BaseException as e:
print(e)
上面代码将输出如下内容:
division by zero