python 函数进阶

#设计一个生成验证码的函数
import random
import string

ALL_CHARS = string.digits + string.ascii_letters
print(ALL_CHARS)

def generate_code(code_len = 4):
    return ''.join(random.choices(ALL_CHARS, k = code_len))

def get_suffix(filename):
    pos = filename.rfind('.')
    if pos <= 0:
        return ''
    return filename[pos + 1:]

print(get_suffix('maxiaoyang.mahuan'))

#可变参数
def calc(*args):
    result = 0
    for arg in args:
        if(type(arg) in (int, float)):
            result += arg
    return result

print(calc(1, 2, 3))

#可变参数 + 关键字参数

def cal(*args, **kwargs):
    result = 0
    for arg in args:
        if type(arg) in (int, float):
            result += arg
    for value in kwargs.values():
        if type(value) in (int, float):
            result += value
    return result

print(calc())
print(cal(1, 2, 3))
print(cal(1, 2, d=4, a=2))

#高阶函数
def ca(*args, init_value, op, **kwargs):
    result = init_value
    for arg in args:
        if type(arg) in (int, float):
            result = op(result, arg)
    for value in kwargs.values():
        if type(value) in (int, float):
            result = op(result, value)
    return result

def add(x, y):
    return x + y
def mul(x, y):
    return x * y

print(ca(1, 2, 3, init_value=0, op=mul, x=6))

def is_even(num):
    return num % 2 == 0

def square(num):
    return num ** 2

numbers1 = [35, 12, 8, 99, 60, 52]
numbers2 = list(map(square, filter(is_even, numbers1)))
print(numbers2)

#列表生成式同样的功能
numbers2 = [num ** 2 for num in numbers1 if num % 2 == 0]
print(numbers2)

#Lambda函数
numbers1 = [35, 12, 8, 99, 60, 52]
numbers2 = list(map(lambda x: x ** 2, filter(lambda x: x % 2 == 0, numbers1)))
print(numbers2)

def calc1(*args, init_value=0, op=lambda x, y: x + y, **kwargs):
    result = init_value
    for arg in args:
        if type(arg) in (int, float):
            result = op(result, arg)
    for value in kwargs.values():
        if type(value) in (int, float):
            result = op(result, value)
    return result

print(calc1(1, 2, 3, x=4, y=5))
print(calc1(1, 2, 3, x=4, y=5, init_value=1, op=lambda x, y: x * y))


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值