python自定义函数

在Python中有一种自定义函数为匿名函数,可以用lambda关键字定义。通过lambda构造的函数可以没有名称,最大的特点是在自定义匿名函数时所有代码只能在一行内完成,语法如下:

lambda parameters : function_expression

lambda为匿名函数的关键起始词;parameters是函数可能涉及的形参,如果有多个参数,需要用英文状态的逗号隔开;function_expression为具体的函数体。如果构造的函数不是很复杂就用lambda匿名函数一气呵成,否则就只能使用def关键字构造有名称的自定义函数。举例描述lambda函数的使用:

# 统计列表中每个元素的频次
list6 = ['A','A','B','A','A','B','C','B','C','B','B','D','C']

# 构建空字典,用于频次统计数据的存储
dict3 = {}
# 循环计算
for i in set(list6):
    dict3[i] = list6.count(i)
print(dict3)

# 取出字典中的键值对
key_value = list(dict3.items())
print(key_value)

# 列表排序
key_value.sort()
print(key_value)

# 按频次高低排序
key_value.sort(key = lambda x : x[1], reverse=True)
print(key_value)

统计列表中元素频次,并根据频次从高到低排序。首先在统计元素频次时使用了for循环,其中set函数是构造集合对象,可以实现列表元素的去重;然后直接对存储键值对的列表直接排序,默认顺序是字母排序;在通过构建匿名函数,对列表元素(每一个键值对元组)的第二个元素降序排序。但无法通过lambda函数构建一个多行而复杂的函数。Python中提供了一个关键词def构造复杂的自定义函数,语法如下:

def function_name(parameters):
    function_expression
    return(result)

第一行结必须要加上英文状态的冒号,第二行开始需要缩进:

# 猜数字
def game(min,max):
    import random
    number = random.randint(min,max)  # 随机生成一个需要猜的数字
    while True:
        guess = float(input('请在%d到%d之间猜一个数字: ' %(min, max)))

        if guess < number:
            min = guess
            print('不好意思,你猜的的数偏小了!请在%d到%d之间猜一个数!' %(min,max))
        elif guess > number:
            max = guess
            print('不好意思,你猜的的数偏大了!请在%d到%d之间猜一个数!' %(min,max))
        else:
            print('恭喜你猜对了!')
            print('游戏结束!')
            break

# 调用函数
game(50,100)

float() 函数用于将整数和字符串转换成浮点数。

自定义函数的集中参数
必选参数

当你调用一个自定义函数时必须给函数中的必选参数赋值,否则程序将会报错。就上面的猜数字游戏为例如果不给game中的min赋值,将会报错。

默认参数

构造自定义函数时就已经给某些参数赋予了各自的初值,当调用函数时,这样的函数可以不用传值。

# 计算1到n的平方和
def square_sum(n, p = 2):
    result = sum([i ** p for i in range(1,n+1)])
    return(n,p,result)

print('1到%d的%d次方和为%d!' %square_sum(200))
print('1到%d的%d次方和为%d!' %square_sum(200,3))

如上构造的在自定义函数中,n为必选参数,p为默认参数。根据结果显示,在第一次调用函数时,并没有给p赋值且正常运行,第二次调用函数时,给p传递新值3,此时p参数由原来的2换为3。

可变参数
# 任意个数的数据求和
def adds(*args):
    print(args)
    s = sum(args)    
    return(s)

print('和为%d!' %adds(10,13,7,8,2))
print('和为%d!' %adds(7,10,23,44,65,12,17))

参数args前面加一个星号*这样的参数就称为可变参数,该参数可以接纳任意多个实参的并捆绑为元组形式。

关键字参数
# 关键字参数
def info_collection(tel, birthday, **kwargs):
    user_info = {}   # 构造空字典,用于存储用户信息
    user_info['tel'] = tel
    user_info['birthday'] = birthday
    user_info.update(kwargs)
    # 用户信息返回
    return(user_info)

# 调用函数    
info_collection(13612345678,'1990-01-01',nickname='月亮',gender = '女',edu = '硕士',income = 15000,add = '上海市浦东新区',interest = ['游泳','唱歌','看电影'])

在自定义函数info_collection中,tel和birthday都是必选参数kwargs为关键词参数。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值