Python-函数基础

目录:https://www.jianshu.com/p/863c446364a8

函数

函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段。函数能提高应用的模块性,和代码的重复利用率。

一、定义函数

规则:

1、函数代码块由def关键字开头,后接函数名和圆括号;

2、任何传入参数和自变量必须放在圆括号内。圆括号内也可以用于定义参数。

3、函数内容以冒号起始,并且函数体缩进。

4、return [表达式]结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。

语法:

def 函数名(参数列表):

    函数体

实例1(不带参数函数):

def zoo():

    '''

    这里可以用来说明函数作用,参数类型,返回值类型

    '''
    print("欢迎来到动物园")

zoo()   #使用函数名+(),可以直接调用函数

运行结果为:

欢迎来到动物园

实例2(带参数函数):

def zoo(name):

    print("welcome to zoo ",name)

def zoo1(name):

    return "welcome to zoo "+name          #return将结果返回主函数, 即zoo1("LIMing")

zoo("Lisa")                        #因为函数定义中有参数,所以我们要把 ‘Lisa’ 传入函数中

print(zoo1("LiMing"))

#return有返回值,他会将结果返回给函数;print没有返回值,会直接输出结果。

运行结果为:

welcome to zoo Lisa 

welcome to zoo LiMing 


函数调用

我们调用函数只需要使用函数名()就可以完成函数的调用,例如实例1中我们调用zoo()这个函数,直接使用zoo()就完成了调用;当然如果我们调用的函数是有参数的,那么我们在调用函数时也要声明我们需要传入的参数,比如我们的实例2,调用了zoo(name)这个函数,我们就需要使用 zoo("lisa")传入一个参数。

二、带参函数

带参函数的参数类型分为必需参数、关键字参数、默认参数、不定长参数四种。

(1) 必要参数函数

必要参数是最基础的函数调用,要求严格,须以正确的顺序传入函数。调用时的数量必须和声明时的一样。

语法:

def 函数名(必要参数1,必要参数2,...,必要参数N):
    函数体

实例:

def zoo(name1,name2,name3):
    print("今天%s,%s和%s一起去了动物园"%(name1,name2,name3))

zoo("Lisa","LiMing","siri")


运行结果为:

今天Lisa,LiMing和siri一起去了动物园

(2)关键字参数函数

关键字传参可以不遵守参数列表的顺序进行传参。

语法:

def 函数名(参数1,参数2,...,参数N):

    函数体

函数名(参数2=标识符1,参数1=标识符2)

实例:

def zoo(name1,name2,name3):

    print("今天%s,%s和%s一起去了动物园"%(name1,name2,name3))

zoo(name2="Lisa",name3="LiMing",name1="siri")

运行结果为:

今天siri,Lisa和LiMing一起去了动物园       #因为我们指定了参数传递的位置,这次输出的

结果和上个例子有些差别。


(3)默认参数函数

默认参数函数是在函数定义时,给参数附上默认值的定义方式。这样在调用函数时,这个参数可以不传参。

语法:

def 函数名(参数1,参数2=默认值):

    函数体

函数名(参数1=标识符)

实例:

def zoo(name1,name2="siri"):

    print("今天%s和%s一起去了动物园"%(name1,name2))

zoo(name1="Lisa")             #我们并没有传入siri这个参数,但是在函数内还是使用了siri参

数,而她使用的这个siri是我们定义函数时设置好的默认值 。

运行结果为:

今天Lisa和siri一起去了动物园          

(4)不定长参数函数

不定长参数有一个*和两个*两种模式,前者表示会将自身接收的所有参数转换为一个元组,后者必须接收关键字参数传参,他会将接收的参数转换为一个字典。key是关键字参数的参数名称,value是其对应的标识符。

语法:

def 函数名(*args,**kwargs):
    函数体

函数名(1,2,a=3,b=4)

#*args会接收前两个参数,并把它聚合为(1,2),**kwargs会接受后边两个参数,并把它聚合为{"a":3,"b":4}

实例:

def zoo(*args,**kwargs):

    print(args)

    print(kwargs)

zoo("Lisa","Siri","LiMing",BZ="XiaoMing",DY="Wanglaoshi") 

运行结果:

('Lisa', 'Siri', 'LiMing')

{'BZ': 'XiaoMing', 'DY': 'Wanglaoshi'}

‘*’标识符

*标识符更像是一个分隔符,*标识符后的参数必须以关键字参数传入

def zoo(name1,name2,name3):

    print("今天%s,%s和%s一起去了动物园"%(name1,name2,name3))

zoo("Lisa","LiMing",name3="siri")

运行结果为:

今天Lisa,LiMing和siri一起去了动物园

参数传递

在Python中,不可变数据类型传入函数体内,在函数体内发生任何变化时不会影响到变量本身,相当于复制了一个变量。

实例1(传入不可变数据类型):

def zoo(a):

    a=10

    print(a)           

b=2

zoo(b)

print(b)            #因为b为不可变类型,此时的b不会因为函数体内的操作而变化

运行结果为:

10

2

变量b为2,传入函数zoo中并把值赋给了a,这是在函数体内被操作的是a,变量a可以理解为变量b的拷贝,无论变量a发生什么变化,都不会影响变量b的值。

实例2(传入可变数据类型):

def zoo(a)

    a.append([6,7,8,9])

    print(a)

b=[1,2,3,4,5]

zoo(b)

print(b)                #因为此时的b为列表,是可变数据类型,当把b的值传入函数zoo中,对a进行的操作相当于对b本身进行修改。

运行结果为:
[1, 2, 3, 4, 5, [6, 7, 8, 9]] 

[1, 2, 3, 4, 5, [6, 7, 8, 9]] 

可变数据类型变量传入后,在函数内发生变化会影响到主函数中的变量数据,可以理解为把自己本身传了进去。

三、匿名函数 

关键字lambda表示匿名函数,冒号前面的n表示函数参数,可以有多个参数。

 匿名函数有个限制,就是只能有一个表达式,不用写return,返回值就是该表达式的结果。

 用匿名函数有个好处,因为函数没有名字,不必担心函数名冲突。

此外,匿名函数也是一个函数对象,也可以把匿名函数赋值给一个变量,再利用变量来调用该函数: 有些函数在代码中只用一次,而且函数体比较简单,使用匿名函数可以减少代码量,看起来比较"优雅“

语法:

lambda[arg1[,arg2,.....argn]]:expression

例子

sum=lambda arg1,arg2:arg1+arg2

# 调用sum函数

print("相加后的值为 :",sum(10,20))

print("相加后的值为 :",sum(20,20))

运行结果为:

相加后的值为 : 30

 相加后的值为 : 40

四、return 语句

return [表达式] 语句用于退出函数,向调用方返回一个表达式(返回值)。不带参数值的return语句返回None。

def sum(arg1,arg2):# 返回2个参数的和."

    total=arg1+arg2

    print("函数内 :",total)

    return total

# 调用sum函数

total=sum(10,20)

print("函数外 :",total)

运行结果为:

函数内 : 30

函数外 : 30 

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