python进阶之函数
函数概念
函数是一段可重复使用的代码块,它接受输入参数并返回一个结果。函数可以用于执行特定的任务、计算结果、修改数据等,使得代码更具模块化和可重用性。。
函数本质
一个功能代码块组织在一个函数名下,可以反复调用。
去重
:不在重复造轮子
解耦
:逻辑独立的部分拆解出来
声明和调用
# (1) 函数声明
def 函数名():
# 函数体【功能代码块】
# (2)函数调用
函数名()
example
# 登录功能
def login():
name = input("请输入你的姓名")
password = input("请输入你的密码")
if name == "root" and password == "root123":
print("登录成功")
else:
print("登录失败")
# 函数调用
login()
# 函数调用并赋值给对象a
user_login = login()
# 函数调用
login()
函数参数
函数的参数指的是函数定义中声明的变量,用于接收函数调用时传递的数据。参数允许我们将值或引用传递给函数,以便在函数内部使用这些值进行计算、操作或处理
形参
:函数定义中的参数
实参
:函数调用时传递的实际值
example:
# 注册功能
# 已注册用户的列表
user_register_list = ["root", "admin"]
# 形参name,password,re_password
def register(name, password, re_password):
if name not in user_register_list:
if password == re_password:
print("注册成功")
else:
print("密码不一致")
else:
print("已经注册,请重新用户")
# 传实参
register("root", 123, 123) # 已经注册,请重新用户
register("labi", 123, 123) # 注册成功
函数传递参数本质是变量赋值,且该变量只在函数运行时存在,运行结束销毁
位置参数
按照位置传参,一一对应
# 发送邮件函数
def send_email(subject, body, recipient):
print("发送邮件...")
print(f"收件人:{recipient}", )
print(f"主题:{subject}")
print(f"内容:{body}")
a = "通知"
b = "从明天开始放假,放假三个月"
c = "123@qq.com"
# 函数调用以及传参
send_email(a, b, c)
# 结果
'''
发送邮件...
收件人:123@qq.com
主题:通知
内容:从明天开始放假,放假三个月
'''
默认参数
创建函数时,给实参传递默认值,默认参数放在非默认参数后面
# 首页展示数据
data = ["basketball", "football"]
def home_show(price, goods=None):
print(goods)
print(price)
# 调用和位置传参,默认传参
home_show(100)
home_show(100, data)
关键字参数
指定参数名传参
# 显示游戏角色信息
def user_info(name, eamil, avator, role="战士"):
print(f"姓名:{name}")
print(f"邮箱:{eamil}")
print(f"头像:{avator}")
print(f"角色:{role}")
# 关键字参数一定要放在位置参数后面,默认参数一定要放在最后
user_info("亚索", eamil="example@163.com", avator="yasuo.jpg")
print()
user_info("亚索", eamil="example@163.com", avator="yasuo.jpg", role="坦克")
# 结果
'''
姓名:亚索
邮箱:example@163.com
头像:yasuo.jpg
角色:战士
姓名:亚索
邮箱:example@163.com
头像:yasuo.jpg
角色:坦克
'''
关键字参数一定要放在位置参数后面,默认参数一定要放在最后
可变参数
接收不定数量的变量
*args
**kwargs
# 数据显示
def data_list_print(*data_list):
for i in data_list:
print(i)
def data_dict_print(**data_dict):
for i in data_dict:
print(i)
def data_print(*args, **kwargs):
for i in args:
print(i)
for j in kwargs:
print(j)
data_list_print(*[1, 2, 3])
print("____" * 10)
data_dict_print(**{"a": 1, "b": 2, "c": 3})
print("###" * 10)
data_list_print(1, 2, 3)
print("____" * 10)
data_dict_print(a=1, b=2, c=3, d=4)
print("***" * 10)
data_list = [1, 2, 3]
data_dict = {"a": 1, "b": 2, "c": 3}
data_list_print(*data_list)
print("____" * 10)
data_dict_print(**data_dict)
print(111)
data_print(*data_list)
print(222)
data_print(*data_list, **data_dict)
print(333)
data_print(**data_dict)
作用域 LEGB
- L(Local):局部作用域。包括函数内部定义的变量和参数。在函数内部最先进行变量查找。
- E(Enclosing):嵌套函数的父函数的作用域。如果在当前函数内部找不到变量,就会向上一层嵌套的函数中查找。
- G(Global):全局作用域。在模块层次定义的变量,对于整个模块都是可见的。
- B(Built-in):内置作用域。包括 Python 的内置函数和异常。
# global x # 在函数内部使用,声明为全局变量,全局中可以拿到,多层函数嵌套只会在最外层变量值改变
# nonlocal y #用于在函数内部声明一个变量为非本地变量,表示在函数内部对该变量的修改将影响到上一级的嵌套作用域中的变量.
x = 10
def outer():
x = 20
def xx():
x = 3333
def inner():
global x
x = 40
print(x) # 40
inner()
print(x) # 3333
xx()
print(x) # 20
outer()
print(x) # 40
x = 10
def outer():
x = 20
def inner():
nonlocal x
x = 40
print(x) # 40
inner()
print(x) # 40
函数返回值 return
def show():
return "哈哈"
res = show()
print(res) # 哈哈
def show():
return
res = show()
print(res) # None
def show():
print("")
res = show()
print(res) # None
常用的内置函数
import math
# 输入 math. 可以看到很多的数学函数
# 就不多说了
函数到此就全面结束了,相信你再也遇不到python中你不理解的函数了