Python入门-函数

函数

定义:完成特定功能的语句组,可以给这组语句取一个名字,作为一个单位使用。

函数优点

         实现代码复用,提高开发效率,减少重复编码。

         简化程序结构,将复杂的编程问题分解为若干简单的子问题,每个子问题由函数来解决。    

         使用函数可以使程序更容易阅读;使调试测试更容易。

         信息封装与隐藏。


函数定义

def funcname(params):

         xxx

         xxx

         return  xxx

函数名、参数、函数体


匿名函数

f = lambda 参数1, 参数2, ... :表达式

f = lambda x,y,z : x+y+z

g = lambda x: lambda y : x+y


>>>f=lambda x,y,z:x+y+z

>>>f(5,10,15)

30

 

>>>g=lambda x:lambda y:x+y

>>>g(5)(10)

15


带默认参数值的匿名函数

f = lambda x,y=3 : x**y

f(2,2) = 4

f(2) = 8



参数传递

1 按照位置传参数

2 按照关键字传参数

3 按照默认值传参数

函数定义时如果指定默认值参数,这类参数必须放在无默认值参数的后面。


def sum(a,b,c=10)

         return a+b+c


sum1 = sum(4,5,6)

sum2 = sum(a=4,c=8,b=6)


可变数量的参数定义

定义函数时,如果参数数量不确定,可以定义可变数量的参数。

参数名前面加一个'*'表示参数是以形参名为标志符的元组,元组中的元素个数可以是零个、一个或多个。

参数名前加两个'*'表示参数数据类型是字典,其中参数名为“key”,参数值为“value”


定义函数时,可以混合使用多种参数传递方式,要遵循如下规则:

1 关键字参数放在位置参数后面

2 元组参数放在关键字参数后面

3 字典参数放在元组参数后面


调用函数时,首先按位置顺序传递参数,其次按关键字传递参数。多余的非关键字参数传递给元组,多余的关键字参数传递给字典。


函数返回值

函数定义中,return语句是可选项,主要功能是返回函数执行结果。

返回的数据类型除常见的数值,字符串,还可以是布尔值、列表对象等。

当有多条return语句时,执行第一条return语句就会退出函数,不再执行return后面的语句。

如果函数没有return语句,自动返回None,表示没有返回值。

return语句可以返回多个值,此时实际上返回的是一个元组对象。


变量作用域

函数内部创建的对象只能在函数内部访问,这种变量称为局部变量。

函数外部定义的变量可以被程序的任何部分访问,这种变量称为全局变量。

Python3中全局变量在函数内访问时需要用global指明是访问全局变量。


常用内建函数

dir函数

         返回由给定模块、类、实例,或其他类型的所有成员组成的列表,在交互式python解释器下很有用,也可以用在其他地方。

help函数

         启动内置的帮助系统(此函数主要在交互式中使用)。如果没有实参,解释器控制台里会启动交互式帮助系统。如果实参是一个字符串,则在模块、函数、类、方法、关键字或文档主题中搜索该字符串,并在控制台上打印帮助信息。如果实参是其他任意对象,则会生成该对象的帮助页。

open函数

         打开file 并返回对应的file object。如果该文件不能打开,则触发OSError。

len函数

         返回对象的长度(元素个数)。实参可以是序列(如 string、bytes、tuple、list 或 range 等)或集合(如 dictionary、set 或 frozen set 等)。

sum(iterable[,start])

         从start 开始自左向右对iterable 中的项求和并返回总计值。start 默认为0。iterable 的项通常为数字,开始值则不允许为字符串。

sorted(iterable,*,key=None,reverse=False)

         根据iterable 中的项返回一个新的已排序列表。

         具有两个可选参数,它们都必须指定为关键字参数。

         key 指定带有单个参数的函数,用于从iterable 的每个元素中提取用于比较的键 (例如key=str.lower)。默认值为None (直接比较元素)。

         reverse 为一个布尔值。如果设为True,则每个列表元素将按反向顺序比较进行排序。

         使用functools.cmp_to_key()可将老式的cmp 函数转换为key 函数。

         内置的sorted()确保是稳定的。如果一个排序确保不会改变比较结果相等的元素的相对顺序就称其为稳定的 --- 这有利于进行多重排序(例如先按部门、再按薪级排序)。

filter(function,iterable)

         用iterable 中函数function 返回真的那些元素,构建一个新的迭代器。iterable 可以是一个序列,一个支持迭代的容器,或一个迭代器。如果function 是None ,则会假设它是一个身份函数,即iterable 中所有返回假的元素会被移除。

max(iterable,*[,key,default])

max(arg1,arg2,*args[,key])

         返回可迭代对象中最大的元素,或者返回两个及以上实参中最大的。

         如果只提供了一个位置参数,它必须是非空iterable,返回可迭代对象中最大的元素;如果提供了两个及以上的位置参数,则返回最大的位置参数。

         有两个可选只能用关键字的实参。key 实参指定排序函数用的参数,如传给list.sort()的。default 实参是当可迭代对象为空时返回的值。如果可迭代对象为空,并且没有给default ,则会触发ValueError

         如果有多个最大元素,则此函数将返回第一个找到的。

map(function,iterable,...)

         返回一个将function 应用于iterable 中每一项并输出其结果的迭代器。如果传入了额外的iterable 参数,function 必须接受相同个数的实参并被应用于从所有可迭代对象中并行获取的项。当有多个可迭代对象时,最短的可迭代对象耗尽则整个迭代就将结束。

range(stop)

range(start,stop[,step])

         虽然被称为函数,但range实际上是一个不可变的序列类型,通常用于在for循环中循环指定的次数。

         range构造器的参数必须为整数(可以是内置的int或任何实现了__index__ 特殊方法的对象)。如果省略step 参数,其默认值为1。如果省略start 参数,其默认值为0,       如果step 为零则会引发ValueError

         如果step 为正值,确定 range r 内容的公式为r[i] = start + step*i 其中i >= 0 且r[i] < stop。

         如果step 为负值,确定 range 内容的公式仍然为r[i] = start + step*i,但限制条件改为i >= 0 且r[i] >stop.

         range类型相比常规list或tuple的优势在于一个range对象总是占用固定数量的(较小)内存,不论其所表示的范围有多大(因为它只保存了start,stop和step 值,并会根据需要计算具体单项或子范围的值)。

enumerate(iterable,start=0)

         返回一个枚举对象。iterable 必须是一个序列,或iterator,或其他支持迭代的对象。enumerate()返回的迭代器的__next__()方法返回一个元组,里面包含一个计数值(从start 开始,默认为 0)和通过迭代iterable 获得的值。

input([prompt])

         如果存在prompt 实参,则将其写入标准输出,末尾不带换行符。接下来,该函数从输入中读取一行,将其转换为字符串(除了末尾的换行符)并返回。

print(*objects,sep=' ',end='\n',file=sys.stdout,flush=False)

         将objects 打印到file 指定的文本流,以sep 分隔并在末尾加上endsep,end,fileflush 如果存在,它们必须以关键字参数的形式给出。

         所有非关键字参数都会被转换为字符串,就像是执行了 str() 一样,并会被写入到流,以sep 且在末尾加上endsepend 都必须为字符串;它们也可以为None,这意味着使用默认值。如果没有给出objects,则 print() 将只写入end

         file 参数必须是一个具有write(string) 方法的对象;如果参数不存在或为None,则将使用 sys.stdout。 由于要打印的参数会被转换为文本字符串,因此 print() 不能用于二进制模式的文件对象。对于这些对象,应改用file.write(...)。

         输出是否被缓存通常决定于file,但如果flush 关键字参数为真值,流会被强制刷新。

©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,132评论 6 478
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,802评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,566评论 0 338
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,858评论 1 277
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,867评论 5 368
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,695评论 1 282
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,064评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,705评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 42,915评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,677评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,796评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,432评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,041评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,992评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,223评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,185评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,535评论 2 343

推荐阅读更多精彩内容