异常处理与函数

控制结构

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)
  1. 三元运算符
a = 2
a = True if a >10 else False
print(a)
  1. 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函数、方法

参数

  1. 函数的参数包含位置参数和默认参数两种,默认参数在调用函数时必须传递,默认参数可以不传递
  2. 默认参数后面不能再定义位置参数
  3. 默认参数是在执行def语句的时候创建的,而不是执行函数的时候创建的
  4. py支持变长参数 使用*定义
  5. py支持映射参数,使用**定义
  6. 函数的注释使用""" 定义 需要定义在函数的内部,第一行开始
  7. 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)
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值