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. Linux autoconf和automake使用

    作为Linux下的程序开发人员,一定都遇到过Makefile,用make命令来编译自己写的程序确实是很方便.一般情况下,大家都是手工写一个简单Makefile,如果要想写出一个符合自由软件惯例的Mak ...

  2. C++:概述

    1.基本的输入输出,使用cin>>输入输入.使用cout<<输出 #include<iostream> using namespace std; int main( ...

  3. POJ2891——Strange Way to Express Integers(模线性方程组)

    Strange Way to Express Integers DescriptionElina is reading a book written by Rujia Liu, which intro ...

  4. BZOJ 2301 Problem b(莫比乌斯函数)

    题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2301 题意:每次给出a,b,c,d,K.求有多少数对(x,y)满足a<=x< ...

  5. 面向对象设计Object Oriented Design

    http://www.codeproject.com/Articles/93369/How-I-explained-OOD-to-my-wife http://www.cnblogs.com/niyw ...

  6. Android开发之火星坐标转换工具

    代码: import java.io.InputStream; import java.io.ObjectInputStream; /* * 把获取到的真实地址转换为火星坐标 */ public cl ...

  7. Ubuntu下MySQL数据库安装与配置与卸载

    安装: sudo apt-get install mysql-server mysql-client 一旦安装完成,MySQL 服务器应该自动启动.您可以在终端提示符后运行以下命令来检查 MySQL ...

  8. 最大流算法(Edmons-Karp + Dinic 比较) + Ford-Fulkson 简要证明

    Ford-Fulkson用EK实现:483ms #include <cstdio> #include <cstring> #define min(x,y) (x>y?y: ...

  9. 对EditText监听,按钮点击

    1 etBarCode.addTextChangedListener(watcher); 2 private TextWatcher watcher = new TextWatcher() { @Ov ...

  10. [反汇编练习] 160个CrackMe之011

    [反汇编练习] 160个CrackMe之011. 本系列文章的目的是从一个没有任何经验的新手的角度(其实就是我自己),一步步尝试将160个CrackMe全部破解,如果可以,通过任何方式写出一个类似于注 ...