mysql中(2) with check option能起什么作用?_py_skills_2

https://github.com/piglei/one-python-craftsman​github.com https://github.com/crazyguitar/pysheeet​github.com

41d4b885b67a6688da78ebf51633d36b.png

f24d8f42177ddabe34d5283c53782df0.png

ce8953287830cdd6f6aba6488c601f94.png

49d2cb24310954d28d1e40525dea21bf.png

f1fdf48dd2a5b678f2fe2c7c5c65517f.png

9a88efb90a09f2351f975e52752ac6c5.png

1cf7487432809559a8e334a52fbf57a2.png

a97d23f00bf026ec1020d621d57ce2ef.png

bb170e41b66f1b7b929c3b0e8583746d.png

fd93924a4d1c538af318447f22195e35.png

ce9c60b1a7bf20072c2ffae33bf2f810.png

58b0b1eebf5888971979b117068fccc2.png

6d7b3f29d95be21e05426d3f4af7e5c2.png

c8975b77c3d9a49d04f5722e5860018c.png

5576d202e11dac74042565d40735f913.png
# -*- coding:utf-8 -*-
import random
import wrapt

def provide_number_v1(min_num, max_num):
    """装饰器:随机生成一个在 [min_num, max_num] 范围的整数,追加为函数的第一个位置参数
      嵌套层级深、无法在类方法上使用
    """
    def wrapper(func):
        def decorated(*args, **kwargs):
            num = random.randint(min_num, max_num)
            # 将 num 作为第一个参数追加后调用函数
            return func(num, *args, **kwargs)
        return decorated
    return wrapper

#使用 wrapt 模块编写更扁平的装饰器
def provide_number(min_num, max_num):
    @wrapt.decorator
    def wrapper(wrapped, instance, args, kwargs):
        # 参数含义: wrapt 模块是一个专门帮助你编写装饰器的工具库。
        #
        # - wrapped:被装饰的函数或类方法
        # - instance:
        #   - 如果被装饰者为普通类方法,该值为类实例
        #   - 如果被装饰者为 classmethod 类方法,该值为类
        #   - 如果被装饰者为类/函数/静态方法,该值为 None
        #
        # - args:调用时的位置参数(注意没有 * 符号)
        # - kwargs:调用时的关键字参数(注意没有 ** 符号)
        #
        print("instance ", instance) # instance <__main__.Foo2 object at 0x0A3F309ECC0>
        num = random.randint(min_num, max_num)
        # 无需关注 wrapped 是类方法或普通函数,直接在头部追加参数
        args = (num,) + args

        return wrapped(*args, **kwargs)
    return wrapper


@provide_number_v1(1, 100)
def print_random_number(num):
    print(num)

class Foo:
    @provide_number_v1(1, 100)
    def print_random_number(self, num):
        print(num)

class Foo2:
    @provide_number(1, 100)
    def print_random_number(self, num):
        print(num)

print_random_number() # 26
Foo().print_random_number() # <__main__.Foo object at 0x000001A3F309ECC0>
# 方法将会输出类实例 self ,而不是我们期望的随机数 num
Foo2().print_random_number() # 15
import functools

#记得用 functools.wraps() 装饰内层函数,修改外层变量时记得使用 nonlocal
def counter(func):
    """装饰器:记录并打印调用次数"""
    count = 0
    @functools.wraps(func)
    def decorated(*args, **kwargs):
        # 次数累加
        nonlocal count # 不加这个会报错
        #nonlocal 关键字告诉解释器 count 变量并不属于当前的 local 作用域,去外面找找吧
        count += 1
        print(f"Count: {count}")
        return func(*args, **kwargs)
    return decorated

@counter
def foo():
    pass

foo()

b9b5cdab9538a8c3fcb58ac63f53ed79.png

1.打印漂亮的json字符串

# -*- coding:utf-8 -*-
import json

data = {"status": "OK", "count": 2, "results": [{"age": 27, "name": "lee"},
                                                {"age": 29, "name": "dorra"}]}

def print_json(data):
    print(json.dumps(data, sort_keys=False, indent=4, separators=(', ', ': '), 
         ensure_ascii=False))

data_json = json.dumps(data) # 字典转成json字符串
print(data_json)

print_json(data) # 推荐使用

'''
{"status": "OK", "count": 2, "results": [{"age": 27, "name": "lee"}, {"age": 29, "name": "dorra"}]}
{
    "status": "OK", 
    "count": 2, 
    "results": [
        {
            "age": 27, 
            "name": "lee"
        }, 
        {
            "age": 29, 
            "name": "dorra"
        }
    ]
}

'''

2.实现蜂鸣器,播放mp3文件一次后退出

# -*- coding:utf-8 -*-
import ctypes
import pygame
from mutagen.mp3 import MP3
import time

def beep(): # 实现蜂鸣器
    player = ctypes.windll.kernel32
    player.Beep(1000, 1500)


def play_mp3(): # 播放mp3文件一次后退出
    pygame.mixer.init()
    filename = r'~Desktoptest.mp3'
    audio = MP3(filename)  # 获取mp3的长度
    length = int(audio.info.length)  # 220.32 --> 220

    pygame.mixer.music.load(filename)
    #pygame.mixer.music.play(1, 200)
    pygame.mixer.music.play()
    time.sleep(length)

查找指定目录下 指定子文件夹

res = []
def get_dirlist(dir=des_dir):
    """
    fun: 查找指定目录下 指定子文件夹 eg:ng
    :param dir:
    :return:  返回子文件夹 绝对路径列表
    """
    if os.path.isdir(dir):
        if ("ng" in dir):
            res.append(dir)
            return  # 这样减少 运算量,文件夹下面的文件就不会继续运算了

        for s in os.listdir(dir):
            newDir = os.path.join(dir, s)
            get_dirlist(newDir)


#推荐用glob库实现
#glob.glob(pathname) 匹配的文件路径列表,list类型, 
ps: 只能遍历当前文件夹下的文件,不能遍历子文件夹中的文件

from glob import iglob
#paths = list(iglob("D:MODEL**ng", recursive=True)) #py3.5 支持 iglob
#print(paths)#结果和上面 get_dirlist()是一模一样的
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值