DAY5之Python复习内容:函数(部分)

2 篇文章 0 订阅

1.可变参数:

# !/usr/bin/pyhton3
# -*-coding:UTF-8-*-

def personinfo(arg, *vartuple):
    print(arg)
    for var in vartuple:
        print('我属于不定长参数部分:', var)
    return
# *vartuple 存储元组

print('-----不带可变参数-----')
personinfo('小萌')
print('-----带两个可变参数-----')
personinfo('小萌', '21', 'beijing')
print('-----5个可变参数-----')
personinfo('小萌', '21', 'beijing', 'shanghai', 123, 'happy')

other = {'城市': '北京', '爱好': '编程'}
def perinfo(name, number, **kw):
    print('名字:', name, '学号:', number, '其他:', kw)

perinfo('小智', 100, 城市=other['城市'], 爱好=other['爱好'])
perinfo('小智', 100, **other)
# **kw存储字典

2.组合参数:

# !/usr/bin/python3
# -*-coding:UTF-8-*-

def exp(p1, p2, df=0, *vart, **kw):
    print('p1=', p1, 'p2=', p2, 'df=', df, 'vart=', vart, 'kw=', kw)

exp(1, 2)
exp(1, 2, c=3)# c=3 作为字典传入
exp(1, 2, 3, 'a', 'b')
exp(1, 2, 3, 'abc', x=9)

args = (1, 2, 3, 4)
kw = {'x': 8, 'y': 9}
exp(*args, **kw)

str = (1, 2, 3)
def sum1(*x):
    s = 0
    for i in x:
        s = s + i
    print(s)

sum1(*str)# sum(str)此时应定义为def sum1(x):

3.返回函数

# !/usr/bin/python3
# -*-coding:UTF-8-*-

def sum_late(*args):
    def calc_sum():
        ax = 0
        for n in args:
            ax = ax + n
        return ax
    return calc_sum

print('调用sum_late函数的结果:', sum_late(1, 2, 3, 4))
calc_sum = sum_late(1, 2, 3, 4)
# sum_late函数返回的结果赋予calc_sum
print('调用calc_sum函数的结果:', calc_sum())
# 闭包(Closure):内部函数对外部函数的(不是全局作用域)的变量进行引用,
# 内部函数被认为是闭包

# 每次调用sum_late()函数都会返回一个新的函数
f1 = sum_late(1, 2, 3, 4)
f2 = sum_late(1, 2, 3, 4)
print('f1 == f2 的结果为:', f1 == f2)

4.递归函数 

# !/usr/bin/python3
# -*-coding:UTF-8-*-

def fact(n):
    if n == 1:
        return 1
    return n*fact(n-1)
# 使用递归函数要防止栈溢出

print(fact(6))
# 解决递归栈溢出:尾递归优化
# 尾递归:函数返回时调用函数本身,
# 并且return语句不能含表达式,从而使递归本身始终占用一个栈帧

def fact_iter(num, product=1):
    if num == 1:
        return product
    return fact_iter(num-1, num*product)

print(fact_iter(6))

5.匿名函数

# !/usr/bin/python3
# -*-coding:UTF-8-*-

# lambda[arg1[, arg2[, ...argn]]]:experssion

# 求一个列表里大于3的元素


# 过程式编程实现
L1 = [1, 2, 3, 4, 5]
L2 = []
for i in L1:
    if i > 3:
        L2.append(i)
print('列表中大于3的元素有:', L2)

# 函数式编程实现(使用filter函数)
# filter(function, iterable)函数
# iterable内元素依次放入函数内判断,为真则返回
def func(x):
    return x > 3
f_list = filter(func, [1, 2, 3, 4, 5])
print('列表中大于3 的元素有:', [item for item in f_list])

# 匿名函数
print('列表中大于3 的元素有:', [item for item in filter(lambda x:x > 3, [1, 2, 3, 4, 5])])

6.偏函数

# !/usr/bin/python3
# -*-coding:UTF-8-*-

from functools import partial

def mod(n,m):
    return n % m

mod_by_100 = partial(mod, 100)
# 内置某默认参数

print('自定义函数,1007取余结果为:', mod(100, 7))
print('调用偏函数,1007取余结果为:', mod_by_100(7))

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值