zoukankan      html  css  js  c++  java
  • python面试总结2(函数常考题和异常处理)

    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)
    
  • 相关阅读:
    Android studio USB连接失败
    BZOJ 1013 [JSOI2008]球形空间产生器sphere
    UVA1025
    noip2016天天爱跑步
    noip2015运输计划
    noip2012借教室
    BZOJ 1597: [Usaco2008 Mar]土地购买
    BZOJ1010: [HNOI2008]玩具装箱toy
    BZOJ1026: [SCOI2009]windy数
    BZOJ1801:[Ahoi2009]chess 中国象棋
  • 原文地址:https://www.cnblogs.com/only-me/p/11358375.html
Copyright © 2011-2022 走看看