zoukankan      html  css  js  c++  java
  • Python函数

    函数定义:

    在Python中,定义一个函数要使用def语句,依次写出函数名、括号、括号中的参数和冒号:,然后,在缩进块中编写函数体,函数的返回值用return语句返回。

    In [3]: def sum(a,b):
       ...:     return a + b
       ...:
    
    In [4]: sum(1,2)
    Out[4]: 3
    

    定义一个空函数:

    In [6]: def no():
       ...:     pass
    In [8]: no()
    

    返回多个值:实际上返回的就是一个tuple

    In [10]: def cal(x,y):
       ....:     sum = x+y
       ....:     re = x-y
       ....:     return sum,re
       ....:
    
    In [11]: cal(1,2)
    Out[11]: (3, -1)
    

     默认参数:在定义函数的同时给参数赋值

    如: 

    In [6]: def sum(x,n = 2):
       ...:     while n >0 :
       ...:         a = x
       ...:         x = a + x
       ...:         n = n-1
       ...:     return x
    
    In [7]: sum(3)

    但要注意默认参数必须指向不变对象!

    如:传入一个list

    In [8]: def sum (L = []):
       ...:     L.append('a')
       ...:     return L
    
    In [12]: sum([1,2,3])
    Out[12]: [1, 2, 3, 'a']
    
    In [13]: sum([1])
    Out[13]: [1, 'a']
    
    In [14]: sum([1])
    Out[14]: [1, 'a']
    
    In [9]: sum()
    Out[9]: ['a']
    
    In [10]: sum()
    Out[10]: ['a', 'a']

    这时不使用默认参数时,这里传入的是不可变的对象,函数调用完不会保存,但是如果是可变的对象,就会将该对象保存下来

    具体的原因解释:

    原因解释如下:

    Python函数在定义的时候,默认参数L的值就被计算出来了,即[],因为默认参数L也是一个变量,它指向对象[],每次调用该函数,如果改变了L的内容,则下次调用时,默认参数的内容就变了,不再是函数定义时的[]了。

    这样就相当于是下面这样子,就是引用调用

    In [17]: L  = [1,2,3,4]
    
    In [18]: sum(L)
    Out[18]: [1, 2, 3, 4, 'a']

    这里也可以认为多线程使用同一个资源,需要加锁,所以可以用下面的方法给它加锁

    In [37]: def sum(L = None):
       ....:     if(L == None):
       ....:         L = []
       ....:     L.append('a')
       ....:     return L
       ....:
    
    In [38]: sum()
    Out[38]: ['a']
    
    In [39]: sum()
    Out[39]: ['a']

    可变参数:就是说的是参数的个数不能确定,可以用list或tuple

    In [41]: def sum(array):
       ....:     a = 0
       ....:     for i in array:
       ....:         a = a + i
       ....:     return a
       ....:
    
    In [42]: sum([1,2,3])
    Out[42]: 6

    如果想要想直接输入变量,可以这样

    In [41]: def sum(*array):
       ....:     a = 0
       ....:     for i in array:
       ....:         a = a + i
       ....:     return a
       ....:
    
    In [42]: sum(1,2,3)
    Out[42]: 6

    递归函数:在内部调用自身本身,这个函数就是递归函数。实质是通过栈实现的

    def fact(n):
        if n==1:
            return 1
        return n * fact(n - 1)
  • 相关阅读:
    windows 7(32/64位)GHO安装指南(系统安装篇)~重点哦!!~~~~
    windows 7(32/64位)GHO安装指南(U盘引导篇)~
    windows 7(32/64位)GHO安装指南(U盘制作篇)~
    windows 7(32/64位)GHO安装指南(序篇)~
    Linux课堂笔记(一)
    Web API 源码剖析之默认配置(HttpConfiguration)
    Web API 源码剖析之默认消息处理程序链--》路由分发器(HttpRoutingDispatcher)
    Web API源码剖析之HttpServer
    Web API 源码剖析之全局配置
    使用模板创建第一个Web API项目
  • 原文地址:https://www.cnblogs.com/sker/p/5797105.html
Copyright © 2011-2022 走看看