文章目录
前言
今天来复习一下python的代码结构、python模块与包和程序一、python的代码结构
在很多计算机编程语言中会用{}花括号来划分代码段,同时会使用缩进使得代码更加具有可读性
python的设计者在设计python的时候就直接使用缩进来进行代码分段(这点是需要注意的)
1.1注释#与反斜杠\链接
python中使用#进行单行注释,在一行中注释过长的时候就可以使用\来连接到下一行
‘’’ ‘’'三引号多行注释
1.2if elif else
if 1>2:
print("yes!")
else:
print("no!")#注意if 后直接跟表达式,而且有:号,下一行缩进表示分段
1.3while、for、continue、else
while:
cnt = 0
while cnt < 5 :
print(cnt)
cnt += 1
for:
for i in list1:
print(i)
for i in 'cat':
print(i)
运行结果是1 2 3 c a t
列表、字符串、元组、字典、集合等都可以是迭代对象,在python中for迭代是非常常见的形式
#对字典的迭代,默认迭代键
dic1 = {'a':1,'b':2,'c':3}
for i in dic1:
print(i)
#可以使用dic1.values()函数来迭代字典中的值
for value in dic1.values():
print(value)
#可以使用items()函数以元组的形式返回键值对
for item in dic1.items():
print(item)
退出循环break,跳过当前一轮循环continue
结合else:
cnt = 0
while cnt >= 5:
cnt += 1
print('yes')
if cnt = 3:
break
else:
print("循环正常结束")
只有当循环完全进行到底之后才会执行和while(或for)相对应的else中的语句
1.4zip()、range()
zip()函数可以实现同时对多个序列进行迭代
list1 = [1,2,3,4,5]
list2 = ['一','二','三','四','五']
list3 = ['one','two','three','four']
for number,ch,en in zip(list1,list2,list3):
print(number,ch,en)
zip()函数在最短的序列“用完”时就会停止
range()函数返回在特定区间的自然数序列
range(start,end,step)左闭右开
for i in range(0,2):#注意py中是要有冒号的
print(i)
start默认值为0,step默认值为1
zip(),range()这样的函数返回的是一个可迭代的对象
1.5列表、字典、集合、生成器推导式
1.列表推导式
#简单形式
[expression for item in iterable]
#加上条件的列表推导式
[expression for item in iterable if condition]
例:
number_list = [number for number in range(0,11)]
number_list2 = [number for number in range(1,12) if number % 2 == 0]
#对元组列表的迭代
rows = range(1,4)
cols = range(1,3)
cells = [(row,col)for row in rows for col in cols]
2.字典推导式
{key_expression : value_expression for expression in iterable}
{key_expression : value_expression for expression in iterable if condition}
#字典推导也有if条件判断和多个for循环迭代语句
3.集合推导式
4.生成器推导式
1.6函数、生成器、装饰器
1.函数
(1)函数的定义
def fun1():
print("这是定义的一个函数")
fun1()
(2)函数的参数
位置参数:按照位置对应传参
def fun1(a,b,c):
print("这是定义的一个函数")
print("参数{}".format(a))
print("参数{}".format(b))
print("参数{}".format(c))
fun1(1,2,3)
补充:字符串format格式化
print("{} {} {}".format(1,2,3))
print("{2} {1} {0}".format(1,2,3))
print("{a} {b} {c}".format(a = 3, c = 1 , b = 2))
a = 12
b = 12.121
print("{:.2f}".format(a))
print("{:d}".format(int(b)))
关键字参数:调用函数时,传参指定对应参数的名字
指定默认参数值
(3)匿名函数lambda函数
lambda匿名函数的格式:冒号前是参数,可以有多个,用逗号隔开,冒号右边的为表达式。
#举一个简单的例子
def fu3(words,func):
for word in words:
print(func(word))
stairs = ['thud','meow']
def enliven(word):
return word.capitalize() + '!'
fu3(stairs,enliven)
#如果使用lambda函数写
fu3(stairs,lambda word:word.capitalize() + '!')
2.生成器、装饰器
1.7命名空间和作用域,try和expect处理错误
1.命名空间和作用域
一个名称在不同的使用情况下可能指代不同的事物。
在py中有很多命名空间,指的是在某个或者某段程序内的一个名称是唯一的,和其他命名空间的同名的变量等是无关的,相互独立。
numbera = 1
def print_number():
numbera = 2
"实际上在这里改变的仅是此函数内部的命名空间的numbera"
print('Hi ! The numbera in the function"function"is: {}'.format(numbera))
print_number()
print("And the numbera in the main is:",numbera)
def print_number2():
global numbera
"加一个关键字global声明"
numbera = 2
print('Hi ! After global The numbera in the function"function"is: {}'.format(numbera))
print_number2()
print("And the numbera in the main is:",numbera)
运行结果如下
2.使用try和expect处理错误
在python中使用异常,当错误发生时,执行某一段代码。
当执行出错的代码的时候,需要适当的异常处理程序用于阻止潜在的错误发生.
在异常可能发生的地方添加异常处理程序,明确错误,记录运行环境并且停止程序执行。
list1 = [0,1,2,3]
p = 4
try:
list1[p]
except:
print('need a p between 0 and',len(list1))
在try中的代码会执行,如果存在错误就抛出异常,然后执行expect中的代码,否则跳过expect代码。
上面的expect无参数适用于任何异常类型,但是这样的处理方式会比较泛化(类似于直接输出,“发生了一个错误”)
有的时候需要除了异常类型以外其他的异常细节,可以使用下面的格式获取整个异常对象:except exceptiontype as name
'''下面一个例子会先去寻找是否有indexerror,因为它是由索引一个序列
的非法位置抛出的异常类型,讲一个indexerror异常赋值给err,把其他的
赋值给other,事例中会输出说有存储在other中的该对象的异常'''
s_list = [1,2,3]
while True:
value = input('position [q to quit] ? ')
if value == 'q':
break
try :
position = int(value)
print(s_list[position])
except IndexError as err:
print('Bad index : ',position)
except Exception as other:
print('someting else broke',other)
3.编写自己的异常
前面所讲到的所有异常(例如IndexError)都是在Python领域或者它的标准库中提前定义好的。根据自己的目的可以使用任一的异常类型,同时自己定义异常类型,用来处理程序比重可能出现的特殊情况
二、模块、包、程序
1.模块、import
1.模块
一个模块是一个python文件
引用其他模块的代码使用import语句,被引用的模块中的代码就相当于插入进这个程序中
2.导入模块
import 模块
模块 是不带.py扩展的另一个python文件的文件名
下面是a.py文件
def fun1():
pass
在另一个文件中想要使用a.py的fun1()函数
b.py
import a
a.fun1()//把a.作为fun1的前缀
3.使用别名导入模块import aaaaa as a
其中aaaaa.py是模块,在上面语句之后就可以a.fun1(),而避免aaaaa.fun1(),防止同名出现
4.导入模块的一部分
from a import fun1
#或者以别名形式导入一部分
from a import fun1 as f1
2包
为了使python应用更具有可拓展性,可以把多个模块组织成文件层次,称为包。