关于从自定义函数中学到的知识点
函数的定义
# 函数名:1. 名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合
# 2. 不可与内置函数重名(内置函数不需要定义即可直接使用)
def math(x):
# 参数:根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同
# 规范:括号是英文括号,后面的冒号不能丢
y = 3*x + 5
# 函数体:函数的执行过程,体现函数功能的语句,要缩进,一般是四个空格
return y
# return语句:后面可以接多种数据类型,如果函数不需要返回值的话,可以省略
函数的调用
举个例子:
def math(x):
y = x ** 2 + x
return y
y=math(10)
print(y)
print(math(10))
那么该怎么调用函数呢,让它发挥作用呢?很简单,就是输入函数名和参数所对应的值=,这个过程在函数里叫作参数的传递(pass)。
同时还有一种无参数的调用,下面将
比如说刚刚的例子,我们希望计算出当x = 10时y的结果,注意看第五、六行的代码,然后直接运行。
math(10)的意思是将整数10赋值给参数x并运行该函数。函数执行完毕后最终返回了y的值即110,然后将这个结果赋值给变量a,再用print()将变量a打印出来。
当然,也可以只用一行代码print(math(10))来表示同样的意思。
参数类型
无参数
def opening():
print('总有一种味道能温暖你~')
print('深夜食堂正式开业啦!')
print('欢迎来自五湖四海的你前来品尝!')
opening()
--------------------------------------------------
总有一种味道能温暖你~
深夜食堂正式开业啦!
欢迎来自五湖四海的你前来品尝!
我们可以看到,这里定义了一个opening()函数,但是括号里没有带参数,原因是这个函数的功能是打印出固定的三句话,不需要参数的参与。
需要强调的是,即便是没有参数,我们在调用函数的时候也不能省略括号,如此例中的opening()。
在这个例子里,也不需要return语句,原因是这个函数直接在屏幕打印出内容,不需要返回值。事实上,没有return语句的函数,Python也会在末尾隐性地加上return None,即返回None值。
换句话说,有时候我们需要的只是函数的执行过程(比如打印内容),有时我们需要函数执行完毕的返回结果。
位置参数与默认参数
那接下来,我们来看看有多个参数的情况。
在开业初期,为了吸引人流,你采取的策略是顾客可以任意点菜。但因为人手不足,所以只能为每个人提供一份开胃菜和一份主食和一份甜点。如果写成函数的形式,这个函数就会有三个参数。
def menu(appetizer, course, dessert = '绿豆沙'):
print('一份开胃菜:' + appetizer)
print('一份主食:' + course)
print('一份甜品:' + dessert)
menu('话梅花生','牛肉拉面')
print('')
menu('话梅花生','牛肉拉面','银耳羹')
#银耳羹对应参数dessert
-------------------------------------------------
一份开胃菜:话梅花生
一份主食:牛肉拉面
一份甜品:绿豆沙
一份开胃菜:话梅花生
一份主食:牛肉拉面
一份甜品:银耳羹
一个萝卜一个坑,因为前两个位置参数已经有对应的值传递,Python会自动将’银耳羹’传递给参数dessert,替换了默认参数的默认值。
不定长参数
后来呢,盛夏来袭,你觉得卖烧烤是个不错的主意。但问题是每个人点的烤串数量都不同,你也不能限定死数量,这时候【不定长参数】就能派上用场,即传递给参数的数量是可选的、不确定的。
它的格式比较特殊,是一个星号*加上参数名,它的返回值也比较特殊,我们来看看下面的例子。
def menu(*barbeque):
return barbeque
order = menu('烤鸡翅','烤茄子','烤玉米')
#括号里的这几个值都会传递给参数barbeorder
print(order)
print(type(order))
-------------------------------------------
('烤鸡翅', '烤茄子', '烤玉米')
<class 'tuple'>
你会发现函数返回的是这样的结果:(‘烤鸡翅’, ‘烤茄子’, ‘烤玉米’),我们用type()函数可以知道这种数据类型叫作元组(tuple)。
元组的写法是将数据放在小括号()中,它的用法和列表用法类似,主要区别在于列表中的元素可以随时修改,但元组中的元素不可更改。
和列表一样,元组是可迭代对象,这意味着我们可以用for循环来遍历它,这时候的代码就可以写成:
def menu(*barbeque):
for i in barbeque:
print('一份烤串:' + i)
menu('烤香肠', '烤肉丸')
print(