为什么我要使用函数
0) 可以降低代码量(调用函数只需要一行,而拷贝黏贴需要N倍代码)
1) 可以降低维护成本(函数只需修改def部分内容,而拷贝黏贴则需要每一处出现的地方都作修改)
2) 使序更容易阅读(没有人会希望看到一个程序重复一万行“I love you”)
创建函数
使用“def”关键字,要注意函数名后边要加上小括号“()”,然后小括号后边是冒号“:”,然后缩进部分均属于函数体的内容,例如:
1. def MyFun():
2. # 我是函数体
3. # 我也是函数体
4. # 我们都属于函数MyFun()
5.
6. # 噢,我不属于MyFun()函数的了
关键字参数
如果你有一些有许多参数的函数,您想要指定参数中的一些,那么,你可以通过为参数命名来为它们赋值——这叫做参数关键字——我们使用名称(关键字)而不是位置(我们一直使用的)来指定函数的参数。
这有两个优势,一是,使用函数容易,因为我们不需要担心参数的顺序。二是,如果其他参数有默认参数值,我们可以只给我们想赋值的参数赋值。
1. def func(a, b=5, c=10):
2. print('a为', a, '和b为', b, '和c为', c)
3.
4. func(3, 7)
5. func(25, c=24)
6. func(c=50, a=100)
输出:
a为3 和b为7 和c为10
a为25 和b为5 和c为24
a为100 和b为5 和c为50
它是如何工作的:
名为func的函数中有一个参数没有默认参数值,后面两个参数有默认参数值。
第一次使用func(3, 7),参数a得到值3,参数b得到值7,参数c得到默认值10。
第二次使用func(25, c=24),参数a按照参数的位置得到值25,然后参数c按照参数名,也就是参数关键字,得到值24,变量b得到默认值5。
第三次使用func(c=50, a=100),我们为所有给定的值使用了参数关键字。注意,我们为参数c指定值是在参数a之前,尽管在函数定义中a在c前。
关于无返回值时
如果没有使用return语句指定返回值,Python也不是什么都不返回,ta会返回一个none对象,所以我们说Python所有的函数都有返回值
返回多个不同的类型值
默认用逗号隔开,是一元组的形式返回。也可以用列表包含起来返回。
全局变量
不到万不得已不要使用全局变量
1.代码可读性变差。
2.代码安全性降低。
global关键字
希望在函数中修改全局变量的值时使用global修饰该变量。
nonlocal关键字
在嵌套函数中,如果希望在内部函数改变外部海曙的局部变量,用nonlocal修饰该变量
关于调用内部函数返回的一些问题(易混淆)
def funout():
def funin():
Print(‘你成功访问到了in’)
return funin()
这时想访问funin()直接调用funout()即可
def funout():
def funin():
Print(‘你成功访问到了in’)
return funin
这时想访问funin(),需要funout()()才可以访问。
也可以“曲线救国”
go = funout()
go()