函数
##函数基础
什么是函数?
函数指的是一段被封装起来的代码块,它可以重复使用,来实现一个或多个关联的功能。
如python内置函数len()是求出字符串或数组长度(元素个数)。
print(len("Python"))
print(len([1,2,3,4,5,6,7,8,9])
结果:
6
9
###函数的定义
即命名一个函数:
函数代码块以 def 关键词开头,后接函数标识符名称和圆括号 ()。如 def add():
任何传入参数和自变量必须放在圆括号中间,圆括号之间可以用于定义参数。
函数的第一行语句可以选择性地使用文档字符串—用于存放函数说明。(用3引号注释)
函数内容以冒号起始,并且缩进。
return [表达式] 结束函数,选择性地返回一个值给调用方。不带表达式的return相当于返回 None。
定义函数语法:
def 函数名(参数列表):
函数体
#如:
def add(a,b):
return a+b
###函数调用
调用,即引用函数,通过给函数中参数赋值(传参)的方式使用函数中的代码实现具体的功能。
调用函数的格式为 函数名([参数值]),函数有参数时,需要赋值给对应参数,若没有,则不需要赋值。
比如调用上面的add()函数。
print(add(4,5)) # 打印调用后的结果
use_function = add(1,4) # 使用一个对象(变量)来调用函数,即将函数代码块的结果赋予给一个变量
print(use_function) # 输出调用对象(调用方)
打印结果:
9
5
##参数
参数的定义
参数就是在定义函数时,括号中定义的变量,这种参数又称为形式参数,简称形参。
函数调用时,赋予参数的值是实际参数,是实实在在的,简称实参。
调用函数时给形参传递实参的过程成为传参。
参数的分类
- 必需参数:
在定义函数时命名的参数,在调用函数时,必须给它(们)赋值,且顺序要与函数的参数一致,必需参数又称为位置参数。
- 关键字参数:
在调用函数时,根据参数名进行赋值。如add(a=3,b=1)
- 默认(值)参数:
在定义函数时,给参数直接赋值。如add(a,b=3),设置默认值参数必须放在位置参数后面。在函数调用时,可以不需要给设置了默认值的形参传参。
- 不定长参数:
在定义函数时,参数名前加1个星号(*),表示这个参数是一个容器,可以传任意个实参。
###传参示例
必需参数示例:
def add(a,b):
return a+b
c = add(4,5)
print(c)
输出结果:
9
关键字参数示例:
def add(a,b):
return a+b
c = add(a=3,b=4)
print(c)
输出结果:
7
默认值参数:
def add(a,b=5):
return a+b
c = add(6)
输出结果:
11
不定长参数:
def add(*nums):
return nums
c = add(1,3,4,5,6)
for i in c:
print(i)
输出结果:
1
3
4
5
6
##return语句
函数体的返回值是通过return实现返回的,在函数体中,代码块结束没有return语句,返回结果为None
举例:
def add(a,b):
a+b
c = add(4,5)
print(c)
输出结果:
None
# 注意:因为上述函数中没有使用return语句,所以不会返回函数体执行的结果,只会返回None
##变量的作用域
顾名思义,变量的作用域,就是指变量的影响范围(能生效的代码块)。即变量能够作用的范围取决于它在什么地方赋值的。
根据变量的影响范围可以分为:
- 全局变量:通常是指在代码最开始就进行赋值的变量,它将可能影响自它以下所有的代码
- 局部变量:参考同级别缩进的代码块进行定义和赋值的变量,它只能影响当前缩进级别及以下的代码块。
- 成员变量:通常伴随着成员运算符in一起出现,用于判断该变量是否属于某个数组或集合。
# Python 中只有模块(module),类(class)以及函数(def、lambda)才会引入新的作用域,即这类变量无法影响到模块、函数和类。
# 其它的代码块(如 if/elif/else/、try/except、for/while等)是不会引入新的作用域的,也就是说这些语句内定义的变量,外部也可以访问
###示例
全局变量
x = 1
while x <= 10:
print("判断正确")
x += 1
# while循环会受x初始值1的影响来执行判断,即1是否小于或等于10,据此来决定是否执行while循环体。
局部变量
x = 3
def add():
x = 5 # 函数内部生效的变量,无法访问外部变量(不受x = 3的影响)
y = 6
return x*y
print(add())
输出结果:
30
成员变量大多在for循环中的循环变量,用于确定某个变量是否属于某个数组或集合
x = 1
y = [1,2,3]
print(x in y)
输出结果:
True
##global和nonlobal关键字
global关键字是声明需要重新定义(赋值)某个变量,将其声明(修改)为全局变量,在重新声明后的代码中都生效。
global和nonlocal作用相同。
举例:
sum = 0
def add(a,b):
global sum #声明sum即将被重新赋值,且会影响之后的全局代码
print("原本sum的值是:%d"%(sum))
sum = (a+b)**2 #通过(a+b)**2的结果赋值给sum作为新的值
return sum
print("现在sum的值是:%d"%(add(4,5)))
输出结果:
0
81