函数及函数式编程
数学中的函数指一种映射的变换关系,如f(x)=2x+1
,转换为Python函数为:
def f(x):
return x*2 + 1
Python中的函数可以理解为一种预先设定的处理过程。
一般过程都会包含输入、处理、和输出三个部分。输入及函数参数,可以有多个,输出即返回值,有可以有多个。
过程分为定义和调用。定义是对参数、处理过程和返回值的描述,调用是使用实际的参数运行函数并得到实际的返回值。
函数定义和调用
def add(x, y): # 定义函数
return x+y
print(add(1,3)) # 调用函数
案例: 用户注册/登录函数
users = {"张三": "123456"}
def reg(username, password):
if users.get(username): # 如果用户中存在username这个key
print("用户已存在")
else:
users[username] = password # 向users字典中添加元素
print("添加成功")
def login(username, password)
if not users.get(username):
print("用户不存在")
elif users['username'] == password:
print("登录成功")
else:
print("密码错误")
参数和返回值
- 函数没有return默认返回None
- 参数支持各种对象,包含数字,支付串,列表,元组,也可以是函数和类
- 参数默认值: 有默认值的参数必须放在最后面, 如```def add(x, y=1, z=2):
- 不定参数: *args和**kwargs, 如
def func(*args, **kwargs):
可以接受任意长度和格式的参数 - 参数及返回值类型注释(Python3)
def(x:int, y:int) -> int: # x,y为int型,函数返回为int型,只是注释,参数格式非法不会报错
return x+y
函数作为参数
如: 装饰器
def a():
print("I'm a")
def deco(func):
print("call from deco")
func()
deco(a) # 输出"call from deco"并调用a(),输出"I'm a"
函数嵌套
如闭包
def a():
a_var = 1
def b:() # 嵌套函数
a_var += 1
函数递归
自己调用自己,直到满足需求
案例: 求N!
def factorial(n):
return 1 if n == 0 or n == 1 else n * factorial(n-1)