zoukankan      html  css  js  c++  java
  • 二、python 函数

    1.定义函数

    def  max(x,y):
      if x>y:
        return x
      else:
        return y

    如果定义空函数(函数还没想好怎么编写,只是为了让整个代码能够运行起来)

    def max(x,y):
      pass

    2.函数的参数

    2.1可变参数

    顾名思义参数是可变的,既可以是1个参数,也可以是多个参数

    例:请计算a^2+ b^2 + c^2 + ……,其中a,b,c.....个数不确定,所以我们将参数用一个list或tuple传进去

    def calc(numbers):
      sum =0
      for i in numbers:
        sum = sum + i*i
      return sum 

    调用时

    calc([1,2,3])  #list作为输入,输出为14

    calc((1,2,4))  #tuple作为输入,输出为21

    如果想将list或者tuple的参数,改为可变参数,代码如下:

    def calc(*numbers):  #只需要在numbers前面加*
      sum =0
      for i in numbers:
        sum = sum + i*i
      return sum 

    调用时 calc(1,2,3)   #输出14

    与前面的定义只是多了个*,可变参数numbers在函数内封装成tuple类型

    也可以先组建一个list,num=[1,9,10,4] ,再把list参数作为可变参数传进去,此时运用可变参数调用时,需要这么写calc(*num)

    或者 calc(num[0],num[1],num[2],num[3])  

    2.2关键字参数

    关键字参数,在函数内部封装成dict类型,定义时会用**标记

    例如:

    def one(name,sex,**kw):
      print 'name:',name,'sex:',sex,'other:',kw      #  ,  表示输出一个空格,注:python的单引号与双引号使用没什么区别。

    小技巧:str='my name is "boy" '   或者   str="my name is 'boy' "

    调用时:

    one(Tom,boy,city='beijing')    输出为name: Tom sex: boy others: {'city':'beijing'}

    one(Tom,boy,city='beijing',job='teacher')  输出    name: Tom sex: boy others: {'city':'beijing','job':'teacher'}

    和可变参数类似,也可以先组建一个dict,再把dict转换为关键字参数传进去,例:

    dict={'city':'beijing','job':'teacher'}  调用时用法为one(Tom,boy,**dict); 或者  one(Tom,boy,city=dict['city'],job=dict['job'])

    3.递归函数

    3.1递归举例

     例子,计算n!

    def fact(n):
      if n =0:
        return 1
      return n*fact(n-1)

    递归函数的优点是定义简单,逻辑清晰,但是容易出现栈溢出,在计算机中,函数调用是通过栈(stack)这种数据结构实现的,每当进入一个函数调用,栈就会加一层栈帧,每当函数返回,栈就会减少一层栈帧,由于栈的大小不是无限的,所以递归次数过多,会导致栈溢出

    3.2尾递归优化递归函数

     目的是为了防止栈溢出

    def  fact(n):
      return fact_iter(1,1,n)
    def fact_iter(pro,count,max):
      if count>max :
        return pro
      return fact_iter(pro*count,count+1,max)

    尾递归调用时,如果做了优化,栈不会增长,因此,无论多少次调用也不会导致栈溢出。遗憾的是,大多数编程语言没有针对尾递归做优化,python解释器也没有做优化,所以,即使上面的fact(n)函数改成尾递归方式,也会导致栈溢出。

  • 相关阅读:
    SAP PI 如何实现消息定义查询
    EWM与ERP交互程序
    ITS Mobile Template interpretation failed. Template does not exist
    SAP Material Flow System (MFS) 物料流系统简介
    SAP EWM Table list
    EWM RF 屏幕增强
    SAP EWM TCODE list
    SAP扩展仓库管理(SAPEWM)在线研讨会笔记
    ERP与EWM集成配置ERP端组织架构(二)
    EWM RF(Radio Frequency)简介
  • 原文地址:https://www.cnblogs.com/likailiche/p/4352198.html
Copyright © 2011-2022 走看看