一、输入与输出
1、print打印
(1)打印字符串:%s
>>> name = "yisan"
>>> print ("hello %s,Nice to meet you!!" %name)
hello yisan,Nice to meet you!!
(2)打印数字:%d
>>> age = 26
>>> print ("You are %d" %age)
You are 26
(3)若不知道打印内容的类型:%r
>>> n = 100
>>> print ("You print is %r" %n)
You print is 100
>>> name = "yisan"
>>> age = 26
>>> print ("student info : %s %d" %(name,age))
student info : yisan 26
2、input输入
n = input("Enter any content:")
print ("your input is %r" %n)
按F5快捷键运行程序,当运行到input()时,需要用户输入一些信息,用print打印出来(python2中使用:raw_input()代替input()):
Enter any content:tom
your input is 'tom'
3、引号与注释
(1)引号:
python中,不区分单引号(' ')与双引号(" "),都用来表示一个字符串:
>>> print("hello")
hello
>>> print('world')
world
单引号与双引号可以互相嵌套使用,但不能交叉使用:
>>> print("你说:'早上好'")
你说:'早上好'
>>>
>>> print("你向我微笑'向我问好"。')
SyntaxError: invalid character in identifier
(2)注释:
>>> #单行注释
>>> print("hello world")#打印hello world
hello world
多行注释:用""" """
"""
你好,
早上好
中午好
下午好
晚上好
"""
二、分支与循环
1、if 语句:
>>> a = 2
>>> b = 3
>>> if a > b:
print("a max")
else:
print("b max")
b max
python中的if语句通过“==”运算符判断相等,通过“!=”判断不相等:
>>> student = "yisan"
>>> if student == "yisan":
print("yisan,You are on duty today.")
else:
print("Please call yisan to duty.")
yisan,You are on duty today.
python中,用“in”和“not in”表示包含关系:
>>> hi = "Hello,World!!!"
>>> if "Hello" in hi:
print("Contain")
else:
print("Not Contain")
Contain
if语句可以进行布尔类型的判断:
>>> a = True
>>> if a:
print("a is True")
else:
print("a is not True")
a is True
demo:
results = 75
if results >=90:
print("优秀")
elif results>=70:
print("良好")
elif results>=60:
print('及格')
else:
ptiny('不及格')
2、for语句
>>> for i in "Hello,World!!!":
print(i)
H
e
l
l
o
,
W
o
r
l
d
!
!
!
>>> fruits = ['banana','apple','mango']
>>> for fruit in fruits:
print(fruit)
banana
apple
mango
range()函数默认从0开始循环:
>>> for i in range(5):
print(i)
0
1
2
3
4
range()函数也可以设置起始位置和步长,如打印1到10之间的奇数:
>>> for i in range(1,10,2):
print(i)
1
3
5
7
9
三、数组与字典
1、数组
数组用方括号([ ])表示,里面的每一项用逗号(,)隔开
>>> lists = [1,2,3,'a',4]
>>> lists
[1, 2, 3, 'a', 4]
>>> lists[0]
1
>>> lists[3]
'a'
>>> lists[4]
4
>>> lists[4]='b'
>>> lists[4]
'b'
>>> lists.append('c')
>>> lists
[1, 2, 3, 'a', 'b', 'c']
2、字典
字典用花括号({ })表示,里面的项成对出现,一个key对应一个value;key与value之间用(:)分隔;不同的项之间用逗号(,)分隔
>>> dicts = {"username":"yisan",'password':123456}
>>> dicts.keys()
dict_keys(['username', 'password'])
>>> dicts.values()
dict_values(['yisan', 123456])
>>> dicts.items()
dict_items([('username', 'yisan'), ('password', 123456)])
>>> for k,v in dicts.items():
print("dicts keys is %r" %k)
print("dicts values is %r" %v)
dicts keys is 'username'
dicts values is 'yisan'
dicts keys is 'password'
dicts values is 123456
注意:python字典中,key必须独一无二,value可以相同
keys()函数返回字典key的列表
values()函数返回字典中value的列表
items()函数将所有的字典项以列表的方式返回,这些列表中的每一项都包含key和value,但是项在返回时并不会按照他们在字典中的存放顺序。如果想按照存放的顺序输出,可通过下面的方式:
#通过zip方法合并两个List为Dictionary
#遍历会按原先的顺序
keys = ["b","a","c","e","d"]
values = ["2","1","3","5","4"]
for key,value in zip(keys,values):
print(key,value)
输出结果:
=======RESTART: C:/Users/川/Desktop/test.py ========
b 2
a 1
c 3
e 5
d 4
四、函数、类和方法
1、函数
在python中,通过def关键字来定义函数:
>>> def add(a,b):
print(a+b)
>>> add(3,5)
8
>>> def add(a,b):
return a+b
>>> add(2,5)
7
>>> def add(a=1,b=2):
return a+b
>>> add()
3
>>> add(3,5)
8
2、类和方法
python中,用class关键字来创建类
class A(object): #python3中object可以不用声明
def add(self,a,b):
return a+b
count = A()
print(count.add(3,5))
输出结果:
============ RESTART: C:/Users/川/Desktop/test.py ============
8
上面创建了一个A类,在类下面创建了一个add()方法,方法的创建使用def关键字,方法的第一个参数必须是存在的,一般习惯命名为“self”,但是调用这个方法时,不需要为这个参数传值。
一般在创建类时会首先声明初始化方法init():
class A(object):
def __init__(self,a,b):
self.a = int(a)
self.b = int(b)
def add(self):
return self.a+self.b
count = A('4',5)
print(count.add())
输出结果:
============ RESTART: C:/Users/川/Desktop/test.py =============
9
当调用A类时,首先执行init()方法进行初始化,将输入的参数类型转化为int类型,用来保证程序的容错性。add()方法可以直接拿初始化方法init()的self.a和self.b两个数进行计算
2、继承
class A():
def add(self,a,b):
return a+b
class B(A):
def sub(self,a,b):
return a-b
print(B().add(4,5))
print(B().sub(5,4))
输出结果:
============RESTART: C:/Users/川/Desktop/test.py =============
9
1
B类继承了A类,所以B类 拥有了add()方法,从而B类可以直接调用add()方法
五、模块
1、引用模块
在python中,通过import...或from...import...的方式引用模块,例如:
import time
print(time.ctime())
输出结果:
===========RESTART: C:\Users\川\Desktop\test.py =============
Sat Jun 24 21:48:34 2017
或:
from time import ctime
print(ctime())
输出结果:
============RESTART: C:\Users\川\Desktop\test.py =============
Sat Jun 24 21:50:45 2017
又如:
from time import *
print(ctime())
print("休眠两秒")
sleep(2)
print(ctime())
输出结果:
============RESTART: C:\Users\川\Desktop\test.py ===========
Sat Jun 24 21:53:43 2017
休眠两秒
Sat Jun 24 21:53:45 2017
星号“*”表示模块下的所有方法
2、模块调用
python中,既可以调用系统模块,也可以调用自己创建的模块:
创建一个目录project,并在目录下创建两个文件:
project/
|----pub.py
|__count.py
在pub.py文件中创建add函数:
pub.py:
def add(a,b):
return a+b
在count.py中调用pub.py文件中的函数add():
count.py:
from pub import add
print(add(4,5))
输出结果:
=============RESTART: D:\project\count.py =================
9
以上就实现了跨文件的函数调用。
3、跨目录模块调用(1)
如果调用文件与被调用文件在一个目录下面,则可以非常方便的调用。如果被调用的文件与调用文件不在同一个目录下呢?假设文件目录结构如下:
project/
|-----model/----pub.py
|
|_____count.py
count.py
from model.pub import add
print(add(4,5))
输出结果:
==============RESTART: D:\project\count.py =================
9
4、跨目录调用(2)
当项目变得复杂之后,需要涉及多个文件目录之间的调用,结构如下:
count.py
class A():
def add(self,a,b):
return a+b
new_count.py
from count import A
class B(A):
def sub(self,a,b):
return a-b
result = B().add(2,5)
print(result)
输出结果:
============ RESTART: D:\project\model\new_count.py ============
7
test.py
from model import new_count
test = new_count.B()
test.add(2,5)
输出结果:
Traceback (most recent call last):
File "D:\project\test.py", line 1, in <module>
from model import new_count
File "D:\project\model\new_count.py", line 1, in <module>
from count import A
ImportError: No module named 'count'
执行test.py时,会报错,提示在new_count.py中找不到“count”模块,是因为:
站在new_count.py的位置,执行“from count import A”时,可以找到“count”文件,但是站在test.py的位置执行“from count import A”时,就找不到“count”文件了。
修改test.py文件如下:
import sys
sys.path.append("./model") #将model目录添加到系统变量path下
from model import new_count
test = new_count.B()
test.add(2,5)
输出结果:
================RESTART: D:\project\test.py ==================
7
六、异常
1、认识异常
如下异常情况:
>>> open("abc.txt",'r')
Traceback (most recent call last):
File "<pyshell#0>", line 1, in <module>
open("abc.txt",'r')
FileNotFoundError: [Errno 2] No such file or directory: 'abc.txt'
提示:No such file or directory: 'abc.txt'(没有abc.txt这样的文件或目录),可以用python提供的try...except...语句来 接受并处理这个异常:
>>> try:
open("abc.txt",'r')
except FileNotFoundError:
print("异常了!")
输出结果:
异常了!
又如:
try:
print(aa)
except NameError:
print("这是一个name异常!")
输出结果:
=============RESTART: C:\Users\川\Desktop\test.py =============
这是一个name异常!
在python中,所有的异常类型都继承Exception,所以可以使用它来接受所有类型的异常:
try:
open("abc.txt",'r')
except Exception:
print("异常了!!")
输出结果:
===========RESTART: C:\Users\川\Desktop\test.py ==============
异常了!!
从python2.5版本之后,所有异常类型都有了新的基类BaseException。Exception同样也继承自BaseException,所以我们也可以使用BaseException来接收所有类型的异常:
try:
open("abc.txt",'r')
print(123)
except BaseException:
print("异常了!!!")
输出结果:
============ RESTART: C:\Users\川\Desktop\test.py =============
异常了!!!
对于上面的例子,打印异常时,我们并不知道到底哪一行代码起了异常,可以通过下面的方法让python直接告诉我们异常的原因:
try:
open("abc.txt",'r')
print(123)
except BaseException as msg:
print(msg)
输出结果:
=========== RESTART: C:\Users\川\Desktop\test.py ==============
[Errno 2] No such file or directory: 'abc.txt'
我们在BaseException后面定义了msg变量来接收异常信息,并通过print将其打印出来。此处写法与python2有所不同,在python2中用逗号“,”代替“as”
python中常见的异常如下表所示:
| 异常 | 描述 |
|----------------------|------------------------------------------------------------- :|
|BaseException |新的所有异常类型的基类 |
|Exception |所有异常类型的基类,但继承BaseException类 |
|AssertionError |assert语句失败 |
|FileNotFoundError|试图打开一个不存在的文件或目录 |
|AttributeError |试图访问的对象没有属性 |
|OSError |当系统函数返回一个系统相关的错误,包括I/O故障,如找不到文件或磁盘已满时,引发此异常 |
|NameError |使用一个还未赋值对象的变量 |
|IndexError |当一个序列超出了范围 |
|SyntaxError |当解析器遇到一个语法错误时引发 |
|KeyboardInterrupt|Ctrl+C被按下,程序被强行终止 |
|TypeError |传入的对象类型与要求不符 |
2、更多异常用法
下面来学习异常的更多用法:try....except与else配合使用:
try:
aa = "异常测试"
print(aa)
except BaseException as msg:
print(msg)
else:
print("没有异常!")
输出结果:
============RESTART: C:\Users\川\Desktop\test.py ==============
异常测试
没有异常!
else语句只有在没有异常的情况下才会被执行,但是有些情况下,无论是否出现异常,操作都希望被执行,如文件的关闭、锁的释放、把数据库连接返还给连接池等操作 ,可以通过使用try...except...finally...语句来实现这样的需求:
try:
print(aa)
except Exception as e:
print(e)
finally:
print("不管是否异常,我都会被执行。")
输出结果:
============ RESTART: C:\Users\川\Desktop\test.py =============
name 'aa' is not defined
不管是否异常,我都会被执行。
又如:
try:
aa = "异常测试"
print(aa)
except Exception as e:
print(e)
finally:
print("不管是否异常,我都会被执行。")
输出结果:
=============RESTART: C:\Users\川\Desktop\test.py ==============
异常测试
不管是否异常,我都会被执行。
3、抛出异常
print()方法只能打印错误信息,python中提供了raise方法来抛出一个异常信息:
from random import randint
#生成一个1到9之间的随机整数
number = randint(1,9)
if number %2 ==0:
raise NameError("%d is even" %number)
else:
raise NameError("%d is odd" %number)
输出结果:
============= RESTART: C:\Users\川\Desktop\test.py ============
Traceback (most recent call last):
File "C:\Users\川\Desktop\test.py", line 5, in <module>
raise NameError("%d is even" %number)
NameError: 6 is even
通过randinnt()方法随机生成1到9之间的整数,然后判断这个数字时奇数还是偶数,最后通过raise抛出NameError异常。(注:判断奇偶数与NameError之间没有任何关系,这里只是演示如何通过raise抛出各种类型的异常)
续:
1、全局变量global的用法
python 中使用 global 来设置全局变量,如下:
global a
a=1
def change():
print(a)
也就是说,声明一个全局变量,首先要在方法外的地方声明一个变量,然后在方法内使用它的时候,先要对这个变量声明下 global , 然后再进行修改,否则会人会你声明的是一个方法内的局部变量。