基于Python3版本的学习。
函数(Function)
函数是组织好的、可以重复使用的、用来实现单一功能的代码。
在Python中,给函数输入数据,它就能执行相应的功能,最终输出你想要的结果。
内置函数
Python本身自带的函数叫内置函数 ,提供了许多我们常用的基本功能。
常用的内置函数有:
打印函数:print()
输入函数:input()
返回对象(字符、列表、元组等)长度或项目个数的函数:len()
返回对象类型的函数:type()
浮点数转换函数:float()
整型转换函数:int()
字符串转换函数:str()
每个函数后面都带有一个英文括号,括号里放的东西,也就是我们需要输入给函数的数据,它在函数中被称作参数 。参数指向的是函数要接收、处理怎样的数据(你也可以把它理解成自变量)。
定义函数
除了Python自带的内置函数,还可以自行定义函数并调用。
定义函数的语法:
def 函数名(参数):
函数体
return语句
具体代码:
def math(x):
y = 3x + 5
return y
第1行:def 的意思是定义(define),math是函数名 (自己取的),再搭配一个英文括号和冒号,括号里面的x是参数(参数名也是自己取)。
第2行: def下一行开始缩进的代码就是函数要实现的功能,也叫函数体 。这里的功能就是:根据x计算出一个值y。
第3行: return语句是返回的意思,可以指定函数执行完毕后最终会返回什么值或表达式,否则计算机是无法判断出函数最终要输出什么结果的。
定义函数语法注意事项:
函数名:
1.名字最好能体现函数的功能,一般用小写字母和单下划线、数字等组合
2.不可与内置函数重名(内置函数不需要定义即可直接使用)
参数: 根据函数功能,括号里可以有多个参数,也可以不带参数,命名规则与函数名相同
规范: 括号是英文括号,后面的冒号不能丢
函数体: 函数的执行过程,体现函数功能的语句,要缩进,一般是四个空格
return语句: 后面可以接多种数据类型,如果函数不需要返回值的话,可以省略
函数的调用
位置参数
函数调用时可以用如下方式调用:
#函数的定义
def add(a,b):
x = a+b
return x
#函数的调用
y = add(2,3) # y 用于接收返回值的变量
在调用时使用的参数被称为实参 。
其中,a,b被成为伪参数 ,2,3被成为实参数 。
从原则上说引入和定义时所指定的参数个数的数量要一样,当有多个参数的时候,我们就必须按照顺序和数量传递。
如果调用时函数不具备参数,调用方式如下:
def getHello():
return 'Hello'
s = getHello()
调用时即便是没有参数,我们在调用函数的时候也不能省略括号。
关键参数
可以通过使用伪参数的名字来指定其对应的实参。
def subtract(a,b):
x = a-b
return x
y = subtract(b=3,a=7)
实参的顺序不需要与伪参数一致。
默认参数
可以给参数规定一个默认值的函数,指定了默认值的函数在被调用时,参数可以省略。
def multiply(n,t=2): # 规定默认参数 t ,设置默认值为 2
x = n*t
return x
a = multiply(5) #可以省略第二个参数
默认参数可以从右侧的参数开始设置多个,但是不可以将中间的某个参数作为默认值。
即:
# 正确方法
def func(a,b=1,c=0):
...
# 错误方法
def func(a,b=1,c):
...
不定长参数
如果传递给参数的数量是可选的、不确定的,可以使用一个星号 * 加上 参数名 调用函数。
def avg(*args):
sum = 0
for n in args:
sum += n
return sum/len(args)
如果在伪参数之前使用两个星号 ** 加上 参数名 调用函数,就可以将关键参数作为字典来接受。
def printDic(**args):
for s,t in args.items():
print(s,':',t)
printDic(a=20,b=30,c=50)
#运行结果
a:20
b:30
c:50
返回多个值
函数,不仅可以支持输入多个参数,而且也可以同时输出多个值。
要返回多个值,只需将返回的值写在return语句后面,用英文逗号隔开即可。
return b, '函数返回值'
变量范围
局部变量: 在函数内部赋值的变量仅能在该函数内部使用(局部作用域)。
全局变量: 在所有函数之外赋值的变量,可以在程序的任何位置使用(全局作用域)。
解决“局部变量”和”全局变量“之间的矛盾,有几种方法可供参考:
第一种方法最取巧: 把局部变量都放在函数外,变成全局变量。
第二种方法: 使用全局变量声明语句 global语句 ,全局变量声明必须在赋值之前。
def egg():
global quantity # 全局变量声明必须在赋值之前
quantity = 108
egg()
print(quantity)
函数的嵌套
函数的嵌套,顾名思义就是定义函数中的函数。
def funcA():
print('A')
def funcB():
print('B')
def main():
while True:
num1 = int(input('请输入一个整数:'))
if num1 == 0:
funcA()
else:
funcB()
break
main()
def语句后的代码块只是封装了函数的功能,如果没有被调用,那么def语句后面的代码永远不会被执行。
这里的调用语句是main(),所以会直接执行main()函数里的代码。