定义函数

Python中定义函数的格式为:

def fun([参数列表]):
...

函数在执行到return语句时结束,并将结果返回。如果没有return语句,函数执行完毕后返回None。

例:

def myAge(x):
if x < 0:
print 'error:invalid number'
elif x > 120:
print 'error:too large number'
else:
print 'my age is ' + str(x)
myAge(20)

结果为:

my age is 20

ps:str(x)函数我一开始并不知道具体功能是什么,只是觉得应该要将int型转换成string类型再输出,按了下s,就在代码补全的列表里看到了str函数,放上去后居然能正确运行...

出于好奇我去Google了下这个函数的功能,Google解释如下:

The str() function is meant to return representations of values which are fairly human-readable...

大致意思是说,str函数是返回一个适合人类阅读的值...

比如,输入

s = 'hello,world'
str(s)

返回结果为:

'hello,world'

输出的结果是用引号包含的,这个“适合人类阅读”的值应该也是string类型的,难怪我加了str后就可以正常运行了!

pps:我又发现那段代码可以改为:

print 'my age is ',x

返回多个值

Python支持多个值返回,如以下程序使物体从一个坐标移动到另一个坐标:

import math

def move(x,y,step,angle = 0):
nx = x + step * math.cos(angle)
ny = y - step * math.sin(angle)
return nx,ny
x,y = move(100,100,60,math.pi*6)
print x,y

结果为:

160.0 100.0

事实上,这种“返回多个值”返回的是一个tuple类型:

m = move(100,100,60,math.pi*6)
print m

用这段代码替换上面调用move函数的代码,结果为:

(160.0, 100.00000000000004)

函数的参数

Python里函数的参数是非常灵活的,Python除了正常的必选参数外,还可以使用默认参数、可变参数、关键字参数,使得函数定义出来的借口,不但能处理复杂的参数,还可以简化调用者的代码。

默认参数

以下是一个能计算任意次方的函数(默认计算二次方):

def power(x,n = 2):
s = 1
while n > 0:
n = n - 1
s = s * x
return s

这样,当我们调用power(5)时,相当于调用power(5,2):

power(5)  # power(5,2)

结果为:

25

默认参数和C++中构造函数默认参数列表相似。

可变参数

可变参数,顾名思义,就是传入的参数的个数是可变的,可以是0个、1个、2个到任一个。

如:求a2+b2+c2+...+n2的值。

一般情况下,我们可以定义一个函数,再以一个tuple或list作为参数传入:

def calcul(numbers):
sum = 0
for n in numbers:
sum = sum + n * n
return sum cal([1,2,3]) #参数为list

如果想要改成可变参数列表的形式,只需在参数前加上*号:

def calcul(*numbers)
sum = 0
for n in numbers:
sum = sum + n * n
return sum cal(1,2,3) #参数个数是可变的,在调用时自动组装为tuple

调用结果均为:

14

关键字参数

关键字参数允许我们传入0个或任意个含参数名的参数,这些关键字参数在函数内部自动组装为一个dict

def person(name,age,**other):
print 'name:',name,' age:',age,' other:'other

该函数除了必选参数name,age外,还接受关键字参数other。在调用该函数时,可以只传入必选参数:

person('Larry',21)

调用结果为:

name: Larry,age: 21,other: {}

又如,调用

person('Larry',21,Sch = 'HFUT',Dept = 'CS')

的结果为:

name: Larry,age: 21,other: {'Sch':'HFUT','Dept':'CS'}

关键字参数可以很好的扩展函数的功能,可以使我们更为方便的处理事务。

参数组合

在Python中,必选参数、默认参数、可变参数和关键字参数可以一起使用,但是必须要严格按照此顺序,如:

def fun(a,b,c = 0,*argc,**kw):
print 'a = ',a,'b = ',b,'c = ',c,'argc = '.argc,'kw = ',kw

在调用函数的时候,Python解释器按照参数的位置和名字把对应的参数传进去:

func(1, 2)
a = 1 b = 2 c = 0 args = () kw = {} func(1, 2, c=3)
a = 1 b = 2 c = 3 args = () kw = {} func(1, 2, 3, 'a', 'b')
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {} func(1, 2, 3, 'a', 'b', x=99)
a = 1 b = 2 c = 3 args = ('a', 'b') kw = {'x': 99}

Python快速入门学习笔记(三)——函数的定义与调用的更多相关文章

  1. Python快速入门学习笔记(二)

    注:本学习笔记参考了廖雪峰老师的Python学习教程,教程地址为:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb49318210 ...

  2. Python快速入门学习笔记(一)

    本篇文章适合有其他高级语言基础的人群阅读 使用的Python版本为python2.7 使用的编辑器为Sublime Text3 世界始于Hello World: print 'Hello world' ...

  3. Sass简单、快速上手_Sass快速入门学习笔记总结

    Sass是世界上最成熟.稳定和强大的专业级css扩展语言 ,除了Sass是css的一种预处理器语言,类似的语言还有Less,Stylus等. 这篇文章关于Sass快速入门学习笔记. 资源网站大全 ht ...

  4. 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)

    [原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...

  5. Scala入门学习笔记三--数组使用

    前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...

  6. python学习笔记三 函数(基础篇)

    函数 内置函数 常用的内建函数: type()  列出指定对象的类型 help()  能够提供详细的帮助信息 dir()    将对象的所有特性列出 vars()  列出当前模块的所有变量 file, ...

  7. python数据分析入门学习笔记

    学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...

  8. python数据分析入门学习笔记儿

    学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据 ...

  9. Qt快速入门学习笔记(基础篇)

    本文基于Qter开源社区论坛版主yafeilinux编写的<Qt快速入门系列教程目录>,网址:http://bbs.qter.org/forum.php?mod=viewthread&am ...

随机推荐

  1. HDU 5510 Bazinga 暴力匹配加剪枝

    Bazinga Time Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/showproblem.php?pid=5510 ...

  2. 图形化OpenGL调试器 BuGLe [转]

    BuGLe 结合图形化的OpenGL调试与选择的过滤器上的OpenGL命令流.调试器可以查看状态.纹理.framebuffers ,着色器,而过滤器允许日志,错误检查,自由相机控制,视频捕捉等. 主页 ...

  3. iOS开发——UI_swift篇&UITableView实现索引功能

    UITableView实现索引功能     关于UItableView的索引在平时项目中所见不多,最多的就是跟联系人有关的界面,虽然如此,但是作为一个swift开发的程序必须知道的一个技术点,所以今天 ...

  4. UNIX基础知识之用户标识

    一.用户ID 口令文件(/etc/passwd)登录项中的用户ID(user ID)是个数值,它向系统标识各个不同的用户.系统管理员在确定一个用户的登录名的同时,确定其用户ID.用户不能更改其用户ID ...

  5. Python拼接多张图片

    写机器学习相关博文,经常会碰到很多公式,而Latex正式编辑公式的利器.目前国内常用的博客系统,好像只有博客园支持,所以当初选择落户博客园.我现在基本都是用Latex写博文,然后要发表到博客园上与大家 ...

  6. linux乱码问题

    命令输入: export LANG=zh_CN.GBK grep 匹配时高亮 先执行:export GREP_OPTIONS='--color=auto'; 后执行:grep 匹配内容 文件; 描述: ...

  7. 关于 未能加载文件或程序集“MySql.Web, Version=6.7.4.0, Culture=neutral, PublicKeyToken=c5687fc88969c44d”或它的某一个依赖项。系统找不到指定的文件。

    我这个项目是MVC4的,有两个版本,第一个版本直接运行没什么问题,但是跑第二个版本的时候就给我提示这个错误.好吧,百度果然是万能的.下边是解决方案. 1.找到 C:\Windows\Microsoft ...

  8. Java基础知识强化之网络编程笔记25:Android网络通信之 Future接口介绍(Java程序执行超时)

    1. Future接口简介 在Java中,如果需要设定代码执行的最长时间,即超时,可以用Java线程池ExecutorService类配合Future接口来实现. Future接口是Java标准API ...

  9. oracle中的sql%rowcount

    sql%rowcount用于记录修改的条数,就如你在sqlplus下执行delete from之后提示已删除xx行一样,这个参数必须要在一个修改语句和commit之间放置,否则你就得不到正确的修改行数 ...

  10. 【分割圆】Uva 10213 - How Many Pieces of Land ?

    一个椭圆上有N个点,将这n个点两两相连,问最多能将这个椭圆分成多少片. 理清思路,慢慢推. 首先我们要想到欧拉公式:V+E-F=2 其中V为图上的顶点数,E为边数,F为平面数. 计算时的可以枚举点,从 ...