码迷,mamicode.com
首页 > 编程语言 > 详细

python面试总结2(函数常考题和异常处理)

时间:2019-08-15 15:56:48      阅读:99      评论:0      收藏:0      [点我收藏+]

标签:float   定义   哪些   har   enc   oat   ring   引用   实参   

python函数常考题
  • 可变类型为参数

  • 不能类型为参数

python如何传递参数
  • 传递值还是引用呢?都不是。唯一支持的参数传递是共享穿参
  • Call by Object(Call by Object Reference or Call by Sharing)
  • Call by sharing(共享传参)。函数形参获得实参中各个引用的副本
def flist(l):
  l.append(0)
  print(l)
  
l = []   #指向同一个内存地址
flist(l)  # [0]
flist(l)  # [0,0]
#list作为可变类型传递,可变类型在同一对象上修改

def fstr(s):
  s += 'a'
  print(s)
  
s = 'hehe'  #不可变类型传递,每次赋值在一个新对象上操作,传递的形参指向新的对象
fstr(s)  # 'hehea'
fstr(s)  # 'hehea'
python可变/不可变对象

搞懂可变和不可变内置对象有利于理解函数参数的副作用

  • 哪些是可变对象?哪些不可变?
  • 不可变对象 bool/int/float/tuple/str/frozenset
  • 可变对象 list/set/dict
python可变参数作为默认参数
# 默认参数只计算一次

def flist(l=[1]):
        l.append(1)
    print(l)
    
flist()         # [1,1]
flist()         #[1,1,1]
python*args,**kwargs

函数传递中 *args, **kwargs含义是什么

  • 用来处理可变参数
  • *args 被打包成tuple
  • **kwargs被打包成为dict
什么是python异常
  • BaseException
  • SystemExit/KeyboardInterrupt/GeneratorExit
  • Exception
使用异常的常见场景

什么时候需要捕获处理异常呢?看python内置异常的类型

  • 网络请求(超时,连接错误)
  • 资源访问(权限,资源不存在)
  • 代码逻辑(越界访问,keyError)
try:
   # func                   #可能会抛出异常的代码
except  (Exception1, Exception2) as e:  #可以捕获多个异常并处理
     # 异常处理的代码
else:
  # pass                # 异常没有发生的时候代码逻辑
finally:
   pass                 # 无论异常有没有发生都会执行代码,一般处理资源的关闭和释放
如何自定义异常
  • 继承Exception实现自定义异常
  • 给异常加上一些附加信息
  • 处理一些业务相关的特定异常(raise MyException)
class MyException(Exception);
        pass
try:
  raise MyException('my exception')
except Exception as e:
  print(e)

python面试总结2(函数常考题和异常处理)

标签:float   定义   哪些   har   enc   oat   ring   引用   实参   

原文地址:https://www.cnblogs.com/only-me/p/11358375.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!