Python-函数的定义和使用
1.1函数的参数调用
1.1.1可选参数传递
def <函数名>(<非可选参数>,<可选参数>):
<函数体>
return <返回值>
实例如下:
#计算n!//m / 浮点除 // 整数除
def fact(n, m=1) :
s = 1
for i in range(1, n+1):
s *= i
return s//m
print(fact(10)) #>>> 3628800
print(fact(10,5)) #>>> 725760
1.1.2 可变参数传递
函数定义时可以设计可变数量参数,即不确定参数的总数量
def <函数名>(<参数>,*b):
<函数体>
return <返回值>
实例如下:
#计算n!乘以b中数字
def fact(n, *b) :
s = 1
for i in range(1, n+1):
s *= i
for item in b:
s*= item
return s
print(fact(10,3)) #>>> 10886400
print(fact(10,3,5,8)) #>>> 435456000
1.1.3 参数传递的两种方式
- 位置传递
位置不可交换
def fact(n, m=1) :
s = 1
for i in range(1, n+1):
s *= i
return s//m
print(fact(10,5)) #>>>725760
fact(10,5)
- 名称传递
位置可以随名称移动
def fact(n, m=1):
s = 1
for i in range(1, n+1):
s *= i
return s//m
print(fact(m=5,n=10)) #>>>725760
1.2函数的返回值
函数调用时,参数可以按照位置或名称方式传递
def fact(n, m=1) :
s = 1
for i in range(1, n+1):
s *= i
return s//m, n, m
print(fact(10,5)) #>>>(725760, 10, 5)元组类型
a,b,c=fact(10,5)
print(a,b,c) #>>>725760 10 5
1.3局部变量和全局变量
n, s = 10, 100 #全局变量
def fact(n) :#fact中的n和s为局部变量
s = 100
for i in range(1, n+1):
s *= i
return s
print(fact(n), s) #>>>362880000 100
有如下两个规则:
- 局部变量和全局变量是不同变量
- 局部变量是函数内部的占位符,与全局变量可能重名但不同
- 函数运算结束后,局部变量被释放
- 可以使用global保留字在函数内部使用全局变量
n, s = 10, 100
def fact(n) :
global s
for i in range(1, n+1):
s *= i
return s
print(fact(n), s) #>>>362880000 362880000
- 局部变量为组合数据类型且未创建,等同于全局变量
未真实创建
ls = ["F", "f"]
def func(a) :
ls.append(a)#此处ls是列表类型,未真实创建则等同于全局变量
return
func("C")#全局变量被修改
print(ls) #>>>['F', 'f', 'C']
真实创建
ls = ["F", "f"]
def func(a) :
ls=[]
ls.append(a)#此处ls是列表类型,真实创建ls是局部变量
return ls
func("C") #局部变量被修改 为["C"]
print(ls) #>>>['F', 'f'] 输出全局变量
1.4lambda函数
lambda函数返回函数名作为结果
- lambda函数是一种匿名函数,即没有名字的函数
- 使用lambda保留字定义,函数名是返回结果
- lambda函数用于定义简单的、能够在一行内表示的函数
<函数名> = lambda <参数>: <表达式>
~~~~~~~~~~~~~~~~等价于~~~~~~~~~~~~~~~~~~~~~~
def <函数名>(<参数>) :
<函数体>
return <返回值>
```