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 

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容