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)函数改成尾递归方式,也会导致栈溢出。

二、python 函数的更多相关文章

  1. 二. python函数与模块

    第四章.内置函数与装饰器详解 1.内置函数补充1 注:红色圆圈:必会:  紫红色方框:熟练:   绿色:了解 callable() 判断函数是否可以被调用执行 def f1(): pass f1() ...

  2. Python函数(1)

    一.Python函数介绍 函数时组织好的,可重复的,用来实现单一,或相关联功能的代码段. 函数的使用原则时先定义,后调用:事先准备工具的过程即函数的定义,遇到应用场景拿来当工具用即函数的调用. 函数的 ...

  3. python函数(二)

    python函数(二) 变量的作用域 1.局部变量与全局变量 在函数内创建的变量被称为局部变量,这类变量的生命周期与函数相同,当函数执行完毕时,变量也就随之消失. 此类变量只能在函数内部调用,函数外不 ...

  4. python基础学习(二)--函数

    return返回值: python函数都有返回值,函数体内无return,默认返回值None, 函数参数: 1.普通参数 严格按照顺序,将实际参数赋值给形式参数,一一对应. 例: def send(x ...

  5. Python学习札记(十二) Function3 函数参数一

    参考:函数参数 Note 1.Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以 ...

  6. python 函数之day3

    一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...

  7. Python函数讲解

    Python函数

  8. Python函数信息

    Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...

  9. Python开发【第三章】:Python函数介绍

    一. 函数介绍 1.函数是什么? 在学习函数之前,一直遵循面向过程编程,即根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复 ...

  10. Python函数解析

    对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...

随机推荐

  1. GridView 和ListView中自适应高度

    android中GridView  和ListView放在scrollView中时会默认的只有一行高这时就要我们自己计算出它的高度啦 首先是listview的 //动态设置listview的高度 pu ...

  2. asp.net开源CMS推荐

    随着网络技术的发展,目前国内CMS的开发商越来越多,各自都有其独特的优势,大家在选择的时候觉得眼花缭乱,不知道选择哪个比较好,我个人认为开源的CMS还是适合我们学习及研究使用,下边就几个国内的asp. ...

  3. 有关于kali linux安装eclipse出现的一系列问题

    第一步下载jdk,以及eclipse我就不再细说/官网都有的下载.(记得下载自己对应的版本就好了) 对于kali linux有这么一个问题,也是一直惹大家烦恼的问题--kali linux自带了jav ...

  4. Android Studio修改包名和applicationId的方法

    背景: 如果新做的项目跟以前做的某一个项目十分相似,那么一个简单的方法就是把原来项目拷贝一份,然后修改代码,但是这样包名还是原来项目的包名,还有如果想在同一台手机上同时安装新做的app和原来的app会 ...

  5. VS2010中如果忘记函数所在的头文件或者忘记函数的输入输出参数类型怎么办?

    先随便找一个熟悉的函数,右击-转到定义,然后写出目标函数,右击-转到定义

  6. 函数os_file_pread

    /*******************************************************************//** Does a synchronous read ope ...

  7. word编辑器解码集合

    $(document).ready(function () { $(".content").each(function () { var content = $(this).htm ...

  8. 从MySpace基于.NET平台的六次重构经历感受分布式

    它们拥有的用户和fans之多,大家都很清楚. Myspace是一个基于.NET平台的,而Facebook更多是基于LAMP的.我们来看看MySpace配合.NET+Windows Server 200 ...

  9. SelectSingleNode和SelectNodes区别

    SelectSingleNode:选择匹配 XPath 表达式的第一个 XmlNodeSelectNodes:选择匹配 XPath 表达式的结点集合 XmlNodeList

  10. WPF MultiBinding 和 IMultiValueConverter

    MultiBinding,描述附加到单个绑定目标属性的Binding对象的集合.可以指定多个数值绑定. IMultiValueConverter通过转换器使用MultiBingding对象,该对象讲根 ...