二、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)函数改成尾递归方式,也会导致栈溢出。
二、python 函数的更多相关文章
- 二. python函数与模块
第四章.内置函数与装饰器详解 1.内置函数补充1 注:红色圆圈:必会: 紫红色方框:熟练: 绿色:了解 callable() 判断函数是否可以被调用执行 def f1(): pass f1() ...
- Python函数(1)
一.Python函数介绍 函数时组织好的,可重复的,用来实现单一,或相关联功能的代码段. 函数的使用原则时先定义,后调用:事先准备工具的过程即函数的定义,遇到应用场景拿来当工具用即函数的调用. 函数的 ...
- python函数(二)
python函数(二) 变量的作用域 1.局部变量与全局变量 在函数内创建的变量被称为局部变量,这类变量的生命周期与函数相同,当函数执行完毕时,变量也就随之消失. 此类变量只能在函数内部调用,函数外不 ...
- python基础学习(二)--函数
return返回值: python函数都有返回值,函数体内无return,默认返回值None, 函数参数: 1.普通参数 严格按照顺序,将实际参数赋值给形式参数,一一对应. 例: def send(x ...
- Python学习札记(十二) Function3 函数参数一
参考:函数参数 Note 1.Python的函数定义非常简单,但灵活度却非常大.除了正常定义的必选参数外,还可以使用默认参数.可变参数和关键字参数,使得函数定义出来的接口,不但能处理复杂的参数,还可以 ...
- python 函数之day3
一 函数的语法及特性 什么是函数? 定义:函数是一个功能通过一组语句的集合,由名字(函数名)将其封装起来的代码块,要想执行这个函数,只要调用其函数名即可. 特性: 减少重复代码 使程序变的可扩展 使程 ...
- Python函数讲解
Python函数
- Python函数信息
Python函数func的信息可以通过func.func_*和func.func_code来获取 一.先看看它们的应用吧: 1.获取原函数名称: 1 >>> def yes():pa ...
- Python开发【第三章】:Python函数介绍
一. 函数介绍 1.函数是什么? 在学习函数之前,一直遵循面向过程编程,即根据业务逻辑从上到下实现功能,其往往用一长段代码来实现指定功能,开发过程中最常见的操作就是粘贴复制,也就是将之前实现的代码块复 ...
- Python函数解析
对于Python的函数,我们需要记住的是: 1. 函数的默认返回值是None. 2. python是一个自上而下逐行解释并执行的语言.因此,函数的定义必须在函数被调用之前.同名的函数,后定义的会覆盖前 ...
随机推荐
- iOS iOS7越狱
1.使用盘古越狱工具 (或者PP助手) 2.越狱成功后需要安装Apple File Conduit “2”,用于替代afc2add插件 3.安装AppSync插件 (绕过系统验证,随意安装.运行破解的 ...
- win32 api ShouCursor 根据内部计数器 是否>= 0 决定是否 显示光标,每true时计数器+1,每false-1
win32 api ShouCursor 根据内部计数器 是否>= 0 决定是否 显示光标,每true时计数器+1,每false-1,编程时true 和 false 的次数容易产生bug.
- Android PullToRefreshExpandableListView的点击事件
这几天做项目的时候用到了一个开源的下拉刷新的框架(需要的朋友可以加我Q:359222347).其中我使用PullToRefreshExpandableListView的时候发现这个东西没有setOnC ...
- Android The content of the adapter has changed but ListView did not receive a notification终极解决方法
这几天做一个自动扫描SD卡上所有APK文件的小工具,扫描过程中会把APK添加到LISTVIEW中显示,结果出现以下错误:(有时候触摸更新数据时候,触摸listview也会报错) E/AndroidRu ...
- MySQL5.7表空间加密
MySQL5.7开始支持表空间加密了,增强了MySQL的数据文件的安全性,这是一个很不错的一个功能,这个特性默认是没有启用的,要使用这个功能要安装插件keyring_file. 下面就来看看怎么安装, ...
- 高难度(3)RenderScript
RenderScript RenderScript is a framework for running computationally intensive tasks at high perform ...
- Java语言基本语法
Java语言基本语法 一.标识符和关键字 标识符 在java语言中,用来标志类名.对象名.变量名.方法名.类型名.数组名.包名的有效字符序列,称为“标识符”: 标识符由字母.数字.下划线.美元符号组成 ...
- sublime安装插件
今天因为某些原因,把 sublime 卸载掉了,然后来安装的时候,发现 Package Control 无法安装了,或者安装好后运行 ctrl + shift + p,会报 错误,截图如下: 然后就 ...
- jquery ajax请求 清除缓存
使用jquery里load方法或者ajax调用页面的时候会存在cache的问题,清除cache的方法: 调用jQuery.ajaxSetup ({cache:false}) 方法即可.
- abstract的method是否可同时是static,是否可同时是native,是否可同时是synchronized?
abstract的method不可以是static的,因为抽象的方法是要被子类实现的,而static与子类扯不上关系! native方法表示该方法要用另外一种依赖平台的编程语言实现的,不存在着被子类实 ...