Python快速入门学习笔记(三)——函数的定义与调用
定义函数
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快速入门学习笔记(三)——函数的定义与调用的更多相关文章
- Python快速入门学习笔记(二)
注:本学习笔记参考了廖雪峰老师的Python学习教程,教程地址为:http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb49318210 ...
- Python快速入门学习笔记(一)
本篇文章适合有其他高级语言基础的人群阅读 使用的Python版本为python2.7 使用的编辑器为Sublime Text3 世界始于Hello World: print 'Hello world' ...
- Sass简单、快速上手_Sass快速入门学习笔记总结
Sass是世界上最成熟.稳定和强大的专业级css扩展语言 ,除了Sass是css的一种预处理器语言,类似的语言还有Less,Stylus等. 这篇文章关于Sass快速入门学习笔记. 资源网站大全 ht ...
- 【原创】SpringBoot & SpringCloud 快速入门学习笔记(完整示例)
[原创]SpringBoot & SpringCloud 快速入门学习笔记(完整示例) 1月前在系统的学习SpringBoot和SpringCloud,同时整理了快速入门示例,方便能针对每个知 ...
- Scala入门学习笔记三--数组使用
前言 本篇主要讲Scala的Array.BufferArray.List,更多教程请参考:Scala教程 本篇知识点概括 若长度固定则使用Array,若长度可能有 变化则使用ArrayBuffer 提 ...
- python学习笔记三 函数(基础篇)
函数 内置函数 常用的内建函数: type() 列出指定对象的类型 help() 能够提供详细的帮助信息 dir() 将对象的所有特性列出 vars() 列出当前模块的所有变量 file, ...
- python数据分析入门学习笔记
学习利用python进行数据分析的笔记&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据分 ...
- python数据分析入门学习笔记儿
学习利用python进行数据分析的笔记儿&下星期二内部交流会要讲的内容,一并分享给大家.博主粗心大意,有什么不对的地方欢迎指正~还有许多尚待完善的地方,待我一边学习一边完善~ 前言:各种和数据 ...
- Qt快速入门学习笔记(基础篇)
本文基于Qter开源社区论坛版主yafeilinux编写的<Qt快速入门系列教程目录>,网址:http://bbs.qter.org/forum.php?mod=viewthread&am ...
随机推荐
- w3cmark前端精彩博文周报 10.20-10.27
w3cmark 官方Q群 145423956 | 官方微博 @w3cmark 自从最近微博屏蔽了我的站点域名,就很懒了.毕竟和不爽,一个纯技术站点还被认为不安全链接,还申诉无门,那些所谓的客服都是自动 ...
- 一起聊聊 Swift 3.0
Swift3.0将会给我们带来哪些改变: 1. 稳定二进制接口(ABI) ABI是什么呢?API大家都知道是应用程序接口 API只是提供函数签名 而ABI是系统和语言层面的 如果ABI稳定 意味着以后 ...
- javascript面向对象学习笔记——创建对象(转)
工厂模式 该模值抽象了创建具体对象de过程.用函数来封装噫特定接口创建对象的细节. function createPerson(name,age,job){ var o=new Object(); o ...
- 判断手机andriod还是iphone
手机识别:var isAndroid = navigator.appVersion.toLowerCase().indexOf(‘android’) >= 0,isIphone = naviga ...
- Swift 3必看:新的访问控制fileprivate和open
在swift 3中新增加了两中访问控制权限 fileprivate和 open.下面将对这两种新增访问控制做详细介绍. fileprivate 在原有的swift中的 private其实并不是真正的私 ...
- IIS7程序发布后 之 报图表处理程序配置 [c:\TempImageFiles\] 中的临时目录无效
把.net4.0的ASP.NET网站布置在IIS7上,原本开发时一切ok,图形都能够出来,但是一旦部署到iis上,再访问的话, 错误问题:图表处理程序配置 [c:\TempImageFiles\] 中 ...
- java中关于json传图片的方法
一般来说传图片可以以流的形式来传输,即便是用json传输,一般也都是传一个地址,而图片都存在服务器上,然后顺着地址发送请求下载图片. 但是这次公司的项目中,图片是存在oracle数据库中的blob字段 ...
- The First
好吧,今天是第一次,写博客,虽然有点不明白,博客的作用.以后就写点感想,与每天的收获.既然,在博客园注册,自然也与IT相关了. hello,world!
- cocos2d-x lua 使用http(下载图片, POST JSON)
cocos2d-x lua 使用http(下载图片, POST JSON) version: cocos2d-x 3.6 1.使用http post json与服务器交互 require(" ...
- SSIS 学习(9):包部署常见问题汇总【转】
Integration Services 包在部署过程中,经常会出现这样那样的问题,让人摸不着头脑,很是烦人.下面我就将我在部署过程中,遇到的一些问题整理出来,以供大家参考. (一)SSIS包在SQL ...