chinapnr / fishbase

自主开发、整理的一套 Python 基础函数库,涵盖 system 系统增强包、logger 日志记录增强包、file 文件处理增强包、 date 日期处理函数包、data 数据信息处理函数包、csv 处理增强函数包、crypt 加密/编码增强包等,可减少程序开发工作量、降低引用复杂度。
MIT License
94 stars 29 forks source link

fish_random, gen_random_bank_card,添加默认参数 #229

Closed mindjun closed 4 years ago

mindjun commented 5 years ago

背景

步骤

举例

if not bank_name:
    bank_name = gen_random_bank_name()
if not card_type:
    card_type =  random.choice(['DC', 'CC'])
mindjun commented 5 years ago

具体实现如下:

    if not bank_name:
        # 不指定银行名称时,银行名称从 中国工商银行、中国农业银行、中国银行、中国建设银行 中选取
        bank_name = random.choice(['中国工商银行', '中国农业银行', '中国银行', '中国建设银行'])
    if not card_type:
        card_type = random.choice(['DC', 'CC'])

    bank_info = CardBin.get_bank_info(bank_name)
    if not bank_info:
        raise ValueError('bankname {} error, check and try again'.format(bank_name))

    # 获取银行代码
    bank = bank_info[0][0]

    # 获取 cardbin
    cardbin_info = CardBin.get_cardbin_info(bank, card_type)
    if not cardbin_info:
        raise ValueError('card_type {} error, check and try again'.format(card_type))

    random_cardbin = random.choice(cardbin_info)

    cardbin = random_cardbin[0]
    card_len = random_cardbin[-1]

    # 银行卡前缀
    card_number_str = cardbin

    # 随机生成前N-1位
    while len(card_number_str) < card_len - 1:
        card_number_str += str(random.randint(0, 9))

    # 获取校验位
    check_code = CardBin.get_checkcode(card_number_str)
    return card_number_str + check_code
itaa commented 5 years ago

修改参数名 bank_name ,会有不兼容的情况

mindjun commented 5 years ago

原来的写法,bank_name 和 card_type 都是位置参数,使用者用 gen_random_bank_card('中国银行', 'DC') 的形式调用,跟现在关键字参数,使用同样的方式调用是兼容的,如下举例:

def my_add(a, b):
    return a+b
my_add(1, 2)
>>> 3

def my_add1(kwargs_a=None,kwargs_b=None):
    return kwargs_a + kwargs_b
my_add1(1, 2)
>>> 3

因为我们的方法 gen_random_bank_card 原来是位置参数,使用者如果不适用关键字参数调用(按照习惯也不会使用关键字参数)是可以兼容的。