函数
在前面我们已经学习了字典,列表等数据类型,以及循环,今天呢,我们就要迈向学习中的第一个山峰——函数。
首先,我们来了解一下函数为什么会出现,它解决的问题又是什么。
- 函数的出现,是为了简洁代码块,同时提高可阅读性。一个程序由若干个代码块编辑,其中会有需要重复写的内容,这样就大大的增加工作时间,以及代码的可阅读性和观赏性,从而变出现了函数。
- 代码编写成函数后,重复内容只需要调用,实现了代码复用和降低编程难度
定义一个函数
函数基本的语法格式如下:
♾️ python 代码:def 函数名称(参数1[,参数2,参数3...]):
代码块
代码块
return 返回值
- 函数代码块以 def 关键词开头,后接函数名称和圆括号 ()。
- 任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
- 函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。
- 函数内容以冒号 : 起始,并且
缩进
。 - return [表达式] 结束函数,选择性地返回一个值给调用方,不带表达式的 return 相当于返回 None。
我们来看一下函数的基本写法:
♾️ python 代码:#建立一个名为hello的函数
def hello():
print("哈哈哈哈")
#调用函数hello
hello()
hello()
hello()
hello()
上面的函数运行之后,会输出五次 hello
里面的内容,如果不用函数,就要一行一行的写。显得很繁琐。
哈哈哈哈
哈哈哈哈
哈哈哈哈
哈哈哈哈
我们来看一下,复杂一点的函数。
♾️ python 代码:a = int(input("输入吧:"))
b = int(input("输入吧:"))
#建立一个名为hello的函数
def hello(a,b):
if a > b:
print("土豆")
return a
elif a == b:
print("还是")
return a,b
else:
print("优秀")
return b
print(hello(a,b))
我们来用函数计算一下面积:
♾️ python 代码:a = float(input("输入长:"))
b = float(input("输入宽:"))
#建立一个名为area的函数
def area(a,b):
return a*b
print("长:",a,"宽:",b,"面积:",area(a,b))
关键词参数(参数名称=值)
该参数使用的方式是在调用函数时,参数用 参数名称=值
这种形式传递。其实在上述传递一个和多个参数的时候,也可以应用该方式传递参数,例如修改代码如下:
# 声明一个带一个参数的函数
def show(name):
print("传递进来的姓名是:", name)
show(name="橡皮擦")
# 声明一个带多参数的函数
def show1(name, age):
print("传递进来的姓名是:", name, " 年龄是:", age)
show1(name="土豆", age=20)
参数默认值
在定义函数的时候可以给参数一个默认值,如果调用该函数没有给该参数赋值,程序会使用默认值而不会报错。
♾️ python 代码:#建立一个名为jiushneg的函数
def jiushneg(name="土豆"):
print("我得名字是:",name)
jiushneg()
这样后面不跟参数也不会报错,如果不给定的话,就会报错哟,也就是说,下面这个代码是错误的.
♾️ python 代码:#建立一个名为jiushneg的函数
def jiushneg(name):
print("我得名字是:",name)
jiushneg()
#会报错
值得注意的是,多个参数下,如果只有一个有默认值,那么把这个写在最后面,也就是最右侧。
函数返回值,return语句
函数如果没有写返回值即 return
,那 Python
会自动在函数体内增加一行代码 return None
。函数的返回值可以赋值给一个变量,通过打印该变量,即可知道返回的具体内容。
#建立一个名为jiushneg的函数
def jiushneg(name="土豆"):
print("我得名字是:",name)
return
print(jiushneg())
运行后就会返回一个 None
我得名字是: 土豆
None
返回一个或多个值
如果说想好返回一个值,那么就在 return
后面跟上参数即可,多个值用 ,
号隔开
#建立一个名为jiushneg的函数
def jiushneg(a = 18,name="土豆"):
print("我得名字是:",name,"我得大小是:",a)
return name #返回一个值
return name,a #返回多个值
print(jiushneg())
传递任意数量的参数
在 Python 编写代码的过程中,很容易出现一种情况是你不知道有多少个参数,这时函数定义时参数就不好设定了,好在 Python 已经想到了这个情况。
♾️ python 代码:def show(*keys):
print("传入的参数可以循环打印")
for key in keys:
print(key)
show(1,2,3,4,5,6,7)
该语法重点就是 *
,后面跟个参数名就OK了。
有一般参数,又有不定数量的参数,就使用下面的格式。
def show(name,size,*keys):
print("传入的参数可以循环打印")
print(name)
print(size)
for key in keys:
print(key)
show("土豆",18,"大","大","大")
一般参数与任意数量的关键词参数
参数里面还有一种情况是需要传不定数量的关键词参数,这又如何设计呢?
♾️ python 代码:def show(**args):
print("传入的参数可以循环打印")
for key in args.items():
print(key)
show(name="橡皮擦", size=18)
加了两个星号 ** 的参数会以字典的形式导入。
匿名函数
python 使用 lambda 来创建匿名函数。
所谓匿名,意即不再使用 def 语句这样标准的形式定义一个函数。
- lambda 只是一个表达式,函数体比 def 简单很多。
- lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去。
- lambda 函数拥有自己的命名空间,且不能访问自己参数列表之外或全局命名空间里的参数。
- 虽然lambda函数看起来只能写一行,却不等同于C或C++的内联函数,后者的目的是调用小函数时不占用栈内存从而增加运行效率。
语法
lambda 函数的语法只包含一个语句,如下:
♾️ python 代码:lambda [参数列表]:表达式
# 英文语法格式
lambda [arg1[,arg2,arg3....argN]]:expression
我们来看一下实际演示代码:
♾️ python 代码:fun = lambda x:x+1
print(fun(2))
lambda 表达式与 def 定义函数的区别
- 一个有函数名,一个没有函数名
- lambda 表达式 : 后面,只能有一个表达式,多个会出现错误。
- for 语句不能用在 lambda 中使用
- lambda 表达式不能共享给别的程序调用
- lambda 表达式能作为其它数据类型的值比如:
my_list = [lambda a: a**2, lambda b: b**2]
fun = my_list[0]
print(fun(2))
总结
函数还有很多,我们先学习一小部分。慢慢来,一步有个脚印。
::(酸爽)