控制结构
1.py中while与for循环可以带有else分支
##while循环;while循环可以带有else分支
a = 0
while a<10:
print(a)
a += 1
else:
print("else")
print(a)
print("while finish")
##for 循环也可以带有else分支
print("----------for---------")
for i in range(3):
print(i)
else:
print("for else branch")
print(i)
- 三元运算符
a = 2
a = True if a >10 else False
print(a)
- enumerate可以在for循环中使用索引
a = [1,2,3]
for i,v in enumerate(a):
print(i,v)
异常
异常代码结构
try:
a = int("123")
except ValueError as err:
print("ValueError",err)
except TypeError as err:
print("typeerror",err)
else:
print("else suit")
finally:
print("finally")
1.在try块中没有抛出异常时,会执行else块;else块是可选的
2.finally无论是否抛出异常都会执行
3.至少要有一个except块
异常体系结构
object
--BaseException
--Exception
--ArithmeticError
--EOFError
--ValueError
--EnvironmentError
--OSError
--IOError
--LookupError
--IndexError
--KeyError
抛出异常
raise exception(args)
raise exception(args) from original_exception
raise
自定义异常
class FoundException(Exception):pass
class InvalidEntityError(Exception):pass
class InvalidNumericEntityError(InvalidEntityError):pass
class InvalidAlphaEntityError(InvalidEntityError):pass
class InvalidTagContentError(Exception):pass
函数
py中可以创建4种函数:全局函数、局部函数、lambda函数、方法
参数
- 函数的参数包含位置参数和默认参数两种,默认参数在调用函数时必须传递,默认参数可以不传递
- 默认参数后面不能再定义位置参数
- 默认参数是在执行def语句的时候创建的,而不是执行函数的时候创建的
- py支持变长参数 使用*定义
- py支持映射参数,使用**定义
- 函数的注释使用""" 定义 需要定义在函数的内部,第一行开始
- py支持断言语句,可以通过-O参数 ,跳过断言语句的执行
#参数定义
#1.默认参数后面不能定义位置参数
def heron(a,b,c):
return a+b+c
print(heron(1,2,3))
def sum(a,b=3):
return a+b
print(sum(5))
def append_list(x,list=[]):
if x:
list.append(x)
return list
#默认参数是在执行def语句的时候创建的,而不是在执行函数的时候创建的,因此以下函数的执行并不是我们期望的结果
print(append_list(1))
print(append_list(2))
#正确的定义
def append_list_right(x,list=None):
# if list is None:
# list = []
#三元运算符写法
list = [] if list is None else list
if x:
list.append(x)
return list
print(append_list_right(1))
print(append_list_right(2))
#参数定义
"""
1.位置参数定义在默认参数的前面
2.默认参数的后面不能再定义其他位置参数
"""
p = [1,2,3]
def method1(a,b,c,d=4):
return a+b+c+d
print(method1(*p))
#变长参数
"""
1.变长参数可以定义在位置参数的前面
2.也可定义在位置位置参数的后面
"""
def method2(*args,a,b,c=5):
print(args,a,b,c)
def method3(a,b,*args,c=5):
print(a,b,args,c)
method3(1,2,3,4,c=6)
print("----------------")
p2 = {'name':'lisi','age':18}
def method4(**args):
print(args)
method4(**p2)
def doc_test():
"""
这是一个测试注释函数
a,b return sum
c,d return sub
:return:None
"""
print("doc test")
help(doc_test)
print("lambda函数")
x = lambda a: a+1
x = lambda a,b:a+b
x = lambda a,b,c=10:a+b+c
x = lambda a,b,*arg,c=10: a+b+arg[0]+c
res = x(1,2,4)
import collections
map = collections.defaultdict(lambda :-1)
print(map['1'])
print(res)
##断言的使用
##使用-O参数可以忽略程序中的断言语句
## python -O py.file
def assertDemo(*args):
assert all(args) , "NO ARGUMENTS"
print("assertDemo")
assertDemo(1,2,0)