python 函数与 装饰器
本帖最后由 周大胖子 于 2023-9-9 15:38 编辑# 这是一个示例 Python 脚本。
import copy
import datetime
# 按 Shift+F10 执行或将其替换为您的代码。
# 按 双击 Shift 在所有地方搜索类、文件、工具窗口、操作和设置。
def print_hi(name):
# 在下面的代码行中使用断点来调试脚本。
print(f'Hi, {name}')# 按 Ctrl+F8 切换断点。
# 按间距中的绿色按钮以运行脚本。
# if __name__ == '__main__':
# print_hi('PyCharm')
# 访问 https://www.jetbrains.com/help/pycharm/ 获取 PyCharm 帮助
def d(q):
print(q)
name = [('1', '2'), 'n']
# 1、函数定义从def 开始。
#
# 2、def后面是函数名称,空格分隔,命名规则参考变量命名。
#
# 3、函数名称后面是括号,根据需要设置参数。
#
# 4、括号后面是冒号。
#
# 5、函数体自动向右缩进
# 6.默认值参数的写法
# def t(a,b=2)
# 7关键字写法
# 使用函数时 ,把参数名带进去
# 例如t(b=6,a=1)顺序无所谓
# 形参 函数括号里的
# 实参 调用时传递的
# 8.可变参数
# 可变参数*args和 关键字参数**kwargs
# *args中 关键是星号(*),表示来接收可变数量的参数 例如
# **kwargs使用两个星号来传递可变数量的键值对参数
# 参考地址https://baijiahao.baidu.com/s?id=1759961023284275987&wfr=spider&for=pc
# 9.全局和局部变量:
# gLobal关罐字的添加:
# 只有不可变的类型才需要派加gLobal
# 可变的类型不需要添加global
# 可变与不可变:
# 不可变: 当改变变量的值时,内存id(数据)地址发生了改变 类型 :int str float bool tuple
# 可变 : 里面的内容发生了改变,但是地址没有发生改变 类型:list dict set
# 10注释的用法
# 注释的用法 (三个引号 )
# def dologin(username, password):
# """
# :param username: 用户名
# :param password: 密码
# :return:
# """
# print(username)
# print(password)
# 11 外部变量的引用:
# 1.不是在西最中使用,可以通过sys.getrefcount(a] 引用个最del 交量
# 表示副联了一个引用
# 2,西教的引用:
# 必须要分清盘传递的值是可变美型还是不可变类型
# 如果是可变,里面发生改受,外层就能看到改受后内容如果是不可变,更面发生改变不会影响外部得到交量营
# 12 .local()
# result = Locals() # Locals() 表示查看函数中的局部变量,以字典得形式返回
# print(result)
def tellmewhy():
return 5
s = tellmewhy()
d(s ** 2)
def tell2():
l = tellmewhy()
d(l * 3)
tell2()
# 默认值参数
def tel3(t, t2, t3=False):
print(t, t2, t3)
tel3(1, 2)
def tell4(*args):
print(args)
tell4('6', '7', '8')
# ('6', '7', '8')
# tell4((98, 99))
# ((98, 99),)
def get_sum(*args):
s = 0
for v in args:
s += v
print('和是{}'.format(s))
get_sum()
get_sum(1, 2, 3, 4, 5)
list2 =
get_sum(*list2)
# 和是0
# 和是15
# 和是18
def get_more(**kwargs):
print(kwargs)
get_more(name='张三', nat=18)
# 注释的用法 (三个引号 )
def dologin(username, password):
"""
:param username: 用户名
:param password: 密码
:return:
"""
print(username)
print(password)
# 装饰器 最简单的写法
def debug(func):
def wrapper():
d(": enter{}()".format(func.__name__))
return func()
return wrapper
@debug
def say_hello():
d('hello')
# say_hello = debug(say_hello) 老的写法 当前版本不支持了
# 添加功能并保证原函数名不变
say_hello()
# 装饰器带参数的写法(指定参数名系列)
def debug2(func):
def wrapper(day):
# 这里的参数与传递进来的函数的参数名 需要一致
d('l enter{}()'.format(func.__name__))
return func(day)
return wrapper
@debug2
def tellday(day):
d('这是个带参数的初级装饰器,当前时间是{}'.format(day))
# 获取当前日期
current_date = datetime.date.today()
tellday(current_date)
# 可变参数*args和关键字参数**kwargs
def debug3(func):
def war(*args, **kwargs):
d(' enter{}()'.format(func.__name__))
return func(*args, **kwargs)
return war
@debug3
def telling(day):
d('这是个不定义参数名的装饰器,当前时间是{}'.format(day))
telling(current_date)
页:
[1]