09function

本文最后更新于 2022-05-26 11:25:30

function 函数

函数的创建

1
2
3
def 函数名([输入参数]):
函数体
[return xxx]
1
2
3
def calc(a,b):
c=a+b
return c

函数参数传递

1
2
3
4
5
6
7
8
9
def func1(a, b):
return a - b

# 根据位置传参
var1 = func1(1, 2)
print(var1) # -1

# 根据关键字传参
print(func1(b=1, a=2)) # 1

参数传递类型

1
2
3
4
5
6
7
8
9
10
11
12
13
def func2(arg1,arg2):
print(arg1)
print(arg2)
arg2.append(1)
arg1=1

var2= 11
var3=[11,22,33]
func2(var2,var3)
print(var2) # 基本类型传值(不可变类型) 没修改到
print(var3) # 传的地址(可变类型) 所以修改到了
# 11
# [11, 22, 33, 1]

函数返回多个值

1
2
3
4
5
6
7
8
9
10
11
12
def func3(num):
odd=[]
even=[]
for i in num:
if i%2:
odd.append(i)
else :
even.append(i)
return odd,even
print(func3([1,2,3,4,5,6,8,9]))
# 当返回多个参数时 封装成元组
# ([1, 3, 5, 9], [2, 4, 6, 8])

函数参数默认值

1
2
3
4
5
6
7
8
9
# 定义带默认值函数
def func4(a,b=10):
return a+b


print(func4(10)) # b使用默认值
print(func4(10, 20))
# 20
# 30

可变位置形参

1
2
3
4
5
6
7
8
9
10
# 可变位置形参 封装成元组 类似于 java中...
def func5(*args):
print(args)

func5(1)
func5(1,2)
func5(1,2,3)
# (1,)
# (1, 2)
# (1, 2, 3)

可变位置关键字形参

1
2
3
4
5
6
7
8
# 可变位置关键字形参 封装成字典
def func6(**args):
print(args)

func6(a=1,b=2)
func6(kk=1,vv=1)
# {'a': 1, 'b': 2}
# {'kk': 1, 'vv': 1

多种可变类型形参组合

1
2
3
4
5
6
7
8
9
# 可变形参一个类型在一个方法里面只能有一个
# 不能同时有两个 * 或 ** 存在
def func7(*args1,**args2):
print(args1)
print(args2)

func7(1,2,3,a=11,b=22)
# (1, 2, 3)
# {'a': 11, 'b': 22}

将list转换为位置实参传入

1
2
3
4
5
6
7
8
9
10
11
func7(1,2,3,a=11,b=22)
# (1, 2, 3)
# {'a': 11, 'b': 22}

def func7(a,b,c):
print(a,b,c)

lst=[1,2,3]
func7(*lst)
# 在函数调用时,将列表中的每个元素转换为位置参数传入
# 如果不加* 就会认定为传入的lst为第一个参数a

将dict转为关键字实参传入

1
2
3
4
5
# 将字典中的键值对转换为关键字实参传入
# key必须和func7中形参的名称匹配
dic2={'a':1,'c':2,'b':3}
# func7(a=1,b=2,c=3)
func7(**dic2)

指定特定的参数使用关键字实参传递

1
2
3
4
5
6
7
8
def func8(a,b,*,c,d):
print(a)
print(b)
print(c)
print(d)

# c d必须使用关键字传参
func8(1,2,c=4,d=3)

变量作用域

1
2
3
4
5
6
7
8
9
10
11
12
13
var4 = 1  # 全局变量
age = 1
def fun9(a, b):
# 若想在函数内部对函数外的变量进行操作,就需要在函数内部声明其为global。
# 并且要在函数内部声明
global age # 将age声明为全局变量 age必须在外部有定义
c = a + b # c:局部变量

age = c
print(c)
print(var4)

print(age)
1
2
3
4
5
6
7
8
9
10
11
# nonlocal关键字
# 使用nonlocal关键字可以在一个嵌套的函数中修改嵌套作用域中的变量。
def func():
name = 'pythontab'
def foo():
nonlocal name
name = 'pythontab.com'
foo()
print(name)
func()
# pythontab.com

global和nonlocal区别

  • 两者的功能不同。global关键字修饰变量后标识该变量是全局变量,对该变量进行修改就是修改全局变量,而nonlocal关键字修饰变量后标识该变量是上一级函数中的局部变量,如果上一级函数中不存在该局部变量,nonlocal位置会发生错误(最上层的函数使用nonlocal修饰变量必定会报错)
  • 两者使用的范围不同。global关键字可以用在任何地方,包括最上层函数中和嵌套函数中,即使之前未定义该变量,global修饰后也可以直接使用,而nonlocal关键字只能用于嵌套函数中,并且外层函数中定义了相应的局部变量

递归函数

1
2
3
4
5
6
7
# 递归函数
def func10(n):
if(n==1):
return 2
else:
return n*func10(n-1)
print(func10(10))

09function
https://jiajun.xyz/2020/10/26/python/01base/09function/
作者
Lambda
发布于
2020年10月26日
更新于
2022年5月26日
许可协议