函数 function
定义函数
def 函数名(参数列表):
语句块
....
调用函数
作用是让代表码块执行
len(x)
return 语句
作用:
从一个函数中返回,返回到调用此函数的地方
语法:
return [表达式]
return # 等同于return None
函数的参数传递
def myfun1(a, b, c):
print(a, b, c)
位置传参
myfun1(1, 2, 3)
序列传参
myfun1(*"ABC")
myfun1(*[11,22,33])
(*args)
关键字传参
myfun1(b=20, a=10, c=30)
字典关键字传参
d = {"c":33, "b":22, "a":11}
myfun1(d) ## (kwargs)
函数的缺省参数
default argument
语法:
def 函数名(形参名1=默认实参1, 形参名2=默认实参2, ...):
语句块
def myadd(a, b, c=0, d=0):
return a + b + c + d
print(myadd(100, 200))
print(myadd(100, 200, 300))
print(myadd(100, 200, 300, 400))
-------- 以下讲函数形参(定义函数时) -----------
前情回顾:
函数参数的定义方式:
位置形参
星号元组形参 (*args) type 'tuple'
命名关键字形参
双星号字典形参 (**kwargs) type 'dict'
位置形参
语法
def 函数名(形参名1, 形参名2, ....):
语句块
示例:
def myadd(a, b, c, d): # a,b,c,d为位置形参
return a + b + c + d
星号元组形参
语法
def 函数名(*元组形参名):
语句块
作用
收集多余的位置传参
命名关键字形参:
语法
def 函数名(*,命名关键字形参列表)
# 或
def 函数名(*args,命名关键字形参列表)
作用
所有的参数都必须用关键字传参或字典关键字传参
双星号字典形参
语法:
def 函数名(字典形参名): (kwargs)
语句块
作用:
用于收集多余的关键字传参
函数的参数说明:
位置形参,星号元组形参,命名关键字形参,双星号字典形参和缺省形参可以混合使用
函数参数自左至右的顺序为:
位置形参,星号元组形参,命名关键字形参,双星号字典形参 (a,b,*args,c=0,**kwargs)
综合示例:
def fn(a, b, *args, c, **kwargs):
pass
可以接收任意的位置传参和和关键传参的函数:
def fn(*args, **kwargs):
pass
示例:
实现mymax函数,功能与max函数功能相同
见: mymax.py
练习:
\1. 写一个函数getmin(x) 返回一个列表中的最小数
def getmin(lst):
....
print(getmin("A1B2C3")) # 1
print(getmin([5, 3, 1, 2, 4])) # 1
\2. 写一个函数,传入任意的整数数字,然后将所有的数字相加之和返回
def mysum(...):
...
print(mysum(1, 2, 3, 4)) # 10
print(mysum(100, 200)) # 300
函数变量
函数名是变量,它在创建函数时绑定一个函数
示例1:
def f(): # f为变量,f绑定一个函数
print("hello")
print("world")
f1 = f # 注意f没有加()
f1() # ????
示例2:
def f1():
print("hello")
def f2():
print("world")
f1, f2 = f2, f1
f1() # ???
一个函数可以作为另一个函数的参数传递
示例:
def say_hello():
print("hello world")
def f2(f):
print(f)
f() # 调用f变量绑定的函数
f2(say_hello) # ???
示例:
def goodbye(L):
for x in L:
print("再见", x)
def hello(L):
for x in L:
print("您好", x)
def operator(fn, L):
fn(L) # 调用fn绑定的函数
operator(goodbye, ["Tom", "Jerry"]) # ????
案例:
# 试看懂下面的代码:
def myinput(fn):
L = [3,1,5,9,7]
return fn(L)
print(myinput(max)) # 9
print(myinput(min)) # 1
print(myinput(len)) # 5
print(myinput(sum)) # 25
函数可以作为另一个函数的返回值:
def get_op():
s = input("请输入你的操作: ")
if s == "求最大":
return max
elif s == '求最小':
return min
elif s == '求和':
return sum
L = [2, 4, 6, 8, 10]
f = get_op()
print(f(L)) # ????
练习:
写一个计算器函数get_op, 此函数有一个参数op,如下:
已知有如下函数:
def myadd(x, y):
return x + y
def mymul(x, y):
return x * y
def get_op(s):
... # 此函数需要完成
s = input("请输入计算公式: ") # 10 加 20
L = s.split()
a = int(L[0])
b = int(L[2])
fn = get_op(L[1])
print("结果是:", fn(a, b)) #
# python3 xxx.py
请输入计算公式: 10 加 20
结果是: 30
请输入计算公式: 10 乘 20
结果是: 200
函数的嵌套
函数嵌套是指一个函数里用def语句来创建其它的函数的情况
示例:
def fn_outter():
pr