美文网首页
Python3学习笔记 2

Python3学习笔记 2

作者: TomQ | 来源:发表于2017-03-24 15:56 被阅读0次

    查看帮助

    交互环境中:help(函数名)

    定义

    def my_fun(<参数列表>):
        <TODO>
    

    注:无return语句最终返回None。return Nonereturn

    空函数:

    def nop():
        pass
    

    pass:什么都不做,又如:

    if a > b:
        pass
    

    参数类型检查:

    def myfun(x):
        if not isinstance(x, (int, float)):
            raise TypeError('bad operand type for myfun')
        return x+1
    

    多返回值:

    def funmr(x, y):
        nx = x+1
        ny = y+2
        return nx, ny
    
    x, y = funmr(2, 3)  # 实际上返回的是一个省略括号的tuple
    print(x, y)  # 3 5
    r = funmy(2, 3) # (3, 5)
    

    默认参数

    def fun(x, y=1):
        n = x + y
        return n
    

    注:如果传入参数是可变对象,如

    def fun(la=[]):
        la.append('ABC')
        return la
    
    fun()  # ['ABC']
    fun()  # ['ABC', 'ABC'] # [] 被修改
    

    所以最好使用如 None, str, int 这类不可变对象做默认参数

    可变参数

    def funvars(*vars):  # 参数 vars实际为tuple
        n = 0
        for a in vars:
            n = n + a
        return n
    
    funvars(1,2,3)
    funvars()
    
    la = [1, 2, 3]
    funvars(*la)  # *把list或tuple的元素变为可变参数
    

    关键字参数

    def user(name, **kv): 
        print('NAME:', name, kv)
    
    user('WM', school='SLS')
    ue = {'school' : 'SLS', 'job' : 'sweeping monk'}
    user('WM', school=ue['school'], job=ue['jb'])
    user('WM', **ue)  # 传入的是拷贝,对kv的改动不会影响ue
    

    命名关键字参数

    def user(name, *, school, job): # 注意 *
        print(name, school, job)
        
    def user(name, *vars, school, job): 
        pass
    
    def user(name, *vars, school='SLS', job): 
        pass
    

    参数组合

    顺序:必选参数、默认参数、可变参数、命名关键字参数和关键字参数。

    递归函数

    尾递归优化:函数返回时仅调用自身,return语句不能包含表达式。则编译器或者解释器就可以把尾递归做优化,无论调用多少次,都只占用一个栈帧,不会出现栈溢出。
    遗憾的是,Python不支持尾递归优化
    网查:gcc中用了-O2或者-O3优化选项之后,就会对尾递归进行优化。(笔者未做验证)

    def funRecu(num, a):
        if num == 1:
            return product
        return funRecu(num - 1, num * a)
    

    相关文章

      网友评论

          本文标题:Python3学习笔记 2

          本文链接:https://www.haomeiwen.com/subject/gqhfottx.html